1

我有一个有很多客户的服务器,当我开发时,我包含了我的 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 是解决方案吗?

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

4

2 回答 2

2

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

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

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

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

或者

require(realpath(__DIR__) . '/classes/' . $className);
于 2009-08-13T08:41:28.090 回答
0

每个 PHP 请求是完全独立的,实际上你不可能__autoload()在同一个 PHP 请求中同时命名两个函数,因此它们不能相互干扰。可能出现的问题:

  • 您包含了错误的客户init.php
  • 您忘记包含该init.php文件,在这种情况下根本没有自动加载。
于 2009-08-13T08:48:54.067 回答