在PHP中执行Perl

11

可能重复:
如何在 PHP 中调用 Perl 脚本并传递变量,同时使用可变的 Perl 脚本名称

我想通过 PHP 执行一个 Perl 脚本。我使用 exec() 来执行 Perl 脚本,在我的本地机器上可以工作,但是在服务器上无法工作。服务器基于 CentOS Linux。

我已经为 PHP 和 Perl 脚本文件赋予了完全权限(777)。当我尝试执行时,错误日志中出现以下错误:

sh: /perl: No such file or directory

我尝试过以下几种方式来执行:

exec("perl -w Script.pl $username $password",$output);
exec("/usr/bin/perl -w Script.pl $username $password",$output);
exec("/usr/bin/perl Script.pl $username $password",$output);

我还尝试使用system函数

$output = system("perl Script.pl $username $password");

我尝试了这个,但没有反应。

我还尝试使用 passthru() 函数执行 Perl。

passthru("/usr/bin/perl -w Script.pl $username $password",$output);

当我执行这行代码时,$output 打印出 127,并且脚本没有任何反应。

我使用 is_executable() 函数检查文件是否可执行。结果显示该文件不可执行。

以下是代码:

$file = 'Script.pl';

if (is_executable($file))
{
    echo $file.' is executable';
}
else
{
    echo $file.' is not executable';
}

如果我通过终端执行perl脚本,那么它可以正常工作,但是当我尝试通过PHP来执行时,它就无法正常工作。


@K102 抱歉啊...我不小心在这篇帖子里打错了。 - Suresh kumar
@Gordon 谢谢你的链接,但我仍然面临着同样的问题。 - Suresh kumar
也许由于某些严格的安全设置,您无法从php中进行任何系统调用?使用像lscwd这样的简单命令进行检查。如果您只是在命令行上使用perl解释器执行perl脚本,则不必设置执行权限。 664应该可以。否则,如果服务器以这种方式设置,则可以从浏览器中执行它。 - simbabque
@Ben 当我执行 which perl 命令时,会出现以下错误 sh: /which: 没有那个文件或目录。 - Suresh kumar
4
我通过在php.ini中禁用安全模式来解决了这个问题。 - Suresh kumar
显示剩余5条评论
1个回答

10

请使用完整路径执行脚本。

exec("/usr/bin/perl /full/path/to/Script.pl $username $password",$output);

敬礼,


已经尝试过了,但不起作用。 - Suresh kumar
1
PHP以apache用户“www-data”身份执行。您的脚本可能需要以sudo方式运行,但PHP不允许这样做。至少对于“debiab”,运行“visudo”,然后添加“www-data ALL =(ALL:ALL)NOPASSWD:/pat/to/your/script.pl”,然后更改权限,使只有root可以编辑该文件(安全性):“sudo chown root:someuser /path/to/your/script.pl”,最后使其可执行“sudo chmod u + rwx /path/to/your/script.pl”。 - KingsInnerSoul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接