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

时间:2014-04-08 00:34:46

标签: 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需要十分钟才能执行,我希望它能够启动,然后立即继续下一步。这些后续步骤中不需要include。我可以想到几个非优雅(创建一个txt文件,它将在Windows中触发计划任务而不是使用include等)实现这一目的的方法,是否有更优雅的方法?

*的 更新 *

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

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

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

我希望这个解释有帮助

2 个答案:

答案 0 :(得分:3)

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

或......

如果您希望按需加载example.php,那么更强大的解决方案是,当用户点击“处理数据”时,{}为run a cron job programmatically。该页面上的按钮。

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

或......

php execute a background process

答案 1 :(得分:0)

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

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