【问题标题】:500 Internal Server Error Cron Job with Codeigniter使用 Codeigniter 的 500 内部服务器错误 Cron 作业
【发布时间】:2016-03-02 05:47:18
【问题描述】:

我正在执行一项向数据库添加值的 cron 作业。我正在使用 Codeigniter。我正在使用终端测试脚本。它在我的本地机器上工作(我正在使用 MAMP),但是当我将它上传到我的服务器并运行脚本时,它给了我以下错误: 状态:500 内部服务器错误 内容类型:text/html; charset=UTF-8

无论我做什么,它都不会做任何不同的事情。这是什么原因造成的,我该如何解决?

已编辑:

我正在使用 Codeigniter 3.0.3。

Cron 控制器

class Cron extends MY_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('cron_m');
    }

    public function index()
    {
        if(!$this->input->is_cli_request())
        {
            echo "This script can only be accessed via the command line" . PHP_EOL;
            return;
        }

        $data = array('value' => 'test');
        $this->cron_m->save($data);
        echo 'saved!';

    }

}

前端控制器

class Frontend_Controller extends MY_Controller {

    function __construct()
    {
        parent::__construct();
        $this->load->helper('form');
        $this->load->library('form_validation');        
     }

    public function lock()
    {
        $this->load->library('session');        
        $this->load->model('user_m');   

        // Login check
        $exception_uris = array(
            'admin/user/login',
            'admin/user/logout'
        );

        if (in_array(uri_string(), $exception_uris) == FALSE)
        {
            if ($this->user_m->loggedin() == FALSE)
            {
                $uri = $this->uri->uri_string();
                $this->session->set_tempdata('uri', $uri);

                redirect('admin/user/login');
            }
        }
    }

}

MY_Controller

class MY_Controller extends CI_Controller {

    public $data = array();

    function __construct() {

        parent::__construct();

        $this->data['errors'] = array();

    }

}

Cron_m 模型

class Cron_m extends MY_Model {

    public $_table_name = 'CRON';
    protected $_order_by = 'id';

    public function __construct()
    {
        parent::__construct();
    }

}

MY_Model

class MY_Model extends CI_Model {

    public $_table_name = '';
    protected $_primary_key = 'id';
    protected $_primary_filter = 'intval';
    protected $_order_by = 'order';

    function __construct()
    {
        parent::__construct();
    }

    public function save($data, $id = NULL)
    {

        //INSERT
        if ($id === NULL)
        {           
            !isset($data[$this->_primary_key]) || $data[$this->_primary_key] = NULL;
            $this->db->set($data);
            $this->db->insert($this->_table_name);
            $id = $this->db->insert_id();
        }

        //UPDATE
        else
        {
            $filter = $this->_primary_filter;
            $id = $filter($id);
            $this->db->set($data);
            $this->db->where($this->_primary_key, $id);
            $this->db->update($this->_table_name);
        }

        return $id;

    }

}

.htaccess

RewriteEngine on
RewriteCond $1 !^(index\.php|robots\.txt|assets|uploads|podcast\.xml)
RewriteRule ^(.*)$ /index.php/$1 [L]

【问题讨论】:

  • 你的 CI 版本是多少??也添加代码
  • 添加了我的代码和版本
  • 这里有会话吗??
  • 我的意思是进入 cron 控制器,你需要任何会话吗?喜欢用户必须登录才能使用 cron??
  • 不,由于尝试进入数据库时​​ ip_address 不可用,我遇到了会话问题。所以没有会话

标签: php mysql codeigniter cron


【解决方案1】:

我想通了。我只使用了 php 命令,但搜索后我发现了这篇文章 - CodeIgniter Cron Job through Cpanel。我现在不使用 php,而是使用 php5-cli,它的工作原理就像一个冠军。

php5-cli path/to/folder/index cron set_value

【讨论】:

    【解决方案2】:

    首先在控制器中编写一个codeigniter函数。确保它满足以下条件

    • 要访问 codeigniter 功能,不应该在那里登录
    • 在函数中,您不应使用任何会话。

    然后在服务器的 cpanel 中,您可以根据需要设置 cron,可以是每分钟、每小时等。

    也可以使用wget,

    wget -T 0 -O path_to_a_text_file_where_cron_will_write_errors path_to_your_script_that_should_be_run_by_cron
    

    希望对你有帮助。

    【讨论】:

    • 我遇到了另一个错误wget -T 0 -O /home4/kottkea1/public_html/fallspointechurch/assets/errors.txt /home4/kottkea1/public_html/fallspointechurch/index.php cron /home4/kottkea1/public_html/fallspointechurch/index.php: Scheme missing. --2015-11-27 23:24:33-- http://cron/ Resolving cron... failed: Name or service not known. wget: unable to resolve host address “cron”
    • 我可能应该提到我几天前才开始尝试 cron 作业,所以我不知道自己在做什么 :) 并且我对终端命令的了解足以让我四处走动
    • 试过它给了我同样的错误......它可能与我试图访问我的控制器的方式有关。运行控制器的 codeigniter 文档如下:/index.php cron。这就是它抛出错误的原因。我无法直接访问控制器。
    • index.php之后,还有空间吗??
    • 删除空间并添加/
    【解决方案3】:

    我认为 cron 作业仅适用于核心 php 代码,您必须创建像 cron.php 这样的新文件并将此文件放在根目录中并以核心 php 格式编写代码,然后将您的 cron 作业 url 保存在 cpanel 我认为它将工作 100% cron 工作与 ci 不工作,因为我已经面临这个问题,请尝试这种方式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 2018-02-22
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多