【问题标题】:Return Perl-output to PHP将 Perl 输出返回到 PHP
【发布时间】:2014-02-19 20:51:57
【问题描述】:

我想将 perl 脚本的输出返回到网页。但是它只返回最后一行。

Perl 脚本:

my $directory = $ARGV[0];
opendir(DIR,$directory);
my @files = grep {/\.txt$/ } readdir(DIR);
closedir(DIR);
foreach(@files) {
    print $_."\n";
}

PHP 代码:

$perl_result = exec("perl $script_folder $project_folder");
*some code*
<?php print $perl_result; ?>

预期输出(以及脚本在 Linux 命令行中返回的内容):

test.txt
test2.txt
test3.txt

PHP 返回的内容:

test3.txt

我必须在我的代码中进行哪些更改才能让 PHP 显示所有行?

谢谢

【问题讨论】:

标签: php perl return readdir


【解决方案1】:

引用PHP manual page for exec():

返回值

命令结果的最后一行。如果您需要执行命令并将命令中的所有数据直接传回而不受任何干扰,请使用passthru() 函数。

要获取执行命令的输出,请务必设置并使用output参数。

所以一个建议是停止使用 exec() 并开始使用 passthru() 。然而,这是无稽之谈。 passthru() 实际上并没有返回任何东西。如果 all 您需要使用$perl_result 将其打印到浏览器就足够了,因此根本不需要将输出存储在变量中。但如果您需要匹配输出,或以任何方式对其进行操作,您不需要passthru()

请尝试backtick operator

<?php
$perl_result = `perl $script_folder $project_folder`;

或者尝试将exec()的第二个参数设置为一个空数组:

<?php
$perl_result = array();
exec("perl $script_folder $project_folder", $perl_result);

$perl_result = implode("\n", $perl_result);  # array --> string

【讨论】:

  • 当使用$perl_result = passthru("perl $script_folder $project_folder");时,什么都没有返回...
  • 太好了,这些东西有效!这是为了测试目的,所以我真的不需要对输出做更多的事情。感谢您的帮助!
【解决方案2】:

来自php docs

返回值

命令结果的最后一行。如果您需要执行命令并将命令中的所有数据直接传回而不受任何干扰,请使用 passthru() 函数。

要获取执行命令的输出,一定要设置并使用输出参数

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2023-03-09
    • 2021-03-22
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多