
本文详解php中require()函数内“./”相对路径的含义,并澄清其在合理使用场景下的安全性,强调路径硬编码与动态拼接的风险差异。
本文详解php中require()函数内“./”相对路径的含义,并澄清其在合理使用场景下的安全性,强调路径硬编码与动态拼接的风险差异。
在PHP中,require("./folder/file.php") 中的 .(单个英文句点)表示当前工作目录(即执行该require语句的脚本所在目录),./ 是标准的相对路径前缀,用于显式声明“从当前目录开始查找”。例如,若主入口文件 index.php 位于 /var/www/html/,且 ./folder/file.php 存在于 /var/www/html/folder/file.php,则该语句将准确加载该文件。
✅ 安全性说明:
当路径为字面量字符串(如 "./folder/file.php")且不包含用户输入、变量拼接或运行时计算时,require() 是安全的——它仅执行静态文件包含,不存在路径遍历(Path Traversal)、远程文件包含(RFI)或任意文件读取等风险。PHP会严格按相对路径解析,不会触发动态解析逻辑。
⚠️ 但需警惕以下不安全模式:
// ❌ 危险:用户可控参数直接拼接(可能导致 ../../etc/passwd)
$filename = $_GET['module'] ?? '';
require("./modules/{$filename}.php");
// ❌ 危险:未过滤的变量引入路径穿越
$path = $_POST['path'];
require($path . '/config.php');
// ✅ 安全:白名单校验 + 固定前缀
$allowed = ['user', 'admin', 'api'];
$module = $_GET['module'] ?? '';
if (in_array($module, $allowed)) {
require("./modules/{$module}.php"); // 路径仍以 ./ 开头,但内容受控
}
? 最佳实践建议:
- 优先使用
require(__DIR__ . '/folder/file.php')替代./,因__DIR__返回当前文件的绝对路径,彻底避免因工作目录(getcwd())变更导致的路径解析偏差; - 禁止将任何外部输入(
$_GET,$_POST,$_SERVER等)未经严格校验、白名单或路径规范化(如realpath()+ 目录前缀校验)就用于require; - 在生产环境禁用
allow_url_include(PHP配置项),防止远程文件包含; - 使用自动加载器(如PSR-4)替代大量手动
require,提升可维护性与安全性。
总之,“.”本身无害,安全与否取决于路径是否可控。静态、明确、受限的相对路径是可靠的选择;而动态、开放、未经约束的路径拼接,才是真正的风险源头。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











