实现队列的几种方式

popen

从方法名上看popen和fopen非常相似,fopen是打开一个文件,popen是打开一个进程文件。

#file index.php
$file = __DIR__.'/exec.php';
pclose(
    popen("php $file",'r')
);
#file exec.php
error_log(time(),3,'error_log.log');

执行index.php的结果是会产生一个名字为error_log的日志文件,写入当前的时间戳。这个方法的好处是执行速度快,而且也很简单,它的原理是调用操作系统本身的进程去执行一个php脚本。但是只能在本地执行,如果队列的执行程序在远程服务器上,popen就无能无力了。

curl

$ch = curl_init();

curl_setopt_array($ch,array(
    CURLOPT_URL => 'http://localhost/script.php',
    CURLOPT_HEADER => false,
));

$content = curl_exec($ch);

curl_close($ch);

echo $content;

用curl函数不受空间限制,可以执行本地的php脚本,也可以请求远程服务器脚本。

fsockopen

$url = 'http://remote.com';
$port = 80;
$timeout = 10;
$fp = fsockopen($url,$port,$errno,$errstr,$timeout);
if( ! $fp){
    echo "$errstr : $errno";
}else{
    $out = "GET /script.php / HTTP/1.1\r\n";
    $out .= "Host: $url\r\n";
    $out .= "Connection: Close\r\n\r\n";

    fwrite($fp,$out);
    fclose($fp);
}

推荐阅读更多精彩内容