【问题标题】:Executing PHP code after a specific time在特定时间后执行 PHP 代码
【发布时间】:2012-07-02 18:04:43
【问题描述】:

假设有两个 PHP 函数。

function first()
{

     $keyword = $this->input->post('keyword');

     //search for the result and show it to users.
     $this->search->search($keyword);

     //send the keyword to save it into the db.
     $this->second($keyword);
}


function second($keyword)
{
      //saving a search keyword in the db
}

我想尽快发送结果并将搜索词保存到数据库中。

但是,我想在特定时间之后运行第二个脚本。

因为我想尽快将搜索结果提供给我的客户。

有没有办法在用户运行第一个 PHP 脚本后运行第二个 PHP 脚本?

* I don't want to use Cron Job
* I wanna run those two script separatly. 
* don't want to use sleep because it will stop the first script for certain times.

【问题讨论】:

  • 你是apache还是iis环境?

标签: php


【解决方案1】:

您需要将它路由回您的服务器,但是这种异步 php 方法工作得非常好(我已经使用它大约一年来几乎完全按照您的方式做)。

见:How to run the PHP code asynchronous

【讨论】:

  • 所以,您的想法是制作不同的 POST 操作来运行不同的功能。好的。我想知道发送一个新的 POST 操作需要多长时间。
  • 这对我来说非常快,虽然我从来没有计时过我也从未见过它影响其他任何事情。
【解决方案2】:

我不会像 Bob Davies 建议的那样从 PHP 发出 Web 请求,而是在页面显示后从 html 页面发起一个新的 HTTP 请求。

例如:

  1. 客户端发出 HTTP 请求(搜索)
  2. 服务器获取资料并将结果返回给最终用户
  3. 结果 HTML 包含一个 sn-p,例如 会在浏览器呈现 html 时发起另一个请求
  4. 当另一个请求到达您的服务器时,您可以将搜索保存到 DB

当您不希望最终用户不得不等待您的指标资料时,类似的方法可用于执行客户端跟踪等操作。几点:

  • 理解、实现和调试非常简单,(在我看来)在服务器端执行 HTTP 请求并不是
  • 更具可扩展性
  • 它不需要打开 javascript,只需一个浏览器呈现 HTML
  • 目标可以是任何地方的任何服务器,不必从您的 Web 服务器访问,仅对最终用户。

【讨论】:

  • 是的,我想他的想法不错。我希望 PHP 应该支持一种简单的方法来解决这个问题,因为等待响应直到服务器完成其计算看起来不太好。
  • 我不认为我完全理解 - 所以我提出的解决方案不是一个简单的方法,或者?
  • 我的意思是 Bob Davies 的想法很好尝试。你的想法也是同样的方法,这很好。
  • 嗯...这不是同一种方法。
【解决方案3】:

据我所知,如果你只想使用 PHP,你可以使用sleep(),但它会延迟代码的执行。

我认为延迟工作的最简单方法是使用 AJAX。只需将第二个函数放在另一个 PHP 文档中并调用 XMLHTTPRequest()$.ajax(如果您想使用 jQuery),然后将代码延迟几秒钟。您可以使用 setInterval()delay() (jQuery) 来做到这一点。

简单写

delay(2000).function(){
    //saving a search keyword in the db
}

请记住,在这里您应该使用 AJAX 而不是 PHP 代码。

【讨论】:

  • 这很好.. 但不想使用 ajax 来实现它。我目前正在将服务器用于移动设备。
  • 如果您将脚本用于移动设备,那么 jQuery (mobile) 和 AJAX 是您的最佳选择。但你决定做什么......只需投票:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多