PHP require和require_once在相对路径上失败

时间:2018-03-30 08:20:13

标签: php

我们已将托管从托管PHP 5.6的服务器移至托管PHP 7.0.的新服务器。迁移后,我们注意到以下问题:

  

PHP警告:include_once(../ classes / ClassA.php):无法打开流:第37行/var/www/html/addons/addon.php php中没有此类文件或目录

我理解它应该与

一起使用
include_once __DIR__."/../classes/ClassA.php";

但是我不明白为什么它在以前的服务器上运行而不是在新服务器上运行。是否有任何php.ini更改允许它在没有__DIR __前缀的情况下工作?

2 个答案:

答案 0 :(得分:0)

使用 $ _ SERVER [' DOCUMENT_ROOT'] 代替_DIR_。删除路径组件../../并使用$ _SERVER变量绝对指向文件。

使用站点根目录的绝对路径值创建 BASEPATH 常量。您可以使用它来绝对指向包含文件。如果您移动到另一台服务器,只需根据需要更新该变量的值。

答案 1 :(得分:-1)

  

尝试realpath()功能..!

include_once realpath(__DIR__."/../classes/ClassA.php");

realpath()函数返回绝对路径名。

此函数删除所有符号链接(例如/./,“/../”和额外的“/”)并返回绝对路径名。

此函数在失败时返回FALSE。