PHP脚本文件包含的基本方式
在开发网站功能时,经常会遇到需要重复使用某些代码的情况,比如页头、页脚或者数据库连接配置。PHP 提供了几个用来包含外部文件的语句:include、require、include_once 和 require_once。
最常用的两个是 include 和 require。它们的作用都是把另一个 PHP 文件的内容引入当前脚本中。区别在于处理错误的方式:如果被包含的文件丢失,include 会发出警告但继续执行后续代码,而 require 会直接终止脚本运行。
<?php
include 'header.php';
require 'config.php';
?>何时用 include,何时用 require
可以这样理解:对程序运行至关重要的文件,比如数据库配置或核心类库,应该用 require。万一文件不存在,宁愿整个页面报错也不能继续执行下去。而像页眉、侧边栏这类不影响主流程的模板文件,更适合用 include,即使加载失败,用户至少还能看到部分内容。
避免重复包含的小技巧
当多个文件互相引用时,很容易不小心把同一个文件包含两次。这时候可以用 _once 版本的语句。比如 include_once 会在当前脚本生命周期内确保某个文件只被加载一次。
<?php
include_once 'functions.php';
require_once 'class.user.php';
?>虽然多加个 _once 看起来更安全,但它比普通 include 稍微慢一点,因为 PHP 要记录哪些文件已经加载过。所以在明确不会重复的情况下,直接用 include 或 require 就行。
动态包含需谨慎
有些开发者为了灵活,会根据用户传参决定包含哪个文件。例如:
<?php
$page = $_GET['page'];
include $page . '.php';
?>这种写法看似方便,实则危险。攻击者只要传入恶意路径,就可能读取服务器上的敏感文件,甚至执行任意代码。这就是典型的“本地文件包含漏洞”(LFI)。正确的做法是限定允许的值:
<?php
$allowed = ['home', 'about', 'contact'];
$page = $_GET['page'] ?? 'home';
if (in_array($page, $allowed)) {
include $page . '.php';
} else {
include '404.php';
}
?>通过白名单机制,既能保持灵活性,又能堵住安全隐患。
实际应用场景举例
假设你在做一个小型企业站,首页、关于我们、联系我们三个页面都有相同的导航栏和底部信息。可以把导航部分单独存为 nav.php,底部存为 footer.php。每个页面开头统一 include 这两个文件,修改菜单时只需改一个地方,所有页面自动同步更新。
再比如,你有一组工具函数,像格式化时间、发送邮件、生成随机字符串等,全都放在 helpers.php 里。每次写新脚本时 require_once 一下,就能直接调用这些函数,不用反复造轮子。