【问题标题】:CURL request incomplete, suspect timeout but not sureCURL 请求不完整,怀疑超时但不确定
【发布时间】: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 脚本会返回指示数据不完整。
  • 你检查过你的错误日志吗?

标签: php curl timeout cron


【解决方案1】:

您可以使用以下 curl 选项将所有 curl 传输详细信息记录到日志文件并检查是否存在任何问题。

$fp = fopen('./debug/transfer.log');
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
curl_setopt($curl, CURLOPT_STDERR, $fp);

我还认为 CURLOPT_TIMEOUT 选项不支持为无限超时指定“0”值。您需要在此处指定最大超时值。

【讨论】:

  • 我会试试这个方法,看看效果如何。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多