Вернуть Perl-вывод в PHP

Я хочу вернуть вывод скрипта 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 отображал все строки?

благодаря

Solutions Collecting From Web of "Вернуть Perl-вывод в PHP"

Цитата из справочной страницы PHP для exec() :

Возвращаемые значения

Последняя строка из результата команды. Если вам нужно выполнить команду и получить все данные из команды, переданной непосредственно без каких-либо помех, используйте функцию passthru() .

Чтобы получить результат выполнения команды, обязательно установите и используйте output параметр.

Поэтому одно предложение – остановить использование exec() и начать использовать passthru() . Однако это вздор. passthru() фактически ничего не возвращает. Этого может быть достаточно, если все, что вам нужно сделать с $perl_result , распечатать его в браузере и, следовательно, действительно не нужно, чтобы вывод хранился в переменной вообще. Но если вам нужно сопоставить с выходом или каким-либо образом манипулировать им, вы не хотите passthru() .

Вместо этого попробуйте оператор backtick :

 <?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 

Из php docs ,

Возвращаемые значения

Последняя строка из результата команды. Если вам нужно выполнить команду и получить все данные из команды, переданной непосредственно без каких-либо помех, используйте функцию passthru ().

Чтобы получить результат выполнения команды, обязательно установите и используйте выходной параметр