PHP未指定目录却能找到include文件的原因咨询
为什么PHP能直接找到includes目录下的文件?
这事儿其实是PHP的include_path配置在背后起作用,我给你拆解明白:
- PHP的文件搜索逻辑:当你用
include '文件名'这种不带路径的写法时,PHP会先在当前执行脚本所在的目录(也就是你的根目录,因为index.php在根目录)查找文件;如果找不到,就会依次去include_path配置里列出的目录挨个搜索。 - 你的场景分析:显然你的PHP环境里,
includes目录被添加到了include_path列表中。所以当你写include 'header.php'时,PHP在根目录没找到文件,就去include_path里的includes目录碰运气,自然就命中了。而你写include 'includes/header.php'时,是直接指定了相对路径,PHP会直接去根目录下的includes子目录找文件,当然也能成功加载。 - 验证方法:你可以在index.php里加一行代码验证:
运行后就能看到当前的include_path列表,肯定能找到你的includes目录在里面。<?php echo get_include_path(); ?> - 实用小建议:虽然依赖include_path能少写路径,但这种写法移植性很差——换个服务器环境,如果include_path没配置includes目录,代码直接就报错了。所以更稳妥的写法是用相对路径(比如
includes/header.php),或者结合魔术常量用绝对路径,比如:
这样不管环境怎么变,都能精准定位到目标文件。<?php include __DIR__ . '/includes/header.php'; ?>
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

