Запрос CURL неполный, подозреваемый тайм-аут, но не уверен

В настоящее время я использую CURL через php-скрипт, работающий как ежедневный cron, для экспорта данных о продукте в формате csv из административной области сайта.

Обычный способ экспорта данных — перейти на страницу «Экспорт» в браузере и установить конфигурацию, а затем нажать кнопку «Экспорт данных». Но поскольку количество продуктов, которые я экспортирую, очень велико, а экспорт данных занимает более 5-10 минут, я решил использовать функцию curl php, чтобы ежедневно имитировать это через cron.

Раньше он работал нормально, но недавно, когда я увеличил количество товаров в магазине на 500+, скрипт не возвращает экспортированные данные. Тестирование вручную, нажав кнопку «Экспорт» в браузере, возвращает данные правильно. Таким образом, при ручном запуске экспорта в браузере не возникает проблемы с тайм-аутом.

Я протестировал и, удалив/уменьшив количество продуктов (таким образом, необходимое время), скрипт php-curl снова работает нормально при запуске из cron.

Поэтому я подозреваю, что это как-то связано с проблемой тайм-аутов, в частности, с функцией curl в php.

Я установил для CURLOPT_TIMEOUT и CURLOPT_CONNECTTIMEOUT значение «0» соответственно, чтобы попробовать. В сценарии php-curl я также установил «set_time_limit (3000)». Но все же это не работает, и время ожидания запроса истекает, а скрипт не возвращает полный набор данных csv.

Любая помощь в решении/понимании этой проблемы будет высоко оценена!

Отредактировано: добавлена ​​часть кода, где скрипт curl вызывает функцию экспорта.

$interface = new StoreInterface(); 
echo "Start exporting at " .  date('l jS \of F Y h:i:s A') . "\n";
set_time_limit(3000);
$result_html = $interface->exportProducts();
//parse $result_html to only retain the csv format
preg_match('/<pre>(.*)<\/pre>/s',$result_html[0],$output);
if(strlen($output[1])<10) {   //debugging for now
echo "Export did not happen correctly. Quit\n";
    die('Export unsuccessful');
}
file_put_contents($output_path,$output[1]);
echo "Script completed. Thank you! \n";

person girlygeek    schedule 16.05.2010    source источник
comment
что вы имеете в виду под таймаутом скрипта? Есть конкретное сообщение об ошибке? Вы получаете только частичные результаты?   -  person Artefacto    schedule 17.05.2010
comment
Конкретного сообщения об ошибке нет. Да, только частичные результаты. Сценарий выводит данные csv в виде временного файла на сервере, когда функция экспорта вызывается в сценарии хранилища сценарием curl. В случае успеха он должен вернуть полное содержимое временного файла сценарию curl для обработки. Но в данном случае содержимое временного файла внезапно останавливается на полпути, и скрипт curl возвращается, указывая, что данные неполны.   -  person girlygeek    schedule 17.05.2010
comment
Вы проверяли журналы ошибок?   -  person nikc.org    schedule 17.05.2010


Ответы (1)


Вы можете использовать следующие параметры curl, чтобы записать все данные о переносе curl в файл журнала и проверить наличие проблем.

$fp = fopen('./debug/transfer.log');
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
curl_setopt($curl, CURLOPT_STDERR, $fp);

Также я считаю, что параметр CURLOPT_TIMEOUT не поддерживает указание значения «0» для неопределенного времени ожидания. Здесь необходимо указать максимальное значение тайм-аута.

person Ramesh Tabarna    schedule 16.05.2010
comment
Я попробую этот метод и посмотрю, как. Спасибо. - person girlygeek; 17.05.2010