gpt4 book ai didi

php - 如何在 Zend Framework 中使用守护进程访问我的模型

转载 作者:可可西里 更新时间:2023-11-01 01:05:58 25 4
gpt4 key购买 nike

我正在做一个使用 Phirehose 的项目收集和使用 Twitter Streaming API。 Phirehose 库旨在从命令行运行,最好作为守护进程或 cron 作业。

我创建了一个守护进程并将其放在库文件夹中。 Bootstrap.php 已更新为自动加载自定义库。因此,应用程序本身可以看到我的守护进程。

我的问题是如何将它与 Zend Framework 正确集成。我需要能够直接调用守护程序文件以从命令行或使用诸如 Upstart 之类的工具启动它。 ,但这样做时 Zend 应用程序不会加载,这意味着我无权访问我的模型。

我可以创建一个 Controller 来启动它,但我不想增加有人能够从 Web 界面控制守护程序的安全问题。我也可以编写 PDO 以手动连接到数据库,但出于扩展原因,我试图避免它。我希望所有数据库连接数据都驻留在 application.ini 中。

有没有办法在我的守护程序类中初始化我的 Zend Framework 应用程序以便我可以使用这些模型?

最佳答案

这个例子演示了我如何使用 Zend_Queue 执行后台任务。在这个特定示例中,我在后台使用 Zend_Queue 和 cronjob 生成发票,我的 Zend_Queue 已初始化并在 Bootstrap 中注册。

正在创建一个工作,My_Job 源是 here :

class My_Job_SendInvoice extends My_Job
{
protected $_invoiceId = null;

public function __construct(Zend_Queue $queue, array $options = null)
{
if (is_array($options)) {
$this->setOptions($options);
}

parent::__construct($queue);
}

public function job()
{
$filename = InvoiceTable::getInstance()
->generateInvoice($this->_invoiceId);

return is_file($filename);
}
}

在您的服务或模型中的某处注册作业:

$backgroundJob = new My_Job_SendInvoice(Zend_Registry::get('queue'), array(
'invoiceId' => $invoiceId
));
$backgroundJob->execute();

创建后台脚本:

defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/..'));

// temp, environment should be specified prior execution
define('APPLICATION_ENV', 'development');

set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));


require_once 'Zend/Application.php';

$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);

$application->bootstrap();

/* @var $queue Zend_Queue */
$queue = Zend_Registry::get('queue');
$messages = $queue->receive(5);

foreach ($messages as $i => $message) {
/* @var $job My_Job */
$job = unserialize($message->body);
if ($job->job()) {
$queue->deleteMessage($message);
}
}

关于php - 如何在 Zend Framework 中使用守护进程访问我的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10954616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com