当目标 URL 无响应时如何删除 PHP cURL 请求?


我有一个共享主机的网站,Entry Processes限制为 30。我在 PHP cron 作业上使用 cURL 函数定期从另一个 URL 获取数据。相关代码如下。


    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");

    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);

大多数时候,我的网站运行得很好,只使用了大约 4-5 个进入过程。每当此目标$url由于某种原因没有响应时(并且经常发生)。我很快进入了进入流程限制,所有进一步的请求都被拒绝了。


CURLOPT_CONNECTTIMEOUT似乎没有按预期工作。我怎样才能避免这种情况?我检查了其他 cURL 选项,但似乎都没有工作。


哔哔one
浏览 108回答 1
1回答

慕沐林林

10 秒的超时时间非常长。根据您服务的请求数量以及您的所有请求是否触发此调用,您所有可用的进程可能只是在等待来自该服务器的响应。你可以考虑降低这个数字。curl 也有第二次超时CURLOPT_TIMEOUT。尝试另外设置它。如果与服务器的连接在 10 秒内完成,然后服务器需要 60 秒来处理您的请求,则当前超时对您没有帮助,因为它只会限制连接时间。如果您不想依赖 cURL 正在做什么,您还可以使用set_time_limit()为 php 进程本身设置时间限制。如果您将其设置为例如 30 秒,那么无论 cURL 是否完成,php 都会在该时间之后停止执行。这应该在 curl 调用之前完成。
打开App,查看更多内容
随时随地看视频慕课网APP