如何检查fifo管道是否可在PHP中写入

如何检查fifo管道是否可在PHP中写入,php,pipe,Php,Pipe,我想将消息从基于PHP的web前端传输到linux服务器上的后端服务 我正在发送带有文件内容的消息。当后端服务侦听和读取使用mkfifo mypipe创建的管道时,该接口工作良好 但是,我希望为后端服务失败的情况做好准备。在这种情况下,应通知前端用户并提供备选方案 当前,当后端未运行时,前端将变得无响应,因为文件内容阻塞 我尝试了各种方法来解决这个问题。这包括在stream\u context\u create之前尝试使用fopen打开管道,并使用ini\u set设置超时(“默认套接字超时”,

我想将消息从基于PHP的web前端传输到linux服务器上的后端服务

我正在发送带有
文件内容的消息。当后端服务侦听和读取使用
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";
    }