1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Зависание PHP скрипта.

Тема в разделе "Web Coding", создана пользователем lexesv, 11 дек 2006.

Статус темы:
Закрыта.
Модераторы: latteo
  1. lexesv

    lexesv

    Регистр.:
    15 ноя 2006
    Сообщения:
    219
    Симпатии:
    103
    Такая проблемка

    вот пример кода
    Код:
    
    $fp=fopen("links.dat", "a+");
    $links=file("cat.dat");
    
    for ($i=0; $i<count($links); $i++)
    		{
    		echo $links[$i]; echo "- scan ok<br>";
    $cont=get_content ($links[$i]);
    preg_match_all("|<a  href=\"([\S\d]+)\">Подробнее|isU", $cont, $arr);
      //echo count($arr[0]);
      for ($a=0; $a<count($arr[0]); $a++)
      {
      
    	fwrite($fp, "http://site.ru".$arr[1][$a]."\n");
      }
             
    		}
    fclose($fp);
    
    function get_content ($url) {
    $ch = curl_init();
       curl_setopt($ch, CURLOPT_URL, $url);
       curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       $cont=curl_exec ($ch);
    curl_close ($ch); 
    return $cont;
    }
    В масиве $links где то 1000 ссылок.

    В итоге скрипт зависает в браузере, но в файл вроде как пишет всё (под сомнением).

    Так вот есть ли какой то способ оптимизации , при переборе больших циклов с парсингом полученных html страниц и записью результатов в файл
     
  2. difour

    difour Прохожие

    жди, ты открываешь страницы, это требует время и нормального инета
     
  3. lexesv

    lexesv

    Регистр.:
    15 ноя 2006
    Сообщения:
    219
    Симпатии:
    103
    Инет 2 мегабита (гарантированная полоса!)

    И вот посмотрел за 2,5 часа скрипт обработал лишь половину и завис.
     
  4. REALiSTiC

    REALiSTiC

    Регистр.:
    30 мар 2006
    Сообщения:
    354
    Симпатии:
    126
    Разбей большой файл на несколько мелких.
     
  5. polo

    polo Создатель

    Регистр.:
    4 окт 2006
    Сообщения:
    29
    Симпатии:
    11
    Пошагово такое надо делать, с js или header редиректом, и полезно было бы выводить что-то типа обработано xx записей из xxx. Далее конструкция
    for ($a=0; $a<count($arr[0]); $a++) оптимизируется так:
    for ($a=0, $size = sizeof($arr[0]); $a<$size; $a++)
     
  6. lexesv

    lexesv

    Регистр.:
    15 ноя 2006
    Сообщения:
    219
    Симпатии:
    103
    Спасибо всем за помощь.

    Выход нашел в запуске сканирования в несколько потоков через iframe.
     
  7. MisterX

    MisterX Постоялец

    Регистр.:
    10 ноя 2006
    Сообщения:
    101
    Симпатии:
    7
    Можно еще добавить таймаут на запрос урла:
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
     
Статус темы:
Закрыта.