我有一个插入数据库的脚本,例如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()
会起作用,
如何启动使用代码点火器的后台进程?
答案 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更容易。