【问题标题】:__autoload mix up?__autoload 搞混了?
【发布时间】:2009-08-13 08:22:36
【问题描述】:

我有一个服务器,上面有很多客户,当我开发时,我在 init.php 中包含一个 __autoloader() 函数,其中包含带有 dir_name(__FILE__)."/classes/".$className 的文件。

但昨天我看到服务器找不到具体的类,我在apache上重新启动,然后它又工作了。

每个客户都有自己的 init.php...(因此同一服务器上有许多 __autoloads)

customer1/init.php : 持有 __autoload() customer1/classes/class.php customer2/init.php : 持有 __autoload() customer2/classes/class.php

我没有做过一些测试,希望有人能在我尝试重现问题之前回答我的问题,但是你认为当你同时收到 2 个或更多请求时,php 有可能采用错误的自动加载功能吗?时间?

spl_autoload_register 是解决方案吗?

非常感谢您的一些想法或头脑风暴。

【问题讨论】:

  • 你有一个错字 idéas => 想法

标签: php autoload spl


【解决方案1】:

我的猜测是您的 __autoload() 函数中的任何一个中都应该有错字,或者您包含了错误的 init.php 文件。

另外,dir_name() 不存在,您应该将其更改为 dirname(),或者如果您使用 PHP >= 5.3,您也可以使用新的 DIR constant 以获得相同的效果。

编辑:根据您的评论,使用应该使用:

require(realpath(dirname(__FILE__)) . '/classes/' . $className);

require(realpath(__DIR__) . '/classes/' . $className);

【讨论】:

  • 我在包含init.php时从不使用绝对路径... include (dirname(FILE).'/../init.php');跨度>
  • 确实,我不知道我是怎么忽略的。 chdir() 或类似的东西应该会弄乱你的代码,使用上面的代码应该可以解决你的问题。
  • 酷,我今晚会尝试重现我的问题,他们会尝试您的解决方案。感谢您的提示。
【解决方案2】:

每个 PHP 请求是完全独立的,事实上你不可能在同一个 PHP 请求中有两个名为 __autoload() 的函数,所以它们不能相互干扰。可能的问题:

  • 您包含错误客户的init.php
  • 您忘记包含init.php 文件,在这种情况下,根本没有自动加载。

【讨论】:

  • 是的,但它已经工作了大约 3 个月。昨天第一次看到它,但是在我有这个结构之前我遇到了类似的问题 /test/classes/class.php /test/init.php /classes/class.php /init.php 所以 /test/ 是/...当我导航到 /test 时,有时我在自动加载时遇到了同样的问题...。重新启动服务器,然后它工作了一段时间,直到我开始在 / 上冲浪等等...
猜你喜欢
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 2017-02-09
  • 2010-12-29
  • 2020-12-30
  • 2014-05-20
  • 1970-01-01
  • 2017-11-20
相关资源
最近更新 更多