В настоящее время я использую 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";