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