0

我尝试设置一个开发环境,其中我的服务器环境由运行 centos 6.3 的虚拟机模拟,并且开发是从主机操作系统完成的。应用程序代码(codeigniter 应用程序)位于挂载到 /home/foo/Desktop/code/app 的共享文件夹中,我在 apache 中创建了一个虚拟主机来服务这个应用程序。

在开发方面, git 用作 VCS 。

问题是在加载帮助程序时包含两个文件。例如,我在应用程序/帮助程序中有一个名为 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 文件中。但是有没有更好的方法来做到这一点。

4

2 回答 2

2

尝试删除文件名中的“my_”。CodeIgniter 使用“MY_”来扩展核心,可能会同时使用小写和大写进行测试,从而两次加载相同的文件。

无论哪种方式,正如 Rob W 指出的那样,始终将您的辅助函数包装在if (!function_exists()) {}

关于时区问题:由于我没有看到你的 php.ini 或你的设置,我不能说它为什么不起作用。一个解决方案应该是date_default_timezone_set('UTC');首先在 index.php 中添加(或您想要的时区)。

由于我并不总是有权修改客户端生产服务器上的 php.ini,因此我通常将其添加进去。

于 2013-06-04T20:55:56.990 回答
1

您正在定义该函数两次。包含文件时,请尝试使用require_once('path/to/file.php')代替includerequire。否则,在源文件中,您可以执行以下操作:

if(!function_exists("time12to24")) {
  function time12to24() [...]
}
于 2013-06-04T20:43:36.990 回答