我偶然发现了一个我无法解释的现象。
我使用popen执行php,然后以这种方式执行php脚本,然后关闭它。到目前为止还不错。我遇到了相当严重的麻烦,因为我使用它的脚本没有执行,而是在连续尝试3次之后,我崩溃了zend-服务器(不再打开页面)。我发现造成这种情况的原因是我为php.exe使用了错误的目录。示例:
if (pclose(popen("C:\wrongDir\php\php.exe C:\Zend\Apache2\htdocs\myApp\public\mytest.php 57 > C:\Logs\1\0\jobOut.log 2> C:\Logs\1\0\jobErr.log"))>-1)
{
.....
}除了"wrongDir“之外,其他所有的and都是correct....the,甚至创建了jobOut和jobErr文件(这些文件是空的)。(注意: PHP不在搜索路径中,这就是在没有正确路径的情况下找不到PHP的原因)
尽管我现在已经解决了这个问题……,我有一个问题:这是一个正常的行为,还是我做错了什么(甚至是服务器设置)。从我在手册中读到的关于这两个命令的内容来看,听起来像是在我的例子中,我的返回值应该是-1或0,而不是我在这个过程中遇到的问题,然后服务器挂起)。
谢谢。
发布于 2012-12-10 12:17:52
看起来close ()并不返回进程的退出状态,而是返回它关闭进程的能力。
要获得进程终止“代码”,请使用pcntl_wifexited()和pcntl_wexitstatus()
http://php.net/manual/en/function.pclose.php
http://php.net/manual/en/function.pcntl-wexitstatus.php
https://stackoverflow.com/questions/13718506
复制相似问题