【问题标题】:PHP runs Perl script from command line successfully but I get no output displayedPHP 从命令行成功运行 Perl 脚本,但我没有显示任何输出
【发布时间】:2021-07-03 09:19:53
【问题描述】:

我在显示从我的 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 perl


    【解决方案1】:

    我不是 PHP 专家,但我猜 exec 会等待外部程序完成执行,然后再填充 $output$return 变量并返回。

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

    所以我认为我会研究几种方法。

    • sql.pl 是否有一个命令行选项告诉它运行一次然后退出?
    • PHP 是否有办法在您启动它后一秒左右向sql.pl 发送 Ctrl-C 或 Ctrl-Z?
    • PHP 是否有办法处理永无止境的外部程序?您可以打开一个连接到外部进程的管道并一次读取一行的输出吗?

    【讨论】:

    • 有趣,我认为你说 PHP 正在等待脚本退出它是正确的,因为它是与主机的持续连接,我没有想到这一点。我将研究“打开通往外部进程的管道”,因为我需要 Perl 脚本来维持其持续连接,否则我将丢失数据。感谢您的建议戴夫!
    • @GerryArmstrong:在我看来你想要popen
    猜你喜欢
    • 1970-01-01
    • 2016-10-06
    • 2016-07-14
    • 2013-07-18
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    相关资源
    最近更新 更多