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有办法处理永不结束的外部程序吗?你能打开一个到外部进程的管道并一次从它读取一行输出吗?
我在显示从 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有办法处理永不结束的外部程序吗?你能打开一个到外部进程的管道并一次从它读取一行输出吗?