【问题标题】:php curl_exec doesn't react to server responsephp curl_exec 对服务器响应没有反应
【发布时间】:2014-02-11 07:57:48
【问题描述】:

我正在尝试通过 Curl 将文件上传到另一台服务器。该脚本将文件上传到我自己的服务器。我的服务器处理上传和响应,我的脚本继续运行。如果上传的文件很大(大约 500MB)(似乎确实不同),则即使在我的服务器响应后脚本也会继续运行(AFAIK 通过记录服务器端脚本的输出)。客户端是运行 Xampp 的 Windows 7 x64 机器(尝试了不同的版本)。如果我通过 html 表单将同一个文件上传到同一个服务器端脚本,一切正常,我得到我的回应。可能是什么问题?

$ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array(
        "MAX_FILE_SIZE" => "2147483648",
        "action" => "upload",
        "userfile" => "@".$filepath));

    if($uploadresponse = curl_exec($ch)){
          echo"Upload done!";
      } else {
        echo"Curl error no. ".curl_errno($ch)." (".curl_error($ch).")";
            }

【问题讨论】:

  • 我现在已经在另一台机器上进行了尝试,一台装有 Windows Server 2012 x64 的服务器(通过 Xampp 而不是 IIS)。有效。原因可能是上传速度比通过我的家庭连接快 5 倍。
  • 从 Win 2012 服务器安装相同的 Xampp 后,它无法在我的家用计算机上运行。我也在安全工作模式下尝试过,但没有运气。防火墙杀毒软件等从测试开始就被禁用了。我将在另一台安装了全新 Windows 7 的机器上试用它。如果它不起作用,我会在家里尝试安装 Windows server 2012,因为问题可能是路由器或其他问题。
  • 它也不能在 Windows 服务器上运行。但是在我连接到邻居的 WLAN 后它就起作用了。我现在来看看路由器设置。

标签: php windows apache curl xampp


【解决方案1】:

curl 有一个默认超时允许它执行,无论成功。您可以使用此 curl 选项延长此时间(因为我怀疑您在上传大文件时超时):

curl_setopt($ch, CURLOPT_TIMEOUT, 5 * 60); // 5 minutes

【讨论】:

  • 我刚刚试了一下,但是服务器响应后脚本还在运行。
【解决方案2】:

只需将超时设置为0,即可对CURLOPT_TIMEOUT 设置无时间限制。

curl_setopt($ch, CURLOPT_TIMEOUT, 0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-04
    • 2011-08-22
    • 2017-01-09
    • 2017-01-04
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多