Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 MySQL调用过程并继续_Php_Mysql_Stored Procedures - Fatal编程技术网

PHP MySQL调用过程并继续

PHP MySQL调用过程并继续,php,mysql,stored-procedures,Php,Mysql,Stored Procedures,我有一个在我的登台机器上运行的php脚本,它将xml文件处理到我的数据库中,然后调用一些MySQL过程,这些过程用于通过一系列查询清理数据 我有一些程序变得越来越庞大,需要几个小时才能运行(这就是为什么它是在staging中完成的) 有没有一种方法可以让PHP调用这些过程,而不用等待结果转移到脚本的其余部分 因为您使用的是web界面,所以有一种可能性。 您可以尝试实现以下逻辑 每个“长mysql函数”一个php脚本 使用AJAX处理每个php脚本,因此如果需要,可以同时启动任何脚本。服务器将并行

我有一个在我的登台机器上运行的php脚本,它将xml文件处理到我的数据库中,然后调用一些MySQL过程,这些过程用于通过一系列查询清理数据

我有一些程序变得越来越庞大,需要几个小时才能运行(这就是为什么它是在staging中完成的)


有没有一种方法可以让PHP调用这些过程,而不用等待结果转移到脚本的其余部分

因为您使用的是web界面,所以有一种可能性。 您可以尝试实现以下逻辑

  • 每个“长mysql函数”一个php脚本
  • 使用AJAX处理每个php脚本,因此如果需要,可以同时启动任何脚本。服务器将并行加载

  • 告诉我你的想法。

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