Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP如何让代码在不等待包含结果的情况下继续_Php_Include - Fatal编程技术网

PHP如何让代码在不等待包含结果的情况下继续

PHP如何让代码在不等待包含结果的情况下继续,php,include,Php,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需要十分钟,我希望启动它,然后立即进入下一步

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

我的代码基本上是

....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中触发计划任务,而不是使用include等)来实现这一点,有没有更优雅的方法

*更新*

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

1-从第三方API收集原始数据,通过脚本过滤并存储在数据库中。由于这个API中的限制,我必须将请求限制在小的块上,这很容易需要20分钟以上。从这些数据中,我寻找两个不同的结果集。这些集合中的每一个都存储在自己的表中。这将很快扩展到十几个表中的十几个结果集。(我只能用一张桌子,但这对我们的讨论没有影响)

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


我希望这个解释有帮助

异步加载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 ?>

$(“#content”).load(“example.php”);//php将运行第三个
或者

如果您希望按需加载example.php,一个更健壮的解决方案是在用户单击该页面上的“流程数据”按钮时加载

然后,您可以使用AJAX每隔60秒ping一次服务器,直到数据被更新,然后使用上面相同的代码将其拉入

或者


打开一个套接字,对其进行写入,然后关闭该套接字。请小心,您的代码将异步执行:

$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);

真正的问题是:为什么包含需要10分钟。解决这个问题。PHP脚本应该在30秒内被调用、运行并再次死亡(),但实际上只需在服务器上的2或3个任务调度程序内(如linux中的cron)听起来是定期调用长时间运行脚本的最佳解决方案。@Mike'Pomax'Kamermans的+1为什么包含需要10分钟?如果你问我这太长了…如果cron不可能,这可能取决于你的主机,为什么不将include移到脚本的底部?@jeroen此脚本不是由用户启动的,并且不会有多个实例从原始问题运行
一些代码和
更多的代码将立即加载和显示,而无需等待
运行此页面的内容。php
如果是10分钟,只要绕过它,仍然会留下10分钟的异步等待,浏览器将很高兴在加载完成之前停止等待。在典型的安装之前,PHP也会杀掉这个脚本,所以这是一个“答案”,但它解决了一个错误的问题。您可能是恰到好处,或者他确实有业务规则要求他等待10分钟运行
this\u page.php
。如果你想/需要的话,你可以告诉PHP等那么久。他提出的问题的解决方案当然是AJAX。解决长加载时间是一个完全不同的问题,而不是他提到的问题。你不应该依赖客户端浏览器来完成一项似乎是100%服务器端的工作。@jeroen我应该提到,这是通过命令提示符运行的,我修改了所有设置,使其不会超时。