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);
}