Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает код, ~27000 строк в базе. 
:(
    Опции темы
Sunvas
Дата 24.4.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Есть код, который должен парсить странички сайта.
Код

for ($j=1;$j<=10;$j++){
$m=getlink("somesite");
for ($i=0;$i<25;$i++)
 $db->sql_query("INSERT INTO soft VALUES (NULL, '".$m[1][$i]."', '".$m[2][$i]."', '".$m[3][$i]."', '".$m[4][$i]."', '".$m[5][$i]."')");               }

В результате выполнения функции getlink в переменную $m записывается двумерный массив (таблица) вида $m[N][n], где N - число от 1 до 5 (номер столбца); n - число от 0 до 24 - число от 0 до 24 (номер строки).

После выполнения этого кода в базу записывается около 27000 строк. Почему?


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
capitan
Дата 24.4.2007, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Из этого кода ничего не понятно.
Весь код в студию.
PM MAIL WWW ICQ   Вверх
Fally
Дата 24.4.2007, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



Sunvas, здаётся мне что вся Ваша проблема здесь:
Код

for ($j=1;$j<=10;$j++){
$m=getlink("somesite");
....

Если функция getlink() возвращает массив который перебирая нужно записать в БД, тогда зачем делать возвращаемое ф-цией значение в цикле? Если я прав, тогда сделайте вот так:
Код

$m=getlink("somesite");
for ($j=1;$j<=10;$j++){
....


P.S. Согласен с автором предыдущего поста, побольше кода, пожалуйста...

Это сообщение отредактировал(а) Fally - 24.4.2007, 17:40


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
Sunvas
Дата 24.4.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Код

function getdescription($url){ //переход по ссылке и новый парсинг текста
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, $url);
curl_setopt($cu, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cu, CURLOPT_TIMEOUT, 100);
$output = curl_exec($cu);
$succeeded = curl_errno($cu) == 0 ? true : false;
$result=Array();
if ($succeeded) {
preg_match('Парсинг текста также по трем параметрам', $output, $out);
$result[]= $out[2];
$result[]= $out[1];
$result[]= $out[3];
return $result;
}}

function getlink($url){ //Выдергивание ссылок
$cu = curl_init();
curl_setopt($cu, CURLOPT_URL, $url);
curl_setopt($cu, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($cu, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cu, CURLOPT_TIMEOUT, 100);
$output = curl_exec($cu);
$succeeded = curl_errno($cu) == 0 ? true : false;
$result=Array();
if ($succeeded) {
 preg_match_all('Выдергивание ссылок по трем параметрам (имени ссылки, текста ссылки, описание ссылки)', $output, $out);
$result[]=$out[1];
$result[]=$out[2];
$result[]=$out[3];
$tmp2=Array();
$tmp3=Array();
$tmp4=Array();
for ($i=0;$i<count($out[1]);$i++){
  $tmp1=getdescription($out[1][$i]);
  $tmp2[]=$tmp1[0];
  $tmp3[]=$tmp1[1];
  $tmp4[]=$tmp1[2];
  }
$result[]=$tmp2;
$result[]=$tmp3;
$result[]=$tmp4;
return $result;
}}
for ($j=1;$j<=10;$j++){
$m=getlink("somesite");
for ($i=0;$i<25;$i++) $db->sql_query("INSERT INTO soft VALUES (NULL, '".$m[1][$i]."', '".$m[2][$i]."', '".$m[3][$i]."', '".$m[4][$i]."', '".$m[5][$i]."')");  
}


Добавлено через 4 минуты и 7 секунд
Цитата(Fally @  24.4.2007,  17:32 Найти цитируемый пост)
Если функция getlink() возвращает массив который перебирая нужно записать в БД, тогда зачем делать возвращаемое ф-цией значение в цикле? Если я прав, тогда сделайте вот так:

На сайте 10 страниц - они вида site.ru/doc1.html, site.ru/doc2.html и т.д.  Вот и зациклил:
Код

$m=getlink("site.ru/doc$j.html
");


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Fally
Дата 24.4.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



В цикле сделайте помимо присваивания ещё и var_dump(m), и посмотрите на результат его вывода.. и сравните каждый вывод..

Это сообщение отредактировал(а) Fally - 24.4.2007, 17:46


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
capitan
Дата 24.4.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



а если так:
Код

        for ($j=1;$j<=10;$j++){
        $m=getlink("somesite");
        for ($i=0;$i<25;$i++){
            $db->sql_query("INSERT INTO soft VALUES (NULL, '".$m[1][$i]."', '".$m[2][$i]."', '".$m[3][$i]."', '".$m[4][$i]."', '".$m[5][$i]."')");    
        }
    }

PM MAIL WWW ICQ   Вверх
Fally
Дата 24.4.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



Никакой разницы, если в теле цикла производится только одна операция, как у вас, то подойдёт и вариант без фигурных скобок, они (скобки) предназначены для создания блоков операция производящихся в цикле..


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
capitan
Дата 24.4.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Fally, 
Иногда код работает вроде как не по правилам.
Сказывается мне что это не весь код. И где-то идёт пересечение счётчика $j или $i, где-то он обнуляется и цикл идёт заново.
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 24.4.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(capitan @  24.4.2007,  18:12 Найти цитируемый пост)
Сказывается мне что это не весь код.

Это весь код. Правда используется библитека MySql из SLAED CMS для работы с базой. Но не думаю, что именно она создает помехи.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
capitan
Дата 24.4.2007, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Сделай так и увидешь сколько записей:
Код

$num=0;
for ($j=1;$j<=10;$j++){
        $m=getlink("somesite");
        for ($i=0;$i<25;$i++){
            $num++;
        }
    }
echo 'Всего записей: '.$num;

PM MAIL WWW ICQ   Вверх
Sunvas
Дата 24.4.2007, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(capitan @  24.4.2007,  17:59 Найти цитируемый пост)
а если так:

Так тоже не помогло.. Да, значения добавляються медленно. Но если уже перевалило за 200, то уверен, что код не работает.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
capitan
Дата 24.4.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Цитата(Sunvas @ 24.4.2007,  18:19)
Цитата(capitan @  24.4.2007,  17:59 Найти цитируемый пост)
а если так:

Так тоже не помогло.. Да, значения добавляються медленно. Но если уже перевалило за 200, то уверен, что код не работает.

А их у тебя должно быть 250, исходя из твоего кода.
PM MAIL WWW ICQ   Вверх
Sunvas
Дата 24.4.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(capitan @  24.4.2007,  18:23 Найти цитируемый пост)
А их у тебя должно быть 250, исходя из твоего кода.

Когда я писал - было 236, а сейчас проверил - 272. smile 


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Fally
Дата 24.4.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 17.8.2006
Где: Dahla

Репутация: 3
Всего: 4



capitan, у меня насчёт пересечения параметров циклов тоже есть подозрение, но точно сказать не возможно... а насчёт фиг. скобок, никогда не встречался с неправильным выполнением инструкций записанных в них, но опять же всё возможно..
Sunvas, попробуйте без i-го цикла вот так:

Код

("INSERT INTO soft VALUES (NULL, '".$m[1][0]."', '".$m[2][0]."', '".$m[3][0]."', '".$m[0][$i]."', '".$m[5][0]."'), (NULL, '".$m[1][1]."', '".$m[2][1]."', '".$m[3][1]."', '".$m[4][1]."', '".$m[5][1]."'), (NULL, '".$m[1][2]."', '".$m[2][2]."', '".$m[3][2]."', '".$m[4][2]."', '".$m[5][2]."'), ...)


так будет больше кода, НО:
1) избавитесь от лишнего цикла -> ускориться время работы скрипта
2) точно количество добавлений в БД
3) САМОЕ ВАЖНОЕ. Уменьшиться нагрузка на сервер БД, т.к. такие запросы, как у Вас идущие подряд, но почти идентичные выполняются медленнее, чем мой запрос который выполниться в моём примере.


--------------------
Прежде чем задать вопрос на форуме воспользуйтесь поиском.
user posted image
user posted image
PM MAIL   Вверх
capitan
Дата 24.4.2007, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



Теперь сделай так:
Код

$num=0;
for ($j=1;$j<=10;$j++){
        $m=getlink("somesite");
        for ($i=0;$i<25;$i++){
            $num++;
       if($num>300) echo $num;die;
        }
     
    }
echo 'Всего записей: '.$num;


И увидишь где проблема: в твоём коде или в классе mysql.
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0954 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.