【问题标题】:PHP autoloading fails on other serverPHP自动加载在其他服务器上失败
【发布时间】:2014-02-26 16:01:55
【问题描述】:

我在 localhost 上创建了一个网站模块,并试图让它在实时服务器上工作,这令人沮丧,因为我确信要加载的每个类都有正确的语法。即使路径相同,它们也不会被加载。

function __autoload($class_name) {
   require("adk3/classes/".$class_name.".php");
}

以上是在根文件夹(htdocs/index.php)执行的本地主机上工作的原始文件

function autoloader(){
       require("adk3/classes/".$class_name.".php");
}
spl_autoload_register('autoloader',true);

这也是我也在尝试但也没有奏效的方法。我还检查了绝对路径:

require(dirname(__FILE__)."/adk3/classes/".$class_name.".php");

脚本在$userList = new UserList(); 处停止执行,即使E_ALL 已打开,也不会出现任何错误消息。使用 dirname 语法 file_exists() 表示是 - 它们存在。

编辑(附加信息):

  • error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE | E_STRICT | E_ALL); 根本没有任何帮助。
  • PHP 版本为 5.3.1。
  • <?php require("adk3/interfaces.php"); // okay require("adk3/classes/UserList.php"); //STOPS without error shown

【问题讨论】:

  • 尝试使用E_ALL | E_STRICT运行
  • 尝试带参数运行:function autoloader($class_name){ require("adk3/classes/".$class_name.".php"); } spl_autoload_register('autoloader',true);
  • 也将您的 dirname() 包装在 realpath() 中,如果无法解析路径,它将返回 false。回显文件名,包括您正在尝试的路径。如果您一无所获,则自动加载器没有运行。如果它返回文件的路径 OK,则自动加载器正在运行。将其包装在您的 realpath() 中,看看 PHP 是否可以看到该文件 :)
  • 服务器的PHP版本是否支持__autoload()?而且您没有在 CLI 交互模式下使用 PHP? display_errors 已开启(由phpinfo() 确认)?
  • 您确认您的自动加载功能正在运行吗?

标签: php require autoload


【解决方案1】:

我花了很长时间才弄明白:

文件已成功获取,这就是我从未收到任何错误消息的原因。根据PHP5.4+,在所需文件中编写的类是可以的。由于我在新服务器上运行了 PHP 5.3,它无法解释我在某些方法中使用的新的速记数组语法 []。

【讨论】:

    猜你喜欢
    • 2017-04-04
    • 2014-08-25
    • 1970-01-01
    • 2017-05-24
    • 2012-02-19
    • 1970-01-01
    • 2015-11-24
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多