如何检查fifo管道是否可在PHP中写入
我想将消息从基于PHP的web前端传输到linux服务器上的后端服务 我正在发送带有如何检查fifo管道是否可在PHP中写入,php,pipe,Php,Pipe,我想将消息从基于PHP的web前端传输到linux服务器上的后端服务 我正在发送带有文件内容的消息。当后端服务侦听和读取使用mkfifo mypipe创建的管道时,该接口工作良好 但是,我希望为后端服务失败的情况做好准备。在这种情况下,应通知前端用户并提供备选方案 当前,当后端未运行时,前端将变得无响应,因为文件内容阻塞 我尝试了各种方法来解决这个问题。这包括在stream\u context\u create之前尝试使用fopen打开管道,并使用ini\u set设置超时(“默认套接字超时”,
文件内容的消息。当后端服务侦听和读取使用mkfifo mypipe
创建的管道时,该接口工作良好
但是,我希望为后端服务失败的情况做好准备。在这种情况下,应通知前端用户并提供备选方案
当前,当后端未运行时,前端将变得无响应,因为文件内容阻塞
我尝试了各种方法来解决这个问题。这包括在stream\u context\u create
之前尝试使用fopen
打开管道,并使用ini\u set设置超时(“默认套接字超时”,10)代码>
或
我还尝试了PHP函数是可写的(“mypipe”)
,但是,正如预期的那样,它会说yes,这与接收器是否在监听无关
如何检查管道是否阻塞并避免前端无响应的情况。使用文件内容而不是文件内容。当您这样做时,您将能够检测到它何时会阻塞,因为fwrite
只会返回它没有写入任何内容而不是阻塞。将尝试。如果管道当前由其他人写入,或者由于已满而无法写入,fwrite会等待还是返回一个允许我区分这些情况的错误?
$context = stream_context_create(array('http'=>array(
'timeout' => 10
)
));
if(file_put_contents("mypipe",$data,FILE_APPEND | LOCK_EX,$context)==FALSE){
error_log("Could not write to pipe.");
}else{
echo "Sent message";
}