2012-06-17 122 views
0

像许多其他人一样,我在PHP中使用shell_exec()函数时遇到问题。我禁用了安全模式,并从php.ini中删除了disabled_functions。shell_exec()和exec()不能在PHP中工作

如果我从终端(php print.php)运行php脚本,它工作的很完美,但是如果我从网页浏览器运行它,什么都不会发生。

这里是素文字:

<?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

+0

命令行和Web服务器是两个完全不同的环境。 CLI在您的用户名下运行,具有您的shell环境。在网络服务器下,它以网络服务器的用户ID和网络服务器的shell环境运行。这是一个毫无意义的比较 - 苹果和橘子。唯一的共同点是它们都是水果(例如都是PHP)。 –

+0

我一直在用这种类型的问题在桌子上撞我的头。我终于发现shell_exec('stuff_here 2>&1')会给出错误信息。然后,我可以从那里解决问题。 –

回答

0

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

1

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

该补丁限制或校正这些功能的行为:

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

的贴剂,为用户的外部指令的执行限制的目的而创建多畴Apache服务器上,首先为PHP版本4.2.1。该补丁发送给PHP开发人员,因此它可能是PHP的一部分,但没有一个PHP开发人员对此感兴趣。另一方面,一些PHP用户需要此补丁,因此该网站已创建。

+0

换句话说,在php.ini中关闭“php_admin_flag safe_mode”,而不是在httpd.conf中 – GhostMaster75