如何将文件内容存储在变量中并使该变量在其他地方可用?

How to store file content in a variable and make that variable available elsewhere?

我的侧边栏包含在我的所有视图中都相同的元素,因此我没有在我的所有控制器中一遍又一遍地调用它们,而是创建了一个 MY_Controller class 并从那里提供变量.问题是,我的变量的内容来自一个文件,所以现在每次加载我的网站时,我都会调用读取文件。有人向我指出这不太好。

所以我想做的是读取模型中的文件,然后将其存储在一个变量中,然后将该变量传递给 MY_Controller。问题是我现在才面临同样的问题,而不是从 MY_Controller 中读取文件,而是从模型中读取文件。因此,我尝试在不同的函数中创建一个在我的整个模型中可用的变量,然后创建一个 returns 该变量的函数,但它不起作用。这是我的代码:

型号:

class My_model extends CI_Model {
    public $report = null;

    function read_file()
    {
        $this->report = file_get_contents('/path/to/file');
    }

    function get_file()
    {
        return $this->report;
    }
}

MY_Controller:

class MY_Controller extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->load->model('My_model');
        $report = $this->My_model->get_file();
        ...
    }
}

现在$report正在返回 null。

read_file()函数应该每天调用一次,因为文件每天早上更新。任何提示是否可以做我正在尝试的事情,或者如果有更好的方法,将不胜感激。

我不会给你代码,因为这会花太长时间,但我会解释 Symfony2 是如何做到的。听说过 Twig 吗?嗯,不管你熟悉不熟悉,重要的是它是如何编译模板的。

它将所有模板逻辑和文本编译为 PHP 文件,其中包含生成的函数和字符串。第一次执行模板时执行此编译。第二次,重新使用编译好的PHP

有效的 IO 仍然发生,但仅在包含的 PHP 页面上发生。您可以通过将整个源引导到一个文件中来再次消除这种情况(Symfony 使用库而不是模板来实现)。

因此,为了 "cache" 您的内容到 PHP,您需要编写 PHP 转储程序(或使用现有转储程序),或使用 var_export在简单的数据结构上转储预加载的数据。

你应该在get_file之前调用read_file函数,而且调用函数read_file和更新文件没有关系。