4

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

3 回答 3

3

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

请参阅:如何异步运行 PHP 代码

于 2012-07-02T18:10:09.863 回答
1

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

例如:

  1. 客户端发出 HTTP 请求(搜索)
  2. 服务器获取内容并将结果返回给最终用户
  3. 结果 HTML 包含一个片段,例如 <img src="empty.gif?searchterm=mysearch"/> 当浏览器呈现 html 时会启动另一个请求
  4. 当另一个请求到达您的服务器时,您可以将搜索保存到数据库

当您不希望最终用户不得不等待您的指标资料时,可以使用类似的方法进行例如客户端跟踪。几点:

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

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

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

简单地写

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

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

于 2012-07-02T18:16:35.923 回答