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

子域名PHP文件如何包含根目录_private下的脚本文件?

解决子域名PHP文件包含根目录私有脚本的问题

问题核心

你的测试输出已经给出了关键线索:你拼接路径时少了一个斜杠,导致生成的路径完全错误。看你写的代码:

include_once(dirname(__DIR__, 1)."_private/scripts.php");

dirname(__DIR__, 1)返回的是/homepages/htdocs/michelpage,直接拼接_private会变成/homepages/htdocs/michelpage_private/scripts.php,自然找不到目标文件。

可行解决方案

方案1:修正路径拼接(最直接)

在_private前加上斜杠,确保路径层级正确:

$privateScript = dirname(__DIR__, 1) . "/_private/scripts.php";
include_once($privateScript);

或者更简洁的写法,利用__DIR__向上跳一级后直接拼接目标路径:

include_once(__DIR__ . "/../_private/scripts.php");

你之前试过INCLUDE "../_private/scripts.php"如果没生效,可能是当前PHP文件的执行目录并非子域名目录,可以先打印getcwd()确认执行目录,再调整相对路径的层级。

方案2:利用DOCUMENT_ROOT调整路径

你提到$_SERVER['DOCUMENT_ROOT']是/htdocs/michelpage/roadtrips,说明每个子域名的Web根目录被配置为各自的子目录。要拿到主站根目录,只需从DOCUMENT_ROOT向上跳一级:

$rootDir = dirname($_SERVER['DOCUMENT_ROOT'], 1);
include_once($rootDir . "/_private/scripts.php");

方案3:设置全局include_path(一劳永逸)

如果有18个子域名需要共用这个私有脚本,建议直接把_private目录加入PHP的include路径,后续无需再写长路径:

  • 若有权限修改php.ini,添加:
    include_path = ".:/homepages/htdocs/michelpage/_private"
    
  • 若只能用.htaccess,在子域名目录的.htaccess文件中添加:
    php_value include_path ".:/homepages/htdocs/michelpage/_private"
    

设置完成后,直接用文件名包含即可:

include_once("scripts.php");

关于DOCUMENT_ROOT和__DIR__差异的说明

$_SERVER['DOCUMENT_ROOT']是Web服务器配置的网站访问根目录,你的主机商给每个子域名单独配置了这个路径,指向对应的子目录;而__DIR__是当前PHP文件在服务器上的真实物理路径,两者的差异是主机配置导致的,不用纠结,以__DIR__返回的物理路径为准即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:32:07