我目前正在使用CURL通过运行为每日cron的php脚本从网站的管理区域以csv格式导出产品数据.
导出数据的常规方法是在浏览器中转到“导出”页面,然后设置配置,然后单击“导出数据”按钮.但是由于我导出的产品数量非常大,导出数据需要5-10分钟,我决定使用php的curl函数通过cron每天模仿这个.
以前,它工作正常,但最近随着我将商店中的产品数量增加500,脚本无法返回导出的数据.通过单击浏览器中的“导出”按钮手动测试,确实可以正确返回数据.因此,手动在浏览器中运行导出没有“超时”问题.
我已经测试过并通过删除/减少产品数量(因此需要时间),php-curl脚本在从cron运行时再次正常工作.
所以我怀疑它与超时问题有关,特别是与php中的curl函数有关.
我已经将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";
最佳答案 您可以使用以下curl选项将所有卷曲传输详细信息记录到日志文件中,并检查是否存在任何问题.
$fp = fopen('./debug/transfer.log');
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
curl_setopt($curl, CURLOPT_STDERR, $fp);
另外我相信CURLOPT_TIMEOUT选项不支持为无限期超时指定“0”值.您需要在此处指定最大超时值.