嗨,我在使用CI CLI
方式编写 cron 作业时遇到了一些问题。我的应用程序有一个名为的控制器名称manager.php
,其中有一个名为 check_status 的方法,我将在其中order_ids
使用一个模型函数来获取所有内容。曾经 order_id 行在数据库中记录了一个成功或失败的状态。
如果我将 order_id 传递给它,我有一个 api,它会告诉我订单是否成功交付。但是这里出现了我在顶部控制器中遇到的问题。
<?php if(! defined('BASEPATH') ) exit("NO Direct Script Access Allowed"); ?>
因此,当我尝试check_status
在 CI 中从 CLI 运行方法时,它会给我一个错误说明NO Direct Script Access Allowed
。
这是我调用上述方法的方式php application/controllers/manager.php check_status
所以我决定像这样创建另一个名为 cron_job.php 的类文件,因为我没有保留上述错误行 "No Direct Script Access Allowed"
。我认为当我尝试运行时它现在会提供访问权限,但它不会给出错误甚至输出。
这是我创建的类和方法。
<?php
class Cron_job extends CI_Controller {
public function message($to = 'World')
{
echo "Hello {$to}!".PHP_EOL;
}
}
?>
我像这样从 CLI 运行这个控制器php application/controller/cron_job.php message
Note: I am in ROOT directory.
根本没有输出。所以我尝试了另一种方式php index.php application/controller/cron_job.php message
现在它给了我错误说明Error 404 page not found.
我现在以另一种方式尝试了什么,我在视图文件夹中创建了一个文件,并且我正在调用旧的控制器/方法 url,如下所示。
$result = file_get_contents("http://application_path/controller/method");
echo $result;
现在我得到了我在 manager.php 控制器的方法 check_status 中定义的输出。
但是在上述行之后出现了另一个问题,我将得到一个包含所有 order_id 的数组输出。
我会将每个 id 发送到 api 以检查状态。如果失败,它将检查是否已交付。如果完成,我需要根据该 order_id 在数据库中更新该状态。但是现在我在视图文件中,是否可以从视图文件中调用模型文件,或者有什么方法可以做到这一点。
有什么帮助吗?
注意:任何控制器或任何方法中都没有语法错误,当我使用 url 访问时,这些错误已得到充分验证并正常工作。