PHP 文件包含怎么用?

文章导读
Previous Quiz Next 在开发网站时,我们通常需要在多个地方重用相同的信息或代码。例如,我们可能希望所有页面都有相同的 header、footer 或菜单。PHP 允许我们使用文件包含,而不必多次编写相同的代码!
📋 目录
  1. PHP 中的文件包含类型
  2. include() Function
  3. require() 函数
  4. include() 和 require() 方法之间的区别
  5. include_once() 和 require_once() 函数
  6. 文件包含的安全风险
  7. 防止文件包含漏洞
A A

PHP - 文件包含



Previous
Quiz
Next

在开发网站时,我们通常需要在多个地方重用相同的信息或代码。例如,我们可能希望所有页面都有相同的 header、footer 或菜单。PHP 允许我们使用文件包含,而不必多次编写相同的代码!

文件包含可以节省时间,组织我们的代码,并允许我们进行简单的更改。当我们对一个文件进行更改时,所有包含该文件的其他文件都会随之更改。

PHP 中的文件包含类型

你可以在服务器执行 PHP 文件之前,将一个 PHP 文件的内容包含到另一个 PHP 文件中。有两个 PHP function 可以用来将一个 PHP 文件包含到另一个 PHP 文件中。

  • Include() Function

  • Require() Function

  • Include_once() and Require_once() Function

这是 PHP 的一个强项,它有助于创建可以在多个页面重用的 function、header、footer 或元素。这将帮助开发者轻松更改整个网站的布局,只需最少的努力。如果需要任何更改,只需更改包含的文件,而不必更改数千个文件。

include() Function

include() function 会将指定文件中的所有文本复制到使用 include function 的文件中。如果加载文件时出现任何问题,include() function 会生成一个警告,但脚本会继续执行。

Syntax

以下是 include function 的语法 −

include 'filename.php';

在这里,filename.php 是你想要包含的文件。它可以是相对路径或绝对路径。

Example

假设你想为你的网站创建一个通用菜单。然后创建一个名为 menu.php 的文件,内容如下。

<a href="https://www.example.com">Home</a> 
<a href="https://www.example.com">ebXML</a>   
<a href="https://www.example.com">AJAX</a>   
<a href="https://www.example.com">PERL</a> 

现在你可以创建任意数量的页面,并包含此文件来创建 header。例如,现在你的 test.php 文件可以有以下内容。

<?php <b>include("menu.php");</b> ?>
<p>This is an example to show how to include PHP file!</p>

Output

它将产生以下结果 −

Include

include() 方法的优势

在 PHP 中使用 include() 方法有几个优势 −

  • 添加文件允许你在其他页面重用相同的内容,而无需更改任何代码。

  • 你可以将网站的基本元素如 header、footer 和菜单添加到各种页面。

  • 如果包含的文件有错误,include() 只会显示警告消息,脚本会继续运行。

  • 如果你需要更改包含的文件(例如,更新 header 或 footer),只需更改一次,这些更改就会反映在所有使用它的页面上。

require() 函数

require() 函数会将指定文件中的所有文本复制到使用 include 函数的文件中。如果加载文件时出现任何问题,require() 函数会生成致命错误并停止脚本执行。

因此,require() 和 include() 之间没有区别,除了它们处理错误条件的方式不同。推荐使用 require() 函数代替 include(),因为如果文件缺失或名称错误,脚本不应继续执行。

语法

以下是 require 函数的语法 −

require 'filename.php';

这里,filename.php 是您想要 require 的文件。它可以是相对路径或绝对路径。

示例

您可以尝试使用上面的示例与 require() 函数,它会产生相同的结果。但如果您尝试以下两个示例,其中文件不存在,则会得到不同的结果。

<?php include("xxmenu.php"); ?>
<p>这是一个展示如何包含错误 PHP 文件的示例!</p>

输出

这将产生以下结果 −

This is an example to show how to include wrong PHP file!

现在让我们尝试使用 require() 函数的相同示例。

<?php <b>require("xxmenu.php");</b> ?>
<p>这是一个展示如何包含错误 PHP 文件的示例!</p>

这次文件执行会停止,什么都不会显示。

注意 − 您可能会收到普通的警告消息、致命错误消息,或者什么都没有。这取决于您的 PHP 服务器配置。

require() 方法的优势

在 PHP 中使用 require() 方法有很多优势 −

  • 如果所需文件对页面很重要(例如,数据库连接文件),require() 会确保如果找不到该文件,脚本停止并显示错误,从而防止页面以有限功能加载。

  • 该函数确保所有必要文件始终可用以正确执行。这对于网站正常运行所需的文件很有用。

  • 像 include() 一样,require() 允许您在多个页面中重用代码。

  • 使用 require(),您只需包含所需的代码一次,从而减少重复。

include() 和 require() 方法之间的区别

require 语句也用于在 PHP 代码中包含文件。然而,include 和 require 之间有一个重要的区别:如果使用 include 行包含文件但 PHP 找不到它,脚本会继续运行。

  • include() 函数在文件缺失时显示警告并继续执行。而 require() 方法在文件缺失时显示致命错误并停止执行。

  • include() 函数主要用于非关键文件,例如 header、footer。而 require() 用于重要文件,如数据库连接、配置。

  • include() 方法可以多次包含同一文件,除非使用 include_once()。而 require() 可以多次包含同一文件,除非使用 require_once()。

  • include() 即使文件不存在或缺失也会继续执行。而 require() 在文件缺失时停止脚本执行。

include_once() 和 require_once() 函数

这些函数在您需要确保文件只被包含一次时非常有用。

// config.php
<?php
   $database_host = 'localhost';
?>

// settings.php
<?php
   // 只包含一次 config.php   
   include_once 'config.php'; 

   // 即使多次调用也不会再次包含
   require_once 'config.php'; 
   echo "Database host is: $database_host";
?>

文件包含的安全风险

虽然文件包含可以使你的代码更容易处理,但它也可能带来安全风险,特别是如果用户可以控制包含哪些文件。这被称为 Local File Inclusion (LFI),攻击者可以利用它。

易受攻击的代码示例

在这种情况下,恶意用户可以通过更改 page 查询参数来访问服务器上的任何文件,这可能导致数据泄露或其他漏洞。以下是一个你应该避免在 PHP 应用中使用示例代码 −

<?php
   // 用户可以设置 page 参数
   $page = $_GET['page']; 

   // 这可能导致危险的包含
   include($page); 
?>

防止文件包含漏洞

在使用 include 语句之前,始终检查并清理任何用户输入。

<?php
   $allowed_pages = ['home.php', 'about.php', 'contact.php'];
   if (in_array($page, $allowed_pages)) {
      include($page);
   } else {
      echo "Page not found.";
   }
?>

与其包含用户生成的内容的文件,你可以考虑使用预定义路径。如果你不需要远程文件包含,可以在你的 php.ini 文件中禁用它。

allow_url_include = Off