在特定时间后执行PHP代码

时间:2012-07-02 18:04:43

标签: php

假设有两个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
}

我想尽快发送结果并将搜索词保存到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.

3 个答案:

答案 0 :(得分:3)

你需要将它回传到你的服务器,但是这种异步的php方法运行得非常好(我已经使用它大约一年了,几乎完全按你所做的那样)。

请参阅:How to run the PHP code asynchronous

答案 1 :(得分:1)

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

例如:

  1. 客户端发出HTTP请求(搜索)
  2. 服务器获取内容并将结果返回给最终用户
  3. 结果HTML包含一个代码段,例如< img src =“empty.gif?searchterm = mysearch”/>当浏览器呈现html时启动另一个请求
  4. 当另一个请求到达您的服务器时,您可以将搜索保存到DB
  5. 当您不希望最终用户必须等待您的指标内容时,类似的方法用于执行客户端跟踪。一些要点:

    • 理解,实现和调试非常简单,(我认为)在服务器端执行HTTP请求不是
    • 它更具可扩展性
    • 它不需要启用javascript,只需要浏览器呈现HTML
    • 目标可以是任何服务器,无需从Web服务器访问,只需向最终用户访问。

答案 2 :(得分:0)

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

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

简单写一下

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

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