2

我想从 PHP 脚本运行 Perl 脚本。我可以从终端(作为 root 用户)很好地做到这一点,但是从我的应用程序(www-data 用户)运行时我不能。

在 localhost 上开发应用程序时,我也可以做到这一点,但是当我切换到另一台服务器时,问题就出现了。

我的网页使用 AJAX POST 请求调用 PHP 脚本,这适用于我的其他不调用 Perl 的 PHP 脚本。

我在我的 PHP 脚本中尝试了以下命令,但没有成功:

system("/filepath/file.pl");
exec("/filepath/file.pl");
passthru("/filepath/file.pl");

托管我的应用程序的服务器上的 Apache 日志显示以下错误:

sh: /file.pl: not found

通过在我的服务器上运行以下代码,我看到 Web 用户被视为 www-data:

ps aux | grep apache

为了测试,我还设置了我的应用程序使用的所有文件和目录的权限,以允许任何用户使用 chmod 777 进行任何类型的访问。

请注意:我的应用程序仅对某些用户可用(我使用 .htaccess 文件来设置这些权限并要求用户登录)所以如果有办法改变服务器如何看待这个用户(从 www-data,到登录用户的凭据)那么也许会有所帮助-我该怎么做?

4

2 回答 2

0

感谢所有的建议!最后,托管我的应用程序的服务器上 Apache 目录中的 php.ini 文件中的安全设置有问题:

/etc/php5/apache2/php.ini

安全模式设置为“开启”,这会阻止 php 文件访问/执行任何本地文件。(尝试访问另一个非脚本文件时,PHP 脚本也失败了:other.html)。

为了在不删除服务器上所有应用程序的安全模式设置的情况下解决这个问题,我将上面的 php.ini 文件更改为包含以下内容:

safe_mode: on
safe_mode_include_dir: /filepath
safe_mode_exec_dir: /filepath

可以在此处找到有关这些配置变量的更多信息:http: //php.net/manual/en/ini.sect.safe-mode.php

于 2015-08-25T20:13:25.320 回答
0

尝试这样的事情

exec("/usr/bin/perl /full-path/script.pl",$output);
于 2015-08-24T20:45:28.337 回答