直接用 include 引入外部 php 配置文件需在全局作用域中进行,否则变量仅限局部作用域;配置文件应只定义变量,不执行逻辑,且禁用短标签。
直接用 include 引入外部 php 配置文件,是 php 中最常用、最轻量的变量共享方式,但**能不能取到变量,关键不在怎么 include,而在作用域是否对得上**。
变量能被取到的前提:引入必须在全局作用域中进行
如果把 include 'config.php'; 写在函数内部,哪怕 config.php 里定义了 $db_host = 'localhost';,这个变量也只存在于该函数的局部作用域里。调用其他函数时依然拿不到。
- ✅ 正确做法:在所有函数定义之外、脚本顶层位置 include 配置文件
- ❌ 错误写法:
function connect() { include 'config.php'; $pdo = new PDO($db_host, ...); }—— 此时$db_host在函数内才声明,外部不可见,且下次再进函数会重复执行 config.php,可能引发重复定义警告
配置文件本身要干净,只做定义,不执行逻辑
一个理想的 config.php 应该像这样:
<?php // config.php
$api_key = 'sk_live_abc123';
$database = [
'host' => '127.0.0.1',
'name' => 'myapp'
];
?>
- 不要在 config.php 里写 echo、header、new 类实例等运行性代码
- 避免使用短标签
,统一用<?php确保兼容性 - 如果配置需动态生成(如读环境变量),可封装成函数,比如
get_config(),比依赖全局变量更安全
路径要写对,推荐用 __DIR__ 拼绝对路径
相对路径容易因入口脚本位置不同而失效。例如 index.php 和 admin/index.php 都想 include 同一个 config.php,用 include 'config.php'; 就可能失败。
- ✅ 推荐写法:
include __DIR__ . '/../config.php'; - ✅ 更清晰的组织:
include dirname(__DIR__) . '/config/app.php'; - ⚠️ 注意:__DIR__ 是当前文件所在目录,不是执行入口目录
需要在函数里用配置?用 global 或封装访问方式
如果确实要在函数里读配置,有两类稳妥方案:
- 显式声明 global:
function sendMail() { global $api_key; echo $api_key; } - 更推荐封装成函数:
function get_api_key() { return $GLOBALS['api_key'] ?? null; }或直接返回数组return require __DIR__.'/config.php'; - 避免在函数里反复 include 同一配置文件——既低效,又可能因多次执行导致变量覆盖或警告











