我正在尝试在CodeIgniter项目中编辑config/database.php
,这样每次将新版本推送到服务器时都不必更改数据库信息。为了完成后者,我创建了一个$debug
变量,如下所示,它检查uri是否在我的localhost机器上运行(我在上载之前构建项目)或在实际服务器上运行。
不幸的是在database.php文件中,我无权访问$this
变量,而且我个人对PHP中的OOP不熟悉,我并不完全确定如何解决这个问题。请问您能告诉我怎么做?
谢谢,
最大
致命错误:在第51行的application / config / database.php中不在对象上下文中时使用$ this
$debug = strpos($this->uri->config->item('base_url'), 'localhost'); //line 51
$db['default']['hostname'] = $debug == TRUE ? 'x' : 'y';
$db['default']['username'] = $debug == TRUE ? 'x' : 'y';
$db['default']['password'] = $debug == TRUE ? 'x' : 'y';
$db['default']['database'] = $debug == TRUE ? 'x' : 'y';
答案 0 :(得分:13)
您需要获取codeigniter对象的实例 -
$CI = get_instance();
对于旧版本的php,请使用=&
然后,在通常使用$CI
$this
答案 1 :(得分:2)
您需要使用get_instance()
来获取$this
变量。
$ci = get_instance(); // $ci replaces $this
echo $ci->config->item('base_url');
$this
变量是面向对象代码中使用的特殊变量,当你有类时 - 请参阅php.net以获取一些背景知识。
答案 2 :(得分:0)
$this
仅适用于对象,不能在对象外使用它。我相信,最好的方法是在部署时排除database.php
文件。您使用的IDE应该有一个从部署中排除文件的选项。
答案 3 :(得分:0)
这个问题有一个简单的答案。
阅读环境部分: http://codeigniter.com/user_guide/libraries/config.html
基本上创建两个文件夹 application / config / production和 应用/配置/发展
并在每个文件夹中放入database.php的一个副本。
答案 4 :(得分:0)
您还可以使用$_SERVER['SERVER_NAME']
并将其与服务器名称(localhost或remote)进行比较。 CI中有一个功能可以检查它:
$this->input-> server('SERVER_NAME')
如上所述,如果不在对象上下文中,则必须更改this
。