За последние 24 часа нас посетили 49954 программиста и 1730 роботов. Сейчас ищут 672 программиста ...

Похоже на проблему с таймаутом, но каким?

Тема в разделе "PHP для новичков", создана пользователем servitpol, 31 авг 2016.

  1. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    Всем привет! Помогите пожалуйста разобраться в проблеме:

    Есть скрипт парсинга обратных ссылок через api megaindexа. Когда скармливаю в скрипт файл со списком из 10-20-30-40 урлов, скрипт обрабытывает данные и выдает мне через ajax результат, но как только кидаю ему на съедение список из 50+ урлов, ответа не приходит, хотя по логам megaindex вижу что обработка данных завершилась. Думаю что проблема с таймаутом, но с каким конкретно??

    Обработчик:
    PHP:
    1. <?php
    2.  
    3. $uploaddir = 'files';
    4. $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
    5.  
    6. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    7.     include_once 'megaindex.php';
    8. $key = '*****'; // мой API ключ
    9. $mi = new MegaIndex($key);
    10.  
    11.  
    12. $file_array = file($uploadfile); // считывание файла в массив $file_array
    13. for($i = 0;$i < count($file_array); ++$i) { //цикл перебирает список полученых урлов из массива
    14.     $param = array('domain' => $file_array[$i], 'count' => 1, 'link_per_domain' => 1);
    15.     $array = $mi->get('backlinks', $param);
    16.     for($a = 0;$a < (count($array) - 2); ++$a) { //цикл перебирает номер вложеного массива из списка полученых урлов в массиве
    17.     echo $i.":".$array['data'][$a]['domain_from']."</br>";
    18.  
    19. }
    20. }
    21. } else {
    22.     echo "Incorrect file\n";
    23. }
    24.  
    25. ?>
    Ajax у меня выглядит таким образом:
    Код (Javascript):
    1. $.ajaxSetup({
    2.         timeout: 60000000 //Время ожидания ответа от сервера в миллисекундах
    3.     });
    4.    
    5.     $.ajax({
    6.         type: "POST",
    7.         processData: false,    
    8.         contentType: false,
    9.         url: 'Urls.php',
    10.         data: formData,
    11.         beforeSend: funcBefore,
    12.         success: funcSucces
    13.     });
    Увеличил через .htaccess вот эти два таймаута:
    Код (Text):
    1. php_value max_execution_time 100000
    2. php_value default_socket_timeout 100000
    Посмотрел через конструкцию
    Код (Text):
    1. <?php phpinfo(); ?>
    Настройка таймаутов подтягивается, но скрипт по прежнему не дает результат.


    HELP!
     
  2. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    @servitpol, лучше, чем играться с таймаутами, подумай как можно считывать всё по кускам. Сейчас таймаут ты увеличишь, а потом захочешь 200+ ссылок закинуть, опять увеличивать будешь?
    Лучше аяксом давай номер позиции, с какой читать. Обработчик пусть принимает эти позиции и читает именно их.
    Допустим, первая итерация у тебя будет с первой позиции по десятую, вторая с десятой по двадцатую. И так пока не закончатся данные
     
    servitpol нравится это.
  3. servitpol

    servitpol Новичок

    С нами с:
    17 авг 2016
    Сообщения:
    63
    Симпатии:
    3
    @mr.akv хороший совет, спасибо! Я даже как-то не подумал соорудить такую конструкцию...
    --- Добавлено ---
    Ребята из поддержки хостинга увеличили у себя таймаут до 15 минут, мне хватит, а идея "считывать по кускам" мне понравилась, реализую...