【问题标题】:running long php scripts best practice运行长 php 脚本的最佳实践
【发布时间】:2018-07-09 20:26:31
【问题描述】:

我试图弄清楚如何运行长 php 脚本而不让用户永远等待。我有一个脚本需要运行几个函数,每个函数都需要几秒钟才能运行。

我想知道有没有办法让我的 php 脚本在完成运行之前将其数据返回给调用者?

 <?php
  echo http_response_code(200);
  sleep(60);
  run_other_code();
 ?>

一个非常简单的示例,但我正在寻找脚本来回显响应,然后在后台运行其余代码。这样的事情可能吗?

【问题讨论】:

  • 你可能会研究某种形式的队列系统。
  • 您可以让您的初始 ajax 请求在后台的命令行中启动另一个 php 脚本。然后它可以立即返回并让用户知道它正在“运行”。如果该后台脚本将其状态写入某处的日志文件,则后续 ajax 请求可以检查此日志以查看脚本是否/何时完成并返回任何结果。
  • 纯 PHP 解决方案就像这里解释的那样:stackoverflow.com/questions/2585656/threads-in-php

标签: php


【解决方案1】:

使用 ajax 调用来完成这些任务,看看下面的例子

$.ajax({
    url: "getData.php",
    error: function(){
        // this code will fire when timeout is reached
    },
    success: function(){
        //this code will fire when the script is finished doing the task
    },
    timeout: 61000 // always kepp it more than the time total time taken by your script
});

希望对你有帮助

【讨论】:

  • @Ice76 答案本身不是 PHP,但它确实 run PHP,并且是在后台运行 PHP 的一种非常好的方法,并且很可能在此工作OP的案例。
  • 但是您假设一个客户来自一个网站,运行他的脚本,然后希望他将 ajax 请求发送到他可能没有的更多端点?
  • @HarKal 我并不悲观。但对我的评论有很好的回答吗?为什么不运行异步 PHP,因为他已经在运行脚本?或者让 PHP 使用 curl 发送请求,而不是作为客户端并暴露服务器端点?
  • 这有点用,但我已经在使用 ajax 进行初始调用。我正在寻找一种让 php 脚本返回然后完成运行长脚本的方法。这样用户也不必等待 ajax 完成
猜你喜欢
  • 2018-04-10
  • 2015-10-12
  • 2017-12-21
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2021-12-14
相关资源
最近更新 更多