说到PHP无限执行页面,首先肯定想到set_time_limit(0);,的确,这个可以让页面无限期执行。但是,这个也有不适用的时候。比如,在nginx中限制单个PHP页面执行的时间,或者在做数据统计的时候,你总不至于让页面一直在转吧。下面分享一个我想到的解决方案,当然,不一定是最优的。
首先,将涉及到大量运算的代码单独写到页面中,称之为_exe.php。
然后,写一个中间页面来执行这个页面,称之为_do.php,代码如下:
$name = $_GET['name'];
// 调用cli模式,执行文件
exec("php _do.php $name");
最后,在需要执行_exe.php页面的地方加如下代码:
$opts = array(
'http'=>array(
'method' => "GET",
'timeout' => 2, //设置请求时间,2秒后放弃请求
'user_agent'=>"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
)
);
$context = stream_context_create($opts);
file_get_contents(’_do.php?name=abc‘, false, $context);
总结,就是使用一个中间页面,调用php的cli模式,进行执行文件。因为php的cli模式,可以无限期执行文件。这也相当于变相实现了多线程!