加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP异步执行

发布时间:2020-12-13 17:38:00 所属栏目:PHP教程 来源:网络整理
导读:情景如下: 调用包含已知SearchDefinition的Id的指定URL应在db中创建新的Search记录并返回新的Search.Id. 在返回Id之前,我需要生成一个新进程/启动异步执行PHP文件,该文件接收新的Search.Id并进行搜索. 然后,用户界面轮询第3个PHP脚本以获取搜索状态(第2个脚
情景如下:

调用包含已知SearchDefinition的Id的指定URL应在db中创建新的Search记录并返回新的Search.Id.

在返回Id之前,我需要生成一个新进程/启动异步执行PHP文件,该文件接收新的Search.Id并进行搜索.

然后,用户界面轮询第3个PHP脚本以获取搜索状态(第2个脚本不断更新Db中的搜索记录).

这给我一个以异步方式生成第二个PHP脚本的问题.

我将在第三方服务器上运行它,因此几乎无法控制权限.因此,我宁愿避免新的搜索记录的cron作业/类似的轮询(如果我能避免它,我真的不喜欢轮询).我不是非常喜欢使用Web服务器进行与Web无关的工作,但为了避免可能需要的权限问题.

这似乎给我留下了两个选择:

>调用第一个脚本返回Id并关闭连接但继续执行并实际执行搜索(即在脚本1的末尾粘贴脚本2但在附加点处关闭响应)
>以异步方式启动第二个PHP脚本.

我不确定如何完成上述任何一项.第一个仍然感觉很讨厌.

如果有必要使用CURL或类似的假冒网络电话,我会这样做,但我希望有一种方便的多线程方法,我只是产生一个新的线程,并指向适当的功能和权限将是继承自调用者(即Web服务器用户).

解决方法

我宁愿使用选项1.这也会使相关功能彼此更加接近.
这是一个提示如何向用户发送内容然后关闭连接并继续执行:

(由tom *********在gmail dot com,来源:http://www.php.net/manual/en/features.connection-handling.php#93441)

<?php
ob_end_clean();
header("Connection: closern");
header("Content-Encoding: nonern");
ignore_user_abort(true); // optional
ob_start();
echo ('Text user will see');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();     // Strange behaviour,will not work
flush();            // Unless both are called !
ob_end_clean();

//do processing here
sleep(5);

echo('Text user will never see');
//do some processing
?>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读