PHP MySQL调用过程并继续
我有一个在我的登台机器上运行的php脚本,它将xml文件处理到我的数据库中,然后调用一些MySQL过程,这些过程用于通过一系列查询清理数据 我有一些程序变得越来越庞大,需要几个小时才能运行(这就是为什么它是在staging中完成的)PHP MySQL调用过程并继续,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,我有一个在我的登台机器上运行的php脚本,它将xml文件处理到我的数据库中,然后调用一些MySQL过程,这些过程用于通过一系列查询清理数据 我有一些程序变得越来越庞大,需要几个小时才能运行(这就是为什么它是在staging中完成的) 有没有一种方法可以让PHP调用这些过程,而不用等待结果转移到脚本的其余部分 因为您使用的是web界面,所以有一种可能性。 您可以尝试实现以下逻辑 每个“长mysql函数”一个php脚本 使用AJAX处理每个php脚本,因此如果需要,可以同时启动任何脚本。服务器将并行
有没有一种方法可以让PHP调用这些过程,而不用等待结果转移到脚本的其余部分 因为您使用的是web界面,所以有一种可能性。 您可以尝试实现以下逻辑
告诉我你的想法。PHP不支持内核中的并发。但您可以使用以下方法模拟类似的行为 1。fsockopen()并忽略用户中止('1') 您可以创建到另一个脚本的套接字连接,该脚本随后在后台运行。请参阅以下两个脚本。主脚本创建到子脚本的套接字连接,并立即将其关闭。子脚本将一直运行,直到完成所有任务。这是因为ini值“忽略用户中止”设置为1 main.php
<?php
$start = microtime(true);
$host = 'localhost';
$target = '/sub.php';
$fp = fsockopen($host, 80);
$request = "GET $target HTTP/1.1\r\n";
$request .= "Host: $host\r\n";
$request .= "Connection: Close\r\n\r\n";
fwrite($fp, $request);
fclose($fp);
file_put_contents("main", "Script runs " . (microtime(true) - $start) . " seconds");
<?php
$start = microtime(true);
pclose(popen("/usr/bin/php " . __DIR__ . "/sub.php " . __DIR__ . "//sub.log 2>&1 &", 'r'));
file_put_contents("main", "Script runs " . (microtime(true) - $start) . " seconds");
可以采用不同的方法。您是使用web界面调用每个php脚本,还是通过命令行完成?我通过web界面调用脚本,以便输入一些变量。您是否尝试过对这些查询进行explain
?解决方案是否可以像添加一些索引那样简单?请参阅:@Greg程序处理大约需要3-5个小时,这不是索引问题,而是处理卷“问题”。我喜欢这个想法,我希望实现更简单一点的东西。这非常简单。Ajax可以容纳10行javascript。如果你很懒,你甚至可以复制粘贴:-)在这方面,我没有对Ajax或javascript做太多的工作,所以即使它很简单,我也希望跳过学习曲线。你有没有推荐一个例子来加速我的学习过程?这个例子似乎足够简洁:谢谢你给出了非常完整的答案。
<?php
$start = microtime(true);
pclose(popen("/usr/bin/php " . __DIR__ . "/sub.php " . __DIR__ . "//sub.log 2>&1 &", 'r'));
file_put_contents("main", "Script runs " . (microtime(true) - $start) . " seconds");
<?php
$start = microtime(true);
sleep(5);
file_put_contents("sub", "Script runs " . (microtime(true) - $start) . " seconds");