gpt4 book ai didi

php - PHP exec(),shell_exec(),system(),passthru()在Windows 7/IIS上不起作用

转载 作者:行者123 更新时间:2023-12-03 11:12:50 25 4
gpt4 key购买 nike

我在开发环境中使用Windows 7 x64 Enterprise,IIS和PHP 5.6.32。我的应用程序的网站具有以下设置:

  • 匿名身份验证:禁用
  • Windows身份验证:已启用(协商,协商:Kerboeros,NTLM)
  • 应用程序池:域帐户。
  • 除了默认的PHP扩展名之外,我还具有Windows身份验证模式下使用的Microsoft的PHP SQL Server驱动程序(3.2版)。

  • 我的生产服务器与Server 2008 R2上运行的安装程序相同。

    我需要使用 exec()shell_exec()等来执行可执行文件(如果重要的话,请使用pdftk)。但是,无论何时使用这些功能中的任何一个,我总是在PHP错误日志中得到 "Unable to fork XXX"。我试过以相同的结果运行 whoamiping xxx和其他简单命令。典型的Shell函数均无法正常工作-它们始终会导致相同的错误。我已经检查了 php.ini文件,并验证了那些功能没有被禁用。

    但是,在生产环境 中,我没有这个问题,我也不知道为什么。它似乎只影响我的开发环境。在研究期间,我确实偶然发现了这个( http://tech.trailmax.info/2012/12/php-warning-shell_exec-unable-to-execute-on-iis-7/),由于某种原因,它确实解决了我的问题;但是,它完全破坏了我的SQL Server Windows身份验证(我需要)。

    我也禁用了我的防病毒软件,希望这可能是罪魁祸首。它不是。

    在进行更多故障排除时,我确实发现 proc_open()确实起作用。我们正在使用Prince生成PDF,但我发现它在工作,而 exec()却没有。当我查看Prince类时,我发现它正在使用 proc_open()解释了为什么它似乎起作用。

    有谁知道为什么 exec()和相关功能在我的生产环境而不是开发环境中似乎可以正常工作?为什么 proc_open()起作用,而其他shell函数却不起作用?谢谢!

    最佳答案

    检查文件“C:\WINDOWS\system32\cmd.exe”的权限。
    您需要对此文件具有读/执行权限。

    我建议使用sysinternals进程监视器“procmon.exe”来确认尝试运行“cmd.exe”的用户。
    “进程名称”上的过滤器为“php-cgi.exe”,“路径”以“cmd.exe”结尾。查看具有拒绝访问错误的任务的事件属性,它将显示“模拟”用户名。通常是“Internet guest 帐户”,通常是“NT AUTHORITY\IUSR”。

    关于php - PHP exec(),shell_exec(),system(),passthru()在Windows 7/IIS上不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47102739/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com