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


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

我的侧边栏在所有视图中都有相同的元素,所以我没有在所有控制器中反复调用它们,而是创建了一个My_Controller类,并从中提供变量。问题是,我的变量中的内容来自一个文件,所以现在每次加载我的网站时,我都会打电话读取文件。有人向我指出,这不太好。

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

型号:

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_控制器:

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使用库而不是模板)。

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

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