当前位置:Gxlcms > PHP教程 > PHP触发耗时脚本

PHP触发耗时脚本

时间:2021-07-01 10:21:17 帮助过:1人阅读

在一个php脚本中触发另一个耗时很长的php脚本,不想等待,怎么做?curl去触发需要加个超时,如果超时设置短了失败率很高(网络不稳),长了也很耗时,只是相对时间少一点,fsockopen去触发需要加个延时(sleep(*)),都要留时间给网络传输数据,不是特别好,有其他解决方法吗?

(必须在服务器端)

回复内容:

在一个php脚本中触发另一个耗时很长的php脚本,不想等待,怎么做?curl去触发需要加个超时,如果超时设置短了失败率很高(网络不稳),长了也很耗时,只是相对时间少一点,fsockopen去触发需要加个延时(sleep(*)),都要留时间给网络传输数据,不是特别好,有其他解决方法吗?

(必须在服务器端)

用fsockopen fwrite()后 加上usleep(1000) 就可以了,目前稳定。

问题移步https://segmentfault.com/q/1010000004590173?_ea=660163

另外关于PHP超时处理要注意:

下面例子是设置数据传输时的超时,不是整个连接的超时。 如果跟我一样问题的想用当前脚本触发另一个耗时很长的php脚本不要用这种方式,这样设置是无效的。这样的设置是代表当前脚本 等待耗时长的另外一个脚本执行完成后返回数据,传输数据时不能超过一秒,不是说连接超过一秒就断开。

$opts = array(
      'http'=>array(
        'timeout'=>1, // 设置超时一秒,此处是大坑。
      )
);
$context = stream_context_create($opts);
file_get_contents('http://www.url.com/', false, $context);

如果用CURL
设置超时

curl_setopt($ch, CURLOPT_TIMEOUT, 1); // 超时秒

curl_setopt($ch,CURLOPT_NOSIGNAL, 1); //设置毫秒时必加
curl_setopt($ch,CURLOPT_TIMEOUT_MS, 1000); //超时毫秒
// 注意:这个超时设置是代表整个连接的超时设置。不管有没连接上,有没传输数据,到时间了就断开,返回false

--- 云网开 用手机建网站

php异步 推荐workerman
http://doc3.workerman.net/faq/async-task.html

Swoole性能比workerman高点 因为是纯c扩展的缘故

但同样workerman比Swoole安装要方便很多

用ajax异步。

Swoole

人气教程排行