我在开发环境中使用的是Windows 7 x64 Enterprise,IIS和PHP 5.6.32。 我的应用程序的网站具有以下设置: p>
- 匿名身份验证:已禁用 li>
- Windows身份验证:已启用(协商,协商:Kerboeros,NTLM) li>
- 应用程序池:域帐户。 li>
- 除了默认的PHP扩展,我在Windows身份验证模式下使用了Microsoft的PHP SQL Server驱动程序(3.2版本)。 li>
ul>
我的生产服务器与Server 2008 R2上运行的设置相同。 p>
我需要使用
exec() code>,
shell_exec() code>等执行可执行文件(pdftk,如果重要的话)。 但是,每当我使用这些函数中的任何一个时,我总是在PHP错误日志中得到
“Unable to fork XXX” code>。 我已经尝试运行
whoami code>,
ping xxx code>,以及其他具有相同结果的简单命令。 没有典型的shell函数可以工作 - 它们总是会导致相同的错误。 我检查了我的
php.ini code>文件,并验证了这些功能尚未被禁用。 p>
但是,在我的生产环境中,我没有 这个问题 strong>,我不知道为什么。 它似乎只影响我的开发环境。 在我的研究过程中,我偶然发现了这一点( http://tech.trailmax.info/2012/12/php-warning-shell_exec-unable-to-execute-on-iis-7/ )由于某种原因,它确实修复了 我的问题; 但是,它完全打破了我的SQL Server Windows身份验证(我需要)。 p>
我也禁用了我的防病毒软件,希望它可能是罪魁祸首。 事实并非如此。 p>
在进行更多故障排除时,我确实发现
proc_open() code>确实有效。 我们正在使用Prince生成PDF,我注意到它正在工作,而我的
exec() code>却没有。 当我查看Prince类时,我发现它使用的是
proc_open() code>,它解释了为什么它似乎有效。 p>
有谁知道为什么
exec () code>和相关的功能似乎在我的生产环境而不是我的开发环境中没有问题? 为什么
proc_open() code>工作但其他shell函数不工作? 谢谢! p> div>