我已经创建了一个perl脚本,我想从PHP运行。
当我做一个像
这样的正常例子时PHP:
var ppp = $('#more_posts').data('ppp');
var cat = $('#more_posts').data('category');
var pageNumber = 1;
function load_posts(){
pageNumber++;
var str = '&cat=' + cat + '&pageNumber=' + pageNumber + '&ppp' + ppp + '&action=more_post_ajax';
$.ajax({
type: "POST",
dataType: "html",
url: ajax_posts.ajaxurl,
data: str,
success: function(data){
var $data = $(data);
if($data.length){
$("#ajax-posts").append($data);
$("#more_posts").attr("disabled",false);
} else{
$("#more_posts").attr("disabled",true);
}
},
error : function(jqXHR, textStatus, errorThrown) {
$loader.html(jqXHR + " :: " + textStatus + " :: " + errorThrown);
}
});
return false;
}
$("#more_posts").on("click",function(){ // When btn is pressed.
$("#more_posts").attr("disabled",true); // Disable the button, temp.
load_posts();
});
PERL:
exec("perl test.pl",$output);
echo '<pre>'; print_r(array_values($output)); echo '</pre>';
打印出来:Hiii。这是用PHP在PHP中执行的perl
但是当我添加其他Perl脚本(test2)时:
#!/usr/bin/perl -s
print "Hiii. This is perl executing in PHP";
新的PHP看起来像:
#!/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]);
}
我知道至少应该有一个警告,尽管我不使用任何参数,但$ output中似乎没有任何内容。
即使使用PHP中的参数:
exec("perl test2.pl",$output);
echo '<pre>'; print_r(array_values($output)); echo '</pre>';
什么都没有出现。 我试图用函数
查看可执行文件exec("perl test2.pl te 1",$output);
echo '<pre>'; print_r(array_values($output)); echo '</pre>';
它是什么。
这是在带有Arch的Raspberry PI 2上运行的,我不知道这是否会产生任何影响?
引用的另一个perl文件是:
is_executable('test2.pl')
我已经在终端检查了它自己,这里按预期工作。但我不能通过PHP来实现它。
非常感谢任何帮助。
更新1
我发现如果我添加这行:
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);
}
对于运行它的test.pl脚本停止给出输出装置。
答案 0 :(得分:2)
这里有两个问题:
首先:
在线下
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脚本:
#!/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>';
?>
这也应该对你有用。