在 PHP 中,您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内容。
include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码。
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:
因 此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。
包含文件省去了大量的工作。这意味着您可以为所有网页创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。
假设您有一个标准的页头文件,名为 "header.php"。如需在页面中引用这个页头文件,请使用 include/require:
- <html>
- <body>
- <?php include 'header.php'; ?>
- <h1>Welcome to my home page!</h1>
- <p>Some text.</p>
- </body>
- </html>
假设我们有一个在所有页面中使用的标准菜单文件。
网站中的所有页面均应引用该菜单文件。以下是具体的做法:
- "menu.php":
- echo '<a href="/default.php">Home</a>
- <a href="/tutorials.php">Tutorials</a>
- <a href="/references.php">References</a>
- <a href="/examples.php">Examples</a>
- <a href="/about.php">About Us</a>
- <a href="/contact.php">Contact Us</a>';
- <html>
- <body>
- <div class="leftmenu">
- <?php include 'menu.php'; ?>
- </div>
- <h1>Welcome to my home page.</h1>
- <p>Some text.</p>
- </body>
- </html>
假设我们有一个定义变量的包含文件("vars.php"):
- <?php
- $color='red';
- $car='BMW';
- ?>
这些变量可用在调用文件中:
- <html>
- <body>
- <h1>Welcome to my home page.</h1>
- <?php include 'vars.php';
- echo "I have a $color $car"; // I have a red BMW
- ?>
- </body>
- </html>
扩展阅读:
require 和 include 几乎完全一样,除了处理失败的方式不同之外。 require 在出错时产生 E_COMPILE_ERROR
级别的错误。换句话说将导致脚本中止而 include 只产生警告( E_WARNING
),脚本会继续运行。
(PHP 4, PHP 5)
include 语句包含并运行指定文件。
以下文档也适用于 require 。
被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。
如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 / 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。
当一个文件被包含时,其中所包含的代码继承了 include 所在行的变量范围。从该处开始,调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。
Example #1 基本的 include 例子
- vars.php
- <?php
- $color = 'green' ;
- $fruit = 'apple' ;
- ?>
- test.php
- <?php
- echo "A $color $fruit " ; // A
- include 'vars.php' ;
- echo "A $color $fruit " ; // A green apple
- ?>
如果 include 出现于调用文件中的一个函数里,则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。