PHP 包含不允许../?

PHP 包含不允许../?

在新服务器上安装了 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))。如果文件无法读取或未加载,您将看到带有解释的日志条目。如果它对您没有帮助,请将其粘贴在此处。

相关内容