【发布时间】:2011-02-20 04:11:46
【问题描述】:
我目前正在通过一个作为每日 cron 运行的 php 脚本使用 CURL,以从站点的管理区域以 csv 格式导出产品数据。
导出数据的正常方式是在浏览器中进入导出页面,设置好配置,然后点击“导出数据”按钮。但是由于我要导出的产品数量非常多,导出数据需要5-10多分钟,所以我决定每天使用php的curl函数通过cron来模拟。
以前,它工作正常,但最近我将商店中的产品数量增加了 500+,脚本无法返回导出的数据。通过单击浏览器中的“导出”按钮手动对其进行测试,确实可以正确返回数据。因此,在浏览器中手动运行导出不会出现“超时”问题。
我已经测试并通过删除/减少产品的数量(因此需要的时间),当从 cron 运行时,php-curl 脚本再次正常工作。
所以我怀疑它与超时问题有关,特别是与 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 脚本在存储脚本中调用“导出”函数时,该脚本将 csv 数据作为临时文件输出到服务器中。如果成功,则应将临时文件的全部内容返回给 curl 脚本进行处理。但在当前情况下,临时文件的内容中途突然停止,curl 脚本会返回指示数据不完整。
-
你检查过你的错误日志吗?