php怎样包含外部文件_php包含外部文件路径规则【引入】

require 文件错误时中止脚本,include 仅警告并继续执行;相对路径以当前执行脚本目录为基准,非工作目录;推荐用 DIR 拼接绝对路径;require_once 和 include_once 按完整路径字符串去重。

php怎样包含外部文件_php包含外部文件路径规则【引入】

include 和 require 的行为差异必须分清

两者都用于加载外部 PHP 文件,但错误处理逻辑完全不同:require 在文件不存在或语法错误时会触发 Fatal error 并中止脚本;include 则只抛出 Warning,后续代码仍会执行。实际项目中,框架初始化、配置文件、核心类库一律用 require,避免静默失败。

相对路径以当前执行脚本为基准,不是当前工作目录

PHP 不读取 shell 的 pwd,而是以正在运行的 PHP 脚本(比如 index.php)所在目录为起点解析相对路径。这意味着:

  • include 'config/db.php' 是从 index.php 所在目录拼接 config/db.php
  • 如果通过 CLI 运行 php /var/www/app/cli.php,那相对路径就基于 /var/www/app/
  • getcwd() 返回的是当前工作目录,和 include 路径无关,别混淆

用 __DIR__ 拼接路径最安全,避免依赖 include_path

硬写相对路径容易因调用层级变深而失效;改 include_path 又影响全局且不易追踪。推荐统一用 __DIR__(当前文件所在目录的绝对路径)构建路径:

include __DIR__ . '/../config/database.php';
require_once __DIR__ . '/lib/Helper.php';

注意:__DIR__ 结尾不含斜杠,手动加 /dirname(__FILE__) 功能等价但更冗长,已不推荐。

Question AI

Question AI

一款基于大模型的免费的AI问答助手、总结器、AI搜索引擎

下载

立即学习PHP免费学习笔记(深入)”;

require_once 和 include_once 防重复加载,但判断依据是文件路径字符串

它们不是按文件内容去重,而是对「已加载过的完整路径字符串」做哈希比对。这意味着:

  • require_once 'foo.php'require_once './foo.php' 会被视为两个不同文件
  • 软链接路径与真实路径也被认为不同,可能意外重复加载
  • 如果用了 __DIR__ 拼接,基本可杜绝误判,但要注意符号链接场景下需用 realpath() 归一化

生产环境所有类文件引入务必用 require_once,否则可能引发 Cannot redeclare class 错误。

https://www.php.cn/faq/1989287.html

发表回复

Your email address will not be published. Required fields are marked *