PHP单文件定义应用名全局变量跨层级文件引用问题咨询
解决方案
核心问题原因
你原来的相对路径引用报错,是因为PHP的相对路径是相对于当前执行脚本的工作目录,而非代码所在文件的目录,first_folder/inner_folder/myfile.php执行时会在自身所在目录找yourfile.php,自然找不到。
最优配置方案(一次修改全局生效)
步骤1:创建全局初始化文件
在项目根目录C:\xampp\htdocs\myapp下新建init.php,内容如下:
<?php // 定义项目根路径,后续修改项目名仅需改此处 define('APP_ROOT', $_SERVER['DOCUMENT_ROOT'] . '/myapp'); // 将项目根目录加入PHP默认包含路径,后续包含文件可直接写相对项目根的路径 set_include_path(get_include_path() . PATH_SEPARATOR . APP_ROOT); // 全局引入yourfile.php,所有引用init.php的文件无需再单独引入yourfile include_once 'second_folder/yourfile.php'; ?>
步骤2:优化yourfile.php配置
把yourfile.php里的变量改为全局常量,避免作用域问题:
<?php // 后续修改应用名仅需改此处路径即可,所有调用的文件无需改动 define('APP_PATH', APP_ROOT); ?>
步骤3:所有业务文件统一引入初始化文件
不管业务文件在哪个目录层级,引入init.php时用__DIR__魔术常量定位(__DIR__是当前代码文件所在的绝对路径,不受执行位置影响),比如你的myfile.php修改为:
<?php // 两个../表示从当前文件所在的inner_folder往上退两级到项目根目录,对应自己的文件层级调整层数即可 include_once __DIR__ . '/../../init.php'; // 后续直接用全局常量即可,无需再引入其他配置 include_once(APP_PATH . '/helper/another.php'); ?>
备选方案(无需新增初始化文件)
如果不想新增全局文件,也可以直接修改PHP配置文件php.ini,找到include_path配置项,把你的second_folder绝对路径加进去:
include_path = ".;C:\xampp\htdocs\myapp\second_folder"
修改后重启服务,所有文件中直接写include_once('yourfile.php')都能正常生效,后续改路径只需修改php.ini或者yourfile.php里的路径定义即可。
内容的提问来源于stack exchange,提问作者adttmkb ttmkb
相关产品推荐
相关产品推荐

