我最近在我的php代码中实现了以下代码来自动加载类:
function my_autoloader($class) {
include 'classes/class_' . $class . '.php';
}
spl_autoload_register('my_autoloader');代码包含在需要生成网页的所有文件的顶部的文件中。因此,我开始从我的代码中删除require_once调用。下面是一个例子:
require_once('classes/class_web_page.php');正如您可能从上面了解到的,我的站点(它是一个在线社区,所以有一个论坛、画廊等)上的各种页面都使用web_page类来生成页面标题、菜单等。各种代码片段创建一个web_page对象,设置各种参数来确定需要哪些菜单选项等,为页面提供一些内容,并生成html。
在我对class_web_page.php文件进行更改之前,一切似乎都很好。这一变化在大多数网站上都很明显。除了主页。
我刷新了浏览器,关闭并再次打开:-)尝试调用http://www.terragenesis.co.uk/index.php,而不仅仅是http://www.terragenesis.co.uk/,甚至在服务器上停止和重新启动apache。尽管如此,这些变化并没有显示在主页上。最后,我将require_once代码行放回了index.php中……然后,嘿:我在class_web_page.php中所做的修改出现在了主页上。
因此,在我看来,自动加载器正在加载class_web_page.php的缓存副本,即使是重启Apache,也无法说服它获得新版本。为什么它应该对主页这样做,而不是对其他页面...我没有头绪。
还有没有人经历过这种情况?我是不是在自动加载器代码上做错了什么?我该怎么解决它..。或者我必须将所有的require_once语句放回原位?:-(
我的服务器使用PHP版本5.1.6
发布于 2013-01-29 19:25:55
我找到了这个问题的答案...和往常一样,我做了一件愚蠢得令人难以置信的事情:
事实证明,在过去的某个时刻,我意外地将class_web_page.php的副本上传到了站点主目录中,而不是classes子目录中。所以它存在两次。
因此,尽管我的自动加载器告诉php查看classs子目录,但它将首先在与主脚本相同的目录中查找(在我的站点主页的情况下是index.php)。所有其他站点页面脚本都在子目录(论坛、图库等)中,因此它们使用/class/class_web_page.php是“正确的”
我现在已经删除了主目录中的class_web_page.php副本...一切都按其应有的方式运行。
发布于 2013-01-24 00:48:28
是否确实加载了此文件(或其缓存版本)?
https://stackoverflow.com/questions/14484863
复制相似问题