php exec 255,Apache下的PHP exec()在运行脚本时返回null和255

好吧,在经过了几个小时之后,我决定寻求帮助。 我有一个运行Apache 2.4和PHP 7.1的Windows Server 2008。 当用户点击浏览器上的button时,我的应用程序必须在服务器上运行PHP脚本。

这在Windows 10的桌面上工作正常。但是,在服务器上,exec()返回“null”,退出代码为255。

我读了所有我能find的exec()问题,并尝试以下内容:

exec("C:\\PHP7\\php.exe -v", $output);

我得到了包含PHP版本信息的正确响应。

然后我决定检查configuration文件:

exec("C:\\PHP7\\php.exe --ini", $output);

所有的文件都到位了。

然后我决定对我的脚本执行语法检查:

exec("C:\\PHP7\\php.exe -d display_errors=1 -l C:\\Apache24\\htdocs\\script.php", $output);

没有发现错误。

最后,我决定检查用户帐户:

exec("whoami", $output);

按预期得到“NT Authority \ SYSTEM”。 为了确保脚本能够在SYSTEM帐户下运行,我使用了SysInternals psexec:

psexec -s C:\PHP7\php.exe C:\Apache24\htdocs\script.php

一切顺利。

换句话说,脚本在用户帐户或系统帐户下从命令行执行时不会显示任何问题。 我也已经certificate,由exec()正确调用PHP。

那么,我决定检查我的代码中的“隐藏”错误,在脚本的最开始添加以下两行:

error_reporting(E_ALL); ini_set('display_errors', 1);

但是,没有喜悦。 我没有想法。

任何好的灵魂能帮助我吗?

感谢一堆,

米格尔。

最后! 答案的关键在于: PHP exec()git fetch失败,返回值为255 。

我无法看到任何错误,即使将“2>&1”管道重定向添加到我的命令。 读完这篇文章后,我了解到proc_open()比exec()更好。 从PHP的文档引用:

proc_open()类似于popen(),但是对程序执行提供了更大程度的控制

所以,我用几行代码替换了我的exec()(参考手册中的例子),发现问题是由启用了CLI的Zend Opcache引起的。 对我来说更快的解决方案是在命令行中禁用它:

php.exe -d opcache.enable_cli=0 myscript.php

瞧! 问题解决了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值