You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取正确本地文件路径?PHP域名方式include文件失败排查

1. 如何获取正确的本地文件路径?

兄弟,咱们先搞清楚本地文件路径的正确打开方式——绝对别用HTTP,那完全是走岔路了。PHP里获取本地路径有几个靠谱的方法:

  • 用__DIR__魔术常量:这会返回当前执行脚本所在目录的绝对路径,比如你的脚本在/var/www/html/blog/下,__DIR__就等于这个路径。如果header.php和当前脚本在同一个文件夹,直接写:
    include __DIR__ . '/header.php';
    
    如果在上级目录,就用__DIR__ . '/../header.php';,直观又不容易踩坑。
  • 用$_SERVER['DOCUMENT_ROOT']:这是你的网站根目录的绝对路径(比如/var/www/html/),适合引用根目录下的公共文件,比如header.php在根目录的话:
    include $_SERVER['DOCUMENT_ROOT'] . '/header.php';
    
  • 相对路径也能用,但要注意当前PHP的工作目录(可以用getcwd()查看),容易因为执行环境变化出问题,所以优先用上面两种绝对路径的方式。
2. 为什么用HTTP URL引入header.php会失败?

这事儿其实是PHP的include机制在搞鬼,我给你拆解下:
你写的$actual_link = "http://$_SERVER[HTTP_HOST]";拼出来的是一个HTTP URL,而PHP的include/require如果传入URL的话,本质是发起一个远程HTTP请求——这时候你的Web服务器会把header.php当成普通请求处理:先解析执行header.php里的PHP代码,然后把输出的HTML/文本返回给当前脚本。

也就是说,你include进来的不是header.php的原始PHP源码,而是它执行后的结果(比如一堆HTML标签),自然没法起到引入PHP头部代码的作用。而且更关键的是,PHP默认在php.ini里把allow_url_include设为Off,直接禁用了这种远程文件包含的功能,这也是为了安全(防止恶意引入远程脚本)。

至于你说其他操作有效?比如用这个URL做跳转或者用file_get_contents()获取内容,那些操作本来就是处理HTTP响应的,自然能拿到结果,但include是用来加载本地PHP源码执行的,完全不是一个场景。

正确的做法就是用第一个问题里说的本地绝对路径,比如:

// 假设header.php和当前脚本同目录
include __DIR__ . '/header.php';
// 或者在根目录
include $_SERVER['DOCUMENT_ROOT'] . '/header.php';

内容的提问来源于stack exchange,提问作者Orik3ll0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:13:57