【问题标题】:how to prevent fopen() from hanging when opening up a named pipe in PHP在 PHP 中打开命名管道时如何防止 fopen() 挂起
【发布时间】:2014-08-11 18:21:32
【问题描述】:

我有一个如下所示的命名管道文件:

prw-r--r-- 1 root root 0 Aug 11 17:01 /tmp/debug

当我在 PHP 中做这样的事情时:

$fp = fopen("/tmp/debug", "r");

它挂起(即永远不会返回)。有没有办法让这个调用返回和/或超时?

(编辑)

请注意,我希望一个进程以写入权限打开此管道,而另一个进程以读取权限打开该管道。有人正在写入该管道,而其他人正在从该管道读取。问题是读者有时会挂在 fopen() 上——我总是想要返回它,无论它是否成功。

【问题讨论】:

标签: php fopen


【解决方案1】:

http://php.net/manual/en/function.stream-set-timeout.php

注意:

注意:为了可移植性,强烈建议您在使用 fopen() 打开文件时始终使用“b”标志。

也许这会有所帮助。

另外,阅读这篇文章How to use named pipes in PHP between different functions or even different processes without fork?

【讨论】:

  • 二进制读取与fopen阻塞无关。
  • stream_set_timeout() 被调用你已经成功完成 fopen,我的问题是我无法通过 fopen。
  • @user 也可以,您可以尝试$fp = fopen("/tmp/debug", "rn"); n - 非阻塞,但它没有记录并且在某些平台(如 Windows)上不起作用
  • "rn" 有效。 @fiction - 如果您想将其作为答案提交,我将批准它作为已接受的答案。
猜你喜欢
  • 2017-10-05
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多