gpt4 book ai didi

php - 从另一个内部生成一个 PHP 脚本。非阻塞

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:44:51 25 4
gpt4 key购买 nike

我有一个 PHP 脚本,需要从另一个 PHP 网页中执行。但是,要使第二个正常运行,第一个需要完全完成。本质上,我需要第一页为第二个脚本生成一个新的进程/线程,该脚本将在开始前等待 1 秒。

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

编辑:

应该已经澄清了。这些页面没有输出,也没有通过 Web 界面进行交互。所有页面都由来自另一台服务器的 POST 请求调用。


编辑 2:

解决方法:让请求页面的服务器在第一个页面返回1秒后直接向第二个页面发送请求。

最佳答案

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

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

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

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

fclose($pipes[0]);

另一个注意事项是检查子进程的退出代码。检查退出代码是确定子进程是否正确退出或出错的最佳方式。至少,您只需要知道子进程何时完成。检查这个和退出代码都是用 http://www.php.net/manual/en/function.proc-get-status.php 完成的

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

希望对您有所帮助。

关于php - 从另一个内部生成一个 PHP 脚本。非阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com