我目前正在通过运行为每日cron的php脚本使用CURL从网站的管理区域以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";
答案 0 :(得分:2)
您可以使用以下curl选项将所有卷曲传输详细信息记录到日志文件中,并检查是否存在任何问题。
$fp = fopen('./debug/transfer.log');
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
curl_setopt($curl, CURLOPT_STDERR, $fp);
另外我认为CURLOPT_TIMEOUT选项不支持为无限期超时指定“0”值。您需要在此处指定最大超时值。