apache服务php exec无法正常工作

时间:2011-04-24 09:43:28

标签: php windows apache service

我查阅了所有其他有关此事的问题,但他们没有帮助,所以:

我在域内的Windows Server 2003计算机上运行xampp(lite),apache作为服务安装。问题是:PHP函数exec,system,passthru等什么都不做,没有错误消息(apache的日志级别是debug,php error_reporting是E_ALL),没有程序执行,什么都没有,就好像函数调用isn'

我尝试了不同的方法: exec,system,..; proc_open WScript.Shell COM 对象,没有任何效果。我尝试使用绝对路径,向用户授予权限,尝试了大量不同的.exe执行不同的操作,没有任何工作,没有执行任何操作。

我提供了Apache服务我的用户名;给了它自己的apache用户;给了系统用户并勾选了“允许与桌面交互”。

php safe_mode已关闭,也没有禁用任何功能。

当运行apache而不是服务时,一切都运行良好。

知道可能出现什么问题吗?

TIA

2 个答案:

答案 0 :(得分:5)

如果您尝试从Vista中的服务启动GUI应用程序,则会遇到很多麻烦。作为一项安全功能,Vista使用“交互式服务检测”调解服务与桌面的交互。

这意味着,如果您将PHP作为Apache服务的模块运行,则无法使用任何方法启动GUI应用程序。这种事情是行不通的:

$ WshShell = new COM(“WScript.Shell”); $ oExec = $ WshShell->运行(“notepad.exe”,7,false);

因此,如果您想使用Apache / PHP作为启动GUI应用程序的代理,您需要将Apache作为控制台应用程序运行。

首先,如果Apache已作为服务安装,则需要使用服务管理单元将其启动类型设置为“manual”。 (%SystemRoot%\ system32 \ services.msc)在开始菜单搜索框中搜索服务。

然后将一个快捷方式添加到C:\ apache \ bin \ httpd.exe(或安装Apache的任何位置)到Startup文件夹,并将该快捷方式设置为最小化。你可以使用像TrayIt这样的应用程序!强制Apache进入系统托盘。

然后使用PHP网站上列出的任何方法,您就可以从PHP打开Windows应用程序并查看它的GUI。

答案 1 :(得分:1)

检查您的PHP.ini文件,只是因为您提到的那些功能处于不允许的设置中。虽然不是XAMPP版本的标准,但值得一试。

你说你没有收到任何错误,我会假设你的服务器被设置为服务,因此使用exe,system,passthru等发送的任何命令都将在后台完成,所以你不会看到它们正在运行,但您应该能够捕获数据。

<?php

//Start an object to capture data.
ob_start();

//Check we have access to the command line.
exec("ping google.com -n 1");

//Capture the output.
$output = ob_get_clean();

//Let's display it.
echo $output;

?>

尝试上面的内容,看看会发生什么,你应该从命令行得到一个响应,否则,它可能是由于权限。