[php]<?php

/**
* 实现一个异步的get效果,在处理大量后台耗时任务的时候可以用到,网上搜索PHP异步任务也会有几种方法,
* 但这种确实是效率最高的了。
*
*/
function get($url=”,$data=”){

$out = "GET /echo.php HTTP/1.1\r\n";
$out .= "Host: localhost\r\n";
$out .= "Connection: Close\r\n\r\n";

$fp = fsockopen("localhost", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, $out);
//忽略执行结果
//while (!feof($fp)) {
//echo fgets($fp, 128);
//}
fclose($fp);
}

}
$t1 = microtime(true);//
get();
echo microtime(true) – $t1;
echo ‘<br />’;
$t2 = microtime(true);//
/**
*这是在一个框架里面看到的方法,通过在调用系统命令后台启动一个PHP程序,但本身这些命令都是阻塞的
* 在windows 下通过在要执行的命令前面 加上 start /b 来达到后台执行的目的
* 在linux 下通过在执行的命令后面加 &
*
* 框架里面还有下面这么一串代码,不知道在windows linux 下使用不同的函数有什么区别。
*
* if($background){
* if(self::isWin()){
* //return pclose(popen($cmd, "r"));
* $this->_run_popen($cmd, false, ‘r’, true);
* //return $this->_run_system($cmd, false);
* }else{
* return $this->_run_system($cmd, false);
* }
* }else{
* return $this->_run_exec($cmd, false);
* }
*/

popen(‘start /b c:/wamp/bin/php/php5.4.16/php C:/wamp/www/echo.php’,’r’);
//popen(‘& c:/wamp/bin/php/php5.4.16/php C:/wamp/www/echo.php’,’r’);
echo microtime(true) – $t2;

/**
*
* 通过两种的方法对比,还是使用fsockopen()效率最高。
* 可以查看下面三次执行效果,很明显fsockopen()效率是最高的。
*
* 0.010668039321899 0.00089812278747559 0.0015311241149902
* 0.046630144119263 0.043296813964844 0.54633402824402
*
*
*/
?> [/php]

php实现异步操作,后台执行耗时后台任务。