【问题标题】:Executing api in while loop, gives 500 internal server error在 while 循环中执行 api,给出 500 内部服务器错误
【发布时间】:2012-05-16 16:45:53
【问题描述】:

我正在使用 curl 在 while 循环中执行 someapi。如果我不执行 api 而只是回显 api 正在执行的内容,则输出很好......如果我执行那个 api,让我们在一个 while 循环中说 1000 次......它在中途给出 500 内部服务器错误。

我希望 api 应该一个接一个地执行(同步),如果它得到任何错误,它应该忽略它并继续。

这是我的代码:

while($res = mysqli_fetch_array($allDetail)){
    $resulter = myCurl($res['var1'],$res['var2']);
}

function myCurl($var1,$var2){
            $ch = curl_init('some_api_url_with_var1_var2');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    $response = curl_exec($ch);
    curl_close($ch);
}

这是我第一次使用 curl,我也是 php 新手。 api返回true或json格式的任何错误,但我不想关心它,只是api继续执行

【问题讨论】:

  • 是您的服务器返回 HTTP 500 吗?可能您正在使用(快速)cgi,脚本由于时间限制而终止,apache 没有收到响应,等等。在错误日志中检查“脚本头过早结束” - 如果有,就是这种情况
  • 500 是由于内存使用造成的,你能帮我解决这个问题吗??
  • 你可以参考这个链接http://php.net/manual/en/function.curl-multi-init.php,用于多个curl请求调用而不是循环。

标签: php api curl


【解决方案1】:

HTTP 错误分为几类:

  • 2xx 是成功消息
  • 3xx 是重定向消息
  • 4xx 是客户端错误消息
  • 5xx 是服务器错误消息

“500 内部服务器错误”是您遇到的 API 上的错误。你可能打得太快了,他们无法处理。如果 API 是您的,请尝试调试那里发生的事情。例如,当 PHP 发出致命错误(内存使用或超时可能导致致命错误)时,Apache 会自动发送 500。其他语言也有类似的行为。

在 while 循环的每次迭代中尝试 sleep(1)。代码应该运行得更慢,但如果一切顺利,这意味着在你用力打击它们之前。还有一个usleep() 函数可以在毫秒而不是秒内休眠。

Curl 有一个CURLOPT_FAILONERROR 选项。当它设置为 true 时,它​​会忽略错误。如果您想在请求失败时继续循环,应该会有所帮助。 curl_error() 函数也很有用。

【讨论】:

  • 它不是我的 api,它 100% 没有错误。它基本上是因为内存使用量。我怎样才能让它在服务器上工作,它应该使用更少的内存并快速工作。任何解决方案?睡眠功能没有帮助
  • 你应该联系 API 的人,询问他们发生了什么事。 500 是服务器错误,不是你的。
猜你喜欢
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-19
相关资源
最近更新 更多