代码点火器和执行器?

时间:2011-06-08 02:05:52

标签: php codeigniter background

我有一个插入数据库的脚本,例如20,000个用户拥有1000个批次的电子邮件地址

(所以两个表,emailParent,emailChild),emailChild中有1000行用于emailParent中的每一行。

我想运行一个发送这些电子邮件的脚本,基本上就是这样说的 //check_for_pending_parent_rows() returns the id of the first pending row found, or 0
while($parentId = check_for_pending_parent_row()){//loop over children of parent row}

现在因为这是与sendgrid服务器通信,这可能需要一些时间。

所以我希望能够点击页面并让该页面启动后台进程,将电子邮件发送到sendgrid。

我以为我可以使用exec()然后我意识到,我正在使用代码点火器,这意味着入口点必须是index.php因此,我不认为exec()会起作用,

如何启动使用代码点火器的后台进程?

3 个答案:

答案 0 :(得分:2)

这不是一个真正的答案,只是太长而无法发表评论的内容

  

@Frank Farmer:70行似乎有点   过度,这个例子来自简单   测试几乎完成了一半,   有什么区别?

<?php
//---------------------------
//define required constants
//---------------------------

define('ROOT', dirname(__file__) . '/');
define('APPLICATION', ROOT . 'application/');
define('APPINDEX', ROOT . 'index.php');

//---------------------------
//check if required paths are valid
//---------------------------
$global_array = array(
    "ROOT" => ROOT,
    "APPLICATION" => APPLICATION,
    "APPINDEX" => APPINDEX);

foreach ($global_array as $global_name => $dir_check):
    if (!file_exists($dir_check)) {
        echo "Cannot Find " . $global_name . " File / Directory: " . $dir_check;
        exit;
    }
endforeach;

//---------------------------
//load in code igniter
//---------------------------
//Capture CodeIgniter output, discard and load system into $ci variable
ob_start();
include (APPINDEX);
$ci = &get_instance();
ob_end_clean();

//do stuff here

答案 1 :(得分:1)

使用exec运行vanilla CLI PHP脚本,通过cURL

调用页面

有关cURL的信息,请参阅http://php.net/manual/en/book.curl.php

这是我与一些codeigniter应用程序有关的事情

(还要确保将时间设置为0)

这样做,你仍然可以在浏览器中调试它

答案 2 :(得分:1)

Petah建议使用cURL,但最近(从2.0开始), CodeIgniter现在允许通过CLI 调用您的控制器:

这应该比cURL更容易。