我尝试设置一个开发环境,其中我的服务器环境由运行centos 6.3的虚拟机模拟,并且开发是从主机操作系统完成的。应用程序代码(codeigniter app)位于安装到/ home / foo / Desktop / code / app的共享文件夹中,我在apache中创建了一个虚拟主机来为此应用程序提供服务。
在开发方面,git用作VCS。
问题是加载助手时会包含两个文件。例如,我在application / helper中有一个名为my_date_helper的帮助器。它有两个功能。我自动加载了这个助手。
运行此应用程序时,php会抛出此错误
Fatal error: Cannot redeclare time12to24() (previously declared in /home/mlakhara/code/cosys/application/helpers/my_date_helper.php:9) in /home/mlakhara/code/cosys/application/helpers/MY_date_helper.php on line 11
当我评论该函数时,它表示函数未定义。
此外,与时间相关的函数会发出警告,告诉我使用date.timezone选项设置我已经在php.ini文件中的时区。
我认为这两个文件可以包含两次,但名称不同,但行号表示其他内容..(函数在不同行声明)。
从普通文件夹(非共享)提供应用程序时,应用程序正常运行。我从vn中删除了git并尝试但它没有任何区别。
可能是什么问题?
---------------编辑----------------------- 从Magnus Eriksson的回答中得到提示,我发现我正在自动加载这些“扩展”助手,而不是加载实际的路径和日期助手。这导致获得相同功能的两个副本。但是,时区设置的问题仍然存在。
作为纠正措施,我还将时间值添加到我的.htaccess文件中。但是有更好的方法可以做到。
答案 0 :(得分:1)
您正在定义该功能两次。在包含文件时,请尝试使用require_once('path/to/file.php')
代替include
或require
。否则,在源文件中,您可以执行以下操作:
if(!function_exists("time12to24")) {
function time12to24() [...]
}
答案 1 :(得分:1)
尝试删除文件名中的“my_”。 CodeIgniter使用“MY_”扩展核心,可以测试大小写,从而加载相同的文件两次。
无论哪种方式,正如Rob W指出的那样,总是将帮助函数包装在if (!function_exists()) {}
关于时区问题:由于我没有看到你的php.ini或你的设置,我不能说为什么它不起作用。
一个解决方案应该是在index.php中首先添加date_default_timezone_set('UTC');
(或者你想要的时区)。
由于我并不总是有权在客户端生产服务器上修改php.ini,我通常会将其添加到。