繁体   English   中英

PHP中的shell_exec问题

[英]shell_exec problems in PHP

我有一些PHP代码,我需要在服务器后台启动ruby脚本。 但脚本不想工作。 现在所有的脚本都是输入并回显它。

我这样调用它:

shell_exec("./fifo_test.r < input.fifo > buffer &");

这会导致PHP无限期挂起。 但是当我直接运行它时它工作正常。

root@ip-xxxxx:/var/www/test# su www-data
$ sh -c ./fifo_test.r < input.fifo > buffer &
$ echo test > input.fifo
$ cat buffer
Got: test

这是流程信息:

ubuntu@ip-xxxxx:~$ ps -ef | grep fifo
www-data  1076     1  0 00:39 ?        00:00:00 sh -c ./fifo_test.r < input.fifo > buffer &

有什么想法吗? 谢谢!

编辑:我可以通过手动添加到input.fifo解冻PHP。 然后它工作正常。 但是,当PHP启动它时,它会永远等待第一次输入。 我不知道该怎么避免这个!

如果PHP脚本正在生成输入 ,请使用popen() 这样,您可以避免使用命名管道。

如果输入来自其他来源 ,最好不要直接从FIFO中读取PHP脚本(或它执行的Ruby脚本)。 我知道这是因为尝试编写一个Web界面,用于实时显示多年前捕获的网络数据包,并遇到类似的问题。

我会写一个接受Unix套接字连接的简单服务器程序。 此服务器可以接受来自FIFO或其他套接字连接的输入,然后将其发送到PHP或Ruby脚本的所有正在运行的实例。 虽然Node.js (适用于JavaScript), Twisted (适用于Python)和EventMachine (适用于Ruby)是为此类设计的,但您可以使用核心 功能在CLI的CLI版本中编写此类服务器。

您可以尝试在shell调用中使用nohup命令。 这应该导致程序立即返回,因此PHP没有等待。 您的案例中的代码如下所示:

shell_exec("nohup ./fifo_test.r < input.fifo > buffer &");

希望有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM