在新服务器上安装了 apache 和 PHP。使用 include("blah.php"); 工作正常,但当我尝试从后面的目录中包含 include("../blah.php"); 时,它不起作用
PHP.ini 同时具有:allow_url_fopen = On allow_url_include = On
有人知道这是什么原因造成的吗?
答案1
根据文档
如果定义了路径 — 无论是绝对路径(在 Windows 上以驱动器号或 \ 开头,在 Unix/Linux 系统上以 / 开头)还是相对于当前目录的路径(以 . 或 .. 开头)— include_path 将被完全忽略。例如,如果文件名以 ../ 开头,解析器将在父目录中查找请求的文件。
当您include ("blah.php");
PHP 使用时include_path
,但如果您使用相对的说明符,例如.
或..
,PHP 会相对于其所在位置(即当前正在执行的脚本)构建路径。
答案2
这是 Windows 安装吗?如果是,则您使用了错误的目录分隔符。您可以使用 DIRECTORY_SEPARATOR 常量来避免此类差异:
include('..'.DIRECTORY_SEPARATOR.'blah.php');
您也可以使用绝对路径:
include dirname(realpath(__FILE__)).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'blah.php'
答案3
尝试包含文件的完整路径(例如 /path/to/your/file)以查看是否是上下文问题,您可能位于错误的目录中。is_readable() 不是最棒的函数,请先尝试使用 file_exists 检查文件是否存在。另外,请仔细检查文件权限以防万一。
答案4
检查您的日志(或输入 error_reporting(E_ALL))。如果文件无法读取或未加载,您将看到带有解释的日志条目。如果它对您没有帮助,请将其粘贴在此处。