

新闻资讯
技术教程require 文件错误时中止脚本,include 仅警告并继续执行;相对路径以当前执行脚本目录为基准,非工作目录;推荐用 DIR 拼接绝对路径;require_once 和 include_once 按完整路径字符串去重。
两者都用于加载外部 PHP 文件,但错误处理逻辑完全不同:require 在文件不存在或语法错误时会触发 Fatal error 并中止脚本;include 则只抛出 Warning,后续代码仍会执行。实际项目中,框架初始化、配置文件、核心类库一律用 require,避免静默失败。
PHP 不读取 shell 的 pwd,而是以正在运行的 PHP 脚本(比如 index.php)所在目录为起点解析相对路径。这意味着:
include 'config/db.php' 是从 index.php 所在目录拼接 config/db.php
php /var/www/app/cli.php,那相对路径就基于 /var/www/app/
getcwd() 返回的是当前工作目录,和 include 路径无关,别混淆硬写相对路径容易因调用层级变深而失效;改 include_path 又影响全局且不易追踪。推荐统一用 __DIR__(当前文件所在目录的绝对路径)构建路径:
include __DIR__ . '/../config/database.php'; require_once __DIR__ . '/lib/Helper.php';
注意: __DIR__ 结尾不含斜杠,手动加 /;dirname(__ 功能等价但更冗长,已不推荐。
它们不是按文件内容去重,而是对「已加载过的完整路径字符串」做哈希比对。这意味着:
require_once 'foo.php' 和 require_once './foo.php' 会被视为两个不同文件__DIR__ 拼接,基本可杜绝误判,但要注意符号链接场景下需用 realpath() 归一化生产环境所有类文件引入务必用 require_once,否则可能引发 Cannot redeclare class 错误。