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