从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-数据,登录用户的凭据)然后可能会有所帮助 - 我该怎么做?
答案 0 :(得分:0)
尝试这样的事情
exec("/usr/bin/perl /full-path/script.pl",$output);
答案 1 :(得分:0)
感谢所有的建议!最后,托管我的应用程序的服务器上的Apache目录中的php.ini文件中的安全设置存在问题:
/etc/php5/apache2/php.ini
安全模式设置为'on',这阻止了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