从另一个内部生成PHP脚本.非blockning

Sam*_*Sam 5 php multithreading

我有一个PHP脚本,我需要从另一个PHP网页内执行.然而,对于第二个正常运行,第一个需要完全完成.基本上我需要第一页为第二个脚本生成一个新的进程/线程,它将在启动前等待1秒.

执行include会导致阻塞,导致阻止它工作,我无法让它开始使用exec

编辑:

应该澄清一下.这些页面没有输出,也没有通过Web界面连接.所有页面都由来自其他服务器的POST请求调用.


编辑2:

解决方案:让服务器请求页面在第一次返回后1秒钟直接向第二页发送请求.

Ant*_*oer 1

正如@ChristopherMorrissey 指出的那样,proc_open 是正确的选择。我想在这里详细说明一下,因为使用 proc_open 有一些并不完全明显的注意事项。

在第一个代码示例@ http://php.net/manual/en/function.proc-open.php中,它显示了总体用法,我将引用它。

第一个警告是管道。管道是 PHP 中的文件流,链接到子进程的 STDIN、STDOUT 和 STDERR。在示例中,管道索引 0 表示从父 PHP 进程角度来看的文件流。如果父进程写入此流,它将显示为子进程的 STDIN 输入。

在 POSIX 兼容操作系统上,进程的 STDIN 需要先关闭,然后进程才能终止。从父进程调用管道上的 fclose 非常重要,否则您的子进程将被卡住。这是通过示例中的这一行完成的:

fclose($pipes[0]);
Run Code Online (Sandbox Code Playgroud)

另一个警告是检查子进程的退出代码。检查退出代码是确定子进程是否正确退出或是否出错的最佳方法。至少,您只需要知道子进程何时完成。检查此内容和退出代码均通过http://www.php.net/manual/en/function.proc-get-status.php完成

如果要确保进程正确退出,则需要查看exitcodeproc_get_status 数组中返回的字段。请记住,此退出代码只会返回一次有效值。所有其他时间它将返回-1。因此,当它返回 > -1 时,这就是您的实际退出代码。所以,第一次running== false,检查exitcode

我希望这有帮助。