我在我的开发环境中使用了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,如果它是重要的)。然而,当我使用这些函数时,我总是得出 "Unable to fork XXX"
在PHP错误日志中。我试着运行 whoami
, ping 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()
并且相关功能似乎在我的生产环境中而不在我的开发环境中正常工作? 为何可以工作,但其他Shell函数却不能工作? 谢谢! proc_open()