file_get_contents()的更快替代品

Rob*_*Rob 13 php curl file-get-contents curl-multi

目前我正在使用file_get_contents()将GET数据提交到一个站点数组,但是在执行页面时我收到此错误:

致命错误:超出最长执行时间30秒

我真正希望脚本做的就是开始加载网页,然后离开.每个网页最多可能需要5分钟才能完全加载,我不需要它完全加载.

这是我目前拥有的:

        foreach($sites as $s) //Create one line to read from a wide array
        {
                file_get_contents($s['url']); // Send to the shells
        }
Run Code Online (Sandbox Code Playgroud)

编辑:为了清除任何混淆,此脚本用于在其他服务器上启动脚本,不返回任何数据.

编辑:我现在正试图使用​​cURL来做这个技巧,通过设置一秒的超时使其发送数据然后停止.这是我的代码:

        $ch = curl_init($s['url']); //load the urls
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1); //Only send the data, don't wait.
        curl_exec($ch); //Execute
        curl_close($ch); //Close it off.
Run Code Online (Sandbox Code Playgroud)

也许我把选项设置错了.在我们发言时,我正在查看一些手册.只是给你一个更新.谢谢你们所有帮助我的人.

编辑:啊,发现了问题.我使用的是CURLOPT_CONNECTTIMEOUT而不是CURLOPT_TIMEOUT.哎呦.

但是现在,脚本没有触发.它们每个都使用ignore_user_abort(TRUE); 所以我无法理解这个问题

哈,划伤那个.现在工作.非常感谢大家

Fra*_*nco 6

有很多方法可以解决这个问题.

您可以使用cURL及其curl_multi_*函数来异步执行请求.或者使用cURL常用方法,但使用1作为超时限制,因此它将请求并返回超时,但请求将被执行.

如果你没有安装cURL,你可以使用像ZendX_Console_Process_Unix之类的东西继续使用file_get_contents但是分叉进程(不是那么酷,但有效),这样你就可以避免每个请求之间的等待.