Я сделал perl-скрипт, который я хотел бы запустить с PHP.
Когда я делаю обычный пример вроде
PHP:
exec("perl test.pl",$output);
echo '<pre>'; print_r(array_values($output)); echo '</pre>';
PERL:
#!/usr/bin/perl -s
print "Hiii. This is perl executing in PHP";
И он печатает: Hiii. Это perl выполняется в PHP на PHP
Но когда я добавляю свой другой скрипт Perl (test2):
#!/usr/bin/perl -s
# Function definition
use test_sub qw( :all ) ;
use strict;
use warnings;
if ($ARGV[0] eq "te")
{
printf("te chosen to(%d)\n",$ARGV[1]);
te($ARGV[1]);
}
И новый PHP выглядит так:
exec("perl test2.pl",$output);
echo '<pre>'; print_r(array_values($output)); echo '</pre>';
Я знаю, что должно быть предупреждение во многих случаях, хотя я не использую никаких аргументов, но ничего не отображается в $ output.
Даже с аргументами в PHP:
exec("perl test2.pl te 1",$output);
echo '<pre>'; print_r(array_values($output)); echo '</pre>';
Ничего не появляется. Я попытался проверить, является ли файл в исполняемом файле функцией
is_executable('test2.pl')
Что это такое.
Это работает на малине PI 2 с Arch, и я не знаю, могло ли это иметь какое-либо влияние?
Другой файл perl, который называется:
package test_sub;
use strict;
use warnings;
use Exporter qw(import);
use Time::HiRes qw(usleep);
our @EXPORT_OK = qw(te);
our %EXPORT_TAGS = (all => \@EXPORT_OK );
sub te {
my @var = @_;
printf("settingup te for %d",$var);
}
Я проверил в терминале для себя, и здесь он работает по назначению. Но я не могу заставить его работать через PHP.
Любая помощь приветствуется.
Обновление 1
Я узнал, что если я добавлю строку:
use test_sub qw( :all ) ;
В скрипт test.pl, который работал, он перестает давать результат.
Здесь есть две проблемы:
Первый:
Ниже строки
printf("settingup te for %d",$var);
следует изменить на
printf("settingup te for %d",@var);
Не было переменной $ var, инициализированной для печати, ее массивом @var, который вы используете в своей подпрограмме.
Во-вторых:
Вы должны знать, как написать простой скрипт php.
#!/usr/bin/php
<?php
exec("perl test.pl te 1",$output);
echo '<pre>'; print_r(array_values($output)); echo '</pre>';
?>
Это отлично работает для меня и выводит:
<pre>Array
(
[0] => te chosen to(1)
[1] => settingup te for 1
)
</pre>
perl script:
#!/usr/bin/perl -s
# Function definition
use test_sub qw( :all ) ;
use strict;
use warnings;
if ($ARGV[0] eq "te")
{
printf("te chosen to(%d)\n",$ARGV[1]);
te($ARGV[1]);
}
perl модуль:
package test_sub;
use strict;
use warnings;
use Exporter qw(import);
use Time::HiRes qw(usleep);
our @EXPORT_OK = qw(te);
our %EXPORT_TAGS = (all => \@EXPORT_OK );
sub te {
my @var = @_;
printf("settingup te for %d",@var);
}
PHP-код:
#!/usr/bin/php
<?php
exec("perl test.pl te 1",$output);
echo '<pre>'; print_r(array_values($output)); echo '</pre>';
?>
Это должно сработать и для вас.
-s
?