PHP 从命令行成功运行 Perl 脚本,但没有显示任何输出

PHP runs Perl script from command line successfully but I get no output displayed

我在显示从 PHP 网页调用的 Perl 脚本的结果时遇到问题。 Perl 脚本不断地监视一个套接字,并在 运行 时从命令行显示它的输出,并将输出保存到一个文件中。我知道正在调用 Perl 脚本并且 运行 正在更新文本文件时成功,但我没有像我希望的那样在网页上获得输出。

我尝试过使用 system()、exec()、passthru(),它们都允许 Perl 脚本 运行 但网页上仍然没有输出,所以我显然遗漏了一些东西。我使用的功能是否正确?是否需要将参数添加到上述之一以将输出推回调用 Perl 脚本的网页?

我从 PHP 手册页中尝试过的一个例子:

<?php
exec('perl sql.pl', $output, $retval);
echo "Returned with status $retval and output:\n";
print_r($output);
?>

根据要求将输出示例包含为文本而不是图像。

# perl sql.pl
Connecting to the PBX 192.168.99.200 on port 1752
 04/07 10:04:50             4788         4788 3256739                T912                                  200   2004788                                 A2003827 A

我不是 PHP 专家,但我猜想 exec 在填充 $output$return 变量并返回之前等待外部程序完成执行.

您说您的 sql.pl 程序“持续监视套接字”。这听起来好像直到用户关闭它(可能使用 Ctrl-C 或 Ctrl-Z)它才真正退出。因此,据推测,您的 PHP 代码会等待您的 Perl 程序退出 - 但它永远不会退出。

所以我认为我会研究一些方法。

  • sql.pl 是否有命令行选项告诉它 运行 一次然后退出?
  • PHP 是否有办法在启动后一秒左右将 Ctrl-C 或 Ctrl-Z 发送到 sql.pl
  • PHP有办法处理永不结束的外部程序吗?你能打开一个到外部进程的管道并一次从它读取一行输出吗?