您好,欢迎访问一九零五行业门户网

说好的fsockopen的非阻塞模式呢?为什么还是会阻塞

function fsockopen_test(){ $hostname = 'm.cn'; $url = '/test/1.php'; $fp = fsockopen($hostname, 80, $errno, $errstr, 5); if (!$fp) { echo $errstr ($errno); return false; } stream_set_blocking($fp,0);//开启了手册上说的非阻塞模式 $header = get $url http/1.1\r\n; $header.=host: $hostname\r\n; $header.=connection: close\r\n\r\n;//长连接关闭 fwrite($fp, $header); fclose($fp);}fsockopen_test();
请求的/test/1.php里面的代码:
sleep(6);$fp = fopen ( './data.txt' , 'w' );fwrite ( $fp ,111);fclose ( $fp );
通过浏览器控制台查看实际还是会等test/1.php执行完毕,这边才刷新。这是为什么呢?
回复讨论(解决方案) 没问题呀
echo date('y-m-d h:i:s'), php_eol;fsockopen_test();echo date('y-m-d h:i:s'), php_eol;



可以看到没有延时
没问题呀
echo date('y-m-d h:i:s'), php_eol;fsockopen_test();echo date('y-m-d h:i:s'), php_eol;



可以看到没有延时 额?我这边怎么有呢?
没问题呀
echo date('y-m-d h:i:s'), php_eol;fsockopen_test();echo date('y-m-d h:i:s'), php_eol;



可以看到没有延时 我修改成你的代码,然后把原来的输出注释了,发现还是有延时呢
没问题呀
echo date('y-m-d h:i:s'), php_eol;fsockopen_test();echo date('y-m-d h:i:s'), php_eol;



可以看到没有延时
找到原因了,把这段代码注释掉就ok了
function fsockopen_test(){ $hostname = 'm.cn'; $url = '/test/1.php'; $fp = fsockopen($hostname, 80, $errno, $errstr, 5); if (!$fp) { echo $errstr ($errno); return false; } stream_set_blocking($fp,0);//开启了手册上说的非阻塞模式 $header = get $url http/1.1\r\n; $header.=host: $hostname\r\n; $header.=connection: close\r\n\r\n;//长连接关闭 fwrite($fp, $header); /*$html = ''; while (!feof($fp)) { $html.=fgets($fp); } echo $html;*/ fclose($fp);}echo time(),'
';fsockopen_test();echo time(),'
';
其它类似信息

推荐信息