PHP 如何让代码继续而不等待包含的结果


PHP how to have code continue without waiting for results of include

我希望这里有一个简单的解决方案:

我的代码基本上是

....some code.... //populates a MySQL table
include 'run_this_page.php'; //uses data from table above and takes ten minutes to run
....lots more code.... ///also uses data from same table

由于include需要十分钟才能完成,我希望启动它,然后立即进行下一步。这些后续步骤不需要include中的任何内容。我可以想到几种不优雅的(创建一个 txt 文件,该文件将在 Windows 中触发计划任务而不是使用包含等)来实现这一点,有没有更优雅的方法?

*

更新*

我被许多人(礼貌地)攻击我的脚本结构。让我再解释一下目的是什么:

1 - 原始数据从第三方 API 收集,通过脚本过滤并存储在数据库中。由于此 API 的限制,我必须将请求限制为小块,这很容易花费 20 多分钟。从这些数据中,我正在寻找两个不同的结果集。这些集合中的每一个都存储在自己的表中。这将很快增长到十几个表中的十几个结果集。(我只能使用一个表格,但这对我们的讨论没有区别)。

2 - 现在我有了结果集,我有两个不同的脚本,它们出去收集有关每个脚本的数据。由于目标第三方站点完全不同,因此我将脚本编写在自己的文件中,只是希望它们现在都运行。每个可能需要十分钟以上。

我希望这个解释有所帮助

异步加载PHP的一个简单方法是只使用jQuery和AJAX。

<? // php code you want to run 1st ?>
<div id="content"></div>
<script>
$( "#content" ).load( "example.php" ); // php to run 3rd
</script>
<? // php code you want to run 2nd ?>

或。。。

如果要按需加载示例.php更强大的解决方案是在用户单击该页面上的"流程数据"按钮时以编程方式运行 cron 作业。

然后,您可以使用 AJAX 每 60 秒对服务器执行一次 ping 操作,直到数据更新并使用上面的相同代码将其拉入。

或。。。

PHP 执行后台进程

打开一个套接字,写入它并关闭套接字。请注意,您的代码将异步执行:

$sock = fsockopen($url,$port);
$packet = "POST $path?$get HTTP/1.1'r'n";
$packet.= "Host: $host'r'n";
$packet.= "Content-Type: application/x-www-form-urlencoded; charset=UTF-8'r'n";
$packet.= "Connection: Close'r'n'r'n";
$packet.= $post;
fwrite($sock, $packet);
fclose($sock);