shell_exec()和exec()在PHP中不起作用

时间:2012-06-17 14:22:36

标签: php shell shell-exec

与许多其他人一样,我在PHP中遇到了shell_exec()函数的问题。我从php.ini中删除了安全模式禁用和disabled_functions。

如果我从终端运行php脚本(php print.php)它运行得很好但是如果我从网络浏览器运行它没有任何反应。

这是scipt:

<?php

$output = shell_exec('lp print.php');
echo "<pre>$output</pre>";

?>

请帮帮我。我在Apache2上运行PHP 5.3.10。我的操作系统是Ubuntu Server 12.4。这是phpinfo页面:http://testni-server.info/info.php

2 个答案:

答案 0 :(得分:1)

编程语言PHP允许通过配置指令safe_mode_exec_dir限制外部命令的执行。该指令应包含指向PHP脚本可以运行的程序的目录的完整路径。如果脚本尝试执行不在此目录中的命令,则不执行该命令。仅当启用安全模式时,此配置指令才处于活动状态,这意味着对用户的更多限制,有时是不必要的限PHP没有已知的可能性限制使用禁用安全模式执行外部命令。因此,这里是一个补丁,直接在PHP中添加特殊指令exec_dir。该指令与safe_mode_exec_dir非常相似,但是不能启用安全模式。

此补丁限制或纠正了这些功能的行为:

exec()
passthru()
proc_open()
shell_exec()
system()
popen()
is_executable() 

创建补丁的目的是在多域Apache服务器上限制执行用户的外部命令,首先是PHP版本4.2.1。补丁被发送给PHP开发人员,因此它可能是PHP的一部分,但没有一个PHP开发人员感兴趣。另一方面,一些PHP用户想要这个补丁,因此这个站点被创建了。

答案 1 :(得分:0)

您的命令行(CLI)PHP可能使用与CGI不同的工作目录和/或路径。在调用lp之前,请尝试使用chdir()明确定义工作目录(包含shell_exec()命令)。