php скрипт загружается, но не доходит до конца файла - PullRequest
0 голосов
/ 30 апреля 2020

Кажется, что следующий скрипт работает вечно. Это никогда не закончится.

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

for ($i = 500; $i<3000; i++){

    $url = "http://abcedfg.com/$i/index.html";

    curl_setopt($ch, CURLOPT_URL, $url);
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Попробуйте обернуть curl_init и curl_close в каждом запросе.

Примерно так:

function callurl($myurl) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $myurl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    $response = curl_exec ($ch);
    curl_close ($ch);
    return $response;
}

И вам придется вызывать эту функцию для каждого URL, например, используя al oop for.

Также попробуйте выполнить тестирование только с 10-20 запросами до go BIG. Учтите, что 2500 запросов, если каждый запрос занимает 1 секунду, переводятся на 41 минуту активности. По умолчанию ни один сервер не настроен на сохранение активности PHP в течение 40 минут. Вы можете изменить эти настройки на сервере, если у вас есть доступ к серверу.

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

Также рассмотрите возможность использования

curl_multi_init для повышения производительности и асинхронных запросов.

Но это не гарантирует, что запрос будет отброшен из-за ВРЕМЕНИ. Настолько точная настройка сервера все еще необходима.

Проверьте также этот пост о том, как увеличить ограничение по времени :

0 голосов
/ 30 апреля 2020
  1. Лучше закрывать файл каждый раз, когда вы открываете его, чтобы он освободил память для открытого файла.
  2. Вы можете получить список всех URL, выполнив команду l oop и затем выполните многоадресный запрос.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...