首页 文章

apache服务php exec无法正常工作

提问于
浏览
2

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

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

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

我给了Apache服务 my username ;给了它 own apache user ;给了系统用户并勾选了“ Allow interaction with desktop ” .

php safe_mode is off ,也没有禁用任何功能 .

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

知道什么可能是错的吗?

TIA

2 回答

  • 5

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

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

    $ WshShell =新COM(“WScript.Shell”); $ oExec = $ WshShell-> Run(“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

    检查您的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;
    
    ?>
    

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

相关问题