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


shell_exec() and exec() not working in PHP

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

如果我从终端运行 php 脚本(php print.php),它可以完美运行,但如果我从 Web 浏览器运行它,则没有任何反应。

这是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

编程语言 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用户想要这个补丁,因此创建了这个站点。

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