Я хочу вернуть вывод скрипта 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 для 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 ().
Чтобы получить результат выполнения команды, обязательно установите и используйте выходной параметр