<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/language.control-structures.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'function.include.php',
    1 => 'include',
    2 => 'include',
  ),
  'up' => 
  array (
    0 => 'language.control-structures.php',
    1 => '流程控制',
  ),
  'prev' => 
  array (
    0 => 'function.require.php',
    1 => 'require',
  ),
  'next' => 
  array (
    0 => 'function.require-once.php',
    1 => 'require_once',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'language/control-structures/include.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="function.include" class="sect1">
 <h2 class="title">include</h2>
 <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p>
 <p class="simpara">
  <code class="literal">include</code> 表达式包含并运行指定文件。
 </p>
 <p class="simpara">
  以下文档也适用于 <span class="function"><a href="function.require.php" class="function">require</a></span>。
 </p>
 <p class="simpara">
  被包含文件先按参数给出的路径寻找，如果没有给出目录（只有文件名）时则按照
  <a href="ini.core.php#ini.include-path" class="link">include_path</a> 指定的目录寻找。如果在
  <a href="ini.core.php#ini.include-path" class="link">include_path</a> 下没找到该文件则
  <code class="literal">include</code> 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则
  <code class="literal">include</code> 结构会发出一条 <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> ；这一点和
  <span class="function"><a href="function.require.php" class="function">require</a></span> 不同，后者会发出一个 <strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong> 。
 </p>
 <p class="simpara">
  注意如果文件无法访问， <code class="literal">include</code> 和 <code class="literal">require</code>
  在分别发出最后的 <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> 或 <strong><code><a href="errorfunc.constants.php#constant.e-error">E_ERROR</a></code></strong>
  之前，都会发出额外一条 <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong>。
 </p>
 <p class="simpara">
  如果定义了路径——不管是绝对路径（在 Windows
  下以盘符或者 <code class="literal">\</code> 开头，在 Unix/Linux
  下以 <code class="literal">/</code> 开头）还是当前目录的相对路径（以
  <code class="literal">.</code> 或者 <code class="literal">..</code> 开头）——<a href="ini.core.php#ini.include-path" class="link">include_path</a> 都会被完全忽略。例如一个文件以
  <code class="literal">../</code> 开头，则解析器会在当前目录的父目录下寻找该文件。
 </p>
 <p class="simpara">
  有关 PHP 怎样处理包含文件和包含路径的更多信息参见
  <a href="ini.core.php#ini.include-path" class="link">include_path</a> 部分的文档。
 </p>
 <p class="simpara">
  当一个文件被包含时，其中所包含的代码继承了 include 所在行的<a href="language.variables.scope.php" class="link">变量范围</a>。从该处开始，调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中定义的函数和类都具有全局作用域。
 </p>
 <p class="para">
  <div class="example" id="example-1">
   <p><strong>示例 #1 基本的 <code class="literal">include</code> 例子</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">vars.php<br /><span style="color: #0000BB">&lt;?php<br /><br />$color </span><span style="color: #007700">= </span><span style="color: #DD0000">'green'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$fruit </span><span style="color: #007700">= </span><span style="color: #DD0000">'apple'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;<br /></span><br />test.php<br /><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"A </span><span style="color: #0000BB">$color</span><span style="color: #DD0000"> </span><span style="color: #0000BB">$fruit</span><span style="color: #DD0000">"</span><span style="color: #007700">; </span><span style="color: #FF8000">// A<br /><br /></span><span style="color: #007700">include </span><span style="color: #DD0000">'vars.php'</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #DD0000">"A </span><span style="color: #0000BB">$color</span><span style="color: #DD0000"> </span><span style="color: #0000BB">$fruit</span><span style="color: #DD0000">"</span><span style="color: #007700">; </span><span style="color: #FF8000">// A green apple<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="simpara">
  如果 include 出现于调用文件中的一个函数里，则被调用的文件中所包含的所有代码将表现得如同它们是在该函数内部定义的一样。所以它将遵循该函数的变量范围。此规则的一个例外是<a href="language.constants.magic.php" class="link">魔术常量</a>，它们是在发生包含之前就已被解析器处理的。
 </p>
 <p class="para">
  <div class="example" id="example-2">
   <p><strong>示例 #2 函数中的包含</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">function </span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />{<br />    global </span><span style="color: #0000BB">$color</span><span style="color: #007700">;<br /><br />    include </span><span style="color: #DD0000">'vars.php'</span><span style="color: #007700">;<br /><br />    echo </span><span style="color: #DD0000">"A </span><span style="color: #0000BB">$color</span><span style="color: #DD0000"> </span><span style="color: #0000BB">$fruit</span><span style="color: #DD0000">"</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">/* vars.php 在 foo() 范围内，所以 $fruit 在范围为不可用。 *<br /> * $color 能用是因为声明成全局变量。 */<br /><br /></span><span style="color: #0000BB">foo</span><span style="color: #007700">();                    </span><span style="color: #FF8000">// A green apple<br /></span><span style="color: #007700">echo </span><span style="color: #DD0000">"A </span><span style="color: #0000BB">$color</span><span style="color: #DD0000"> </span><span style="color: #0000BB">$fruit</span><span style="color: #DD0000">"</span><span style="color: #007700">;   </span><span style="color: #FF8000">// A green<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="simpara">
  当一个文件被包含时，语法解析器在目标文件的开头脱离 PHP 模式并进入 HTML
  模式，到文件结尾处恢复。由于此原因，目标文件中需要作为
  PHP 代码执行的任何代码都必须被包括在<a href="language.basic-syntax.phpmode.php" class="link">有效的 PHP 起始和结束标记</a>之中。
 </p>
 <p class="simpara">
  如果“<a href="filesystem.configuration.php#ini.allow-url-include" class="link">URL include wrappers</a>”在
  PHP 中被激活，可以用 URL（通过 HTTP
  或者其它支持的封装协议——见<a href="wrappers.php" class="xref">支持的协议和封装协议</a>）而不是本地文件来指定要被包含的文件。如果目标服务器将目标文件作为
  PHP 代码解释，则可以用适用于 HTTP GET 的 URL
  请求字符串来向被包括的文件传递变量。严格的说这和包含一个文件并继承父文件的变量空间并不是一回事；该脚本文件实际上已经在远程服务器上运行了，而本地脚本则包括了其结果。
 </p>
 <p class="para">
  <div class="example" id="example-3">
   <p><strong>示例 #3 通过 HTTP 进行的 <code class="literal">include</code></strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">/* 这个示例假定 www.example.com 配置为解析 .php 文件而不解析 .txt 文件。 *<br /> * 此外 “Works” 意味着 $foo 和 $bar 变量在包含的文件中是可用的。         */<br /><br />// 无法执行； file.txt 没有被 www.example.com 当作 PHP 处理。<br /></span><span style="color: #007700">include </span><span style="color: #DD0000">'http://www.example.com/file.txt?foo=1&amp;bar=2'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 无法执行；在本地文件系统中查找名为 “file.php?foo=1&amp;bar=2” 的文件。<br /></span><span style="color: #007700">include </span><span style="color: #DD0000">'file.php?foo=1&amp;bar=2'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">// 正常。<br /></span><span style="color: #007700">include </span><span style="color: #DD0000">'http://www.example.com/file.php?foo=1&amp;bar=2'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <div class="warning"><strong class="warning">警告</strong>
  <h1 class="title">安全警告</h1>
  <p class="para">
   远程文件可能会经远程服务器处理（根据文件后缀以及远程服务器是否在运行
   PHP 而定），但必须产生出一个合法的 PHP
   脚本，因为其将被本地服务器处理。如果来自远程服务器的文件应该在远端运行而只输出结果，那用
   <span class="function"><a href="function.readfile.php" class="function">readfile()</a></span>
   函数更好。另外还要格外小心以确保远程的脚本产生出合法并且是所需的代码。
  </p>
 </div>
 <p class="para">
  相关信息参见<a href="features.remote-files.php" class="link">使用远程文件</a>，<span class="function"><a href="function.fopen.php" class="function">fopen()</a></span>
  和 <span class="function"><a href="function.file.php" class="function">file()</a></span>。
 </p>
 <p class="simpara">
  处理返回值：在失败时 <code class="literal">include</code> 返回 <code class="literal">FALSE</code>
  并且发出警告。成功的包含则返回
  <code class="literal">1</code>，除非在包含文件中另外给出了返回值。可以在被包括的文件中使用 <span class="function"><a href="function.return.php" class="function">return</a></span>
  语句来终止该文件中程序的执行并返回调用它的脚本。同样也可以从被包含的文件中返回值。可以像普通函数一样获得
  include 调用的返回值。不过这在包含远程文件时却不行，除非远程文件的输出具有<a href="language.basic-syntax.phpmode.php" class="link">合法的 PHP
  开始和结束标记</a>（如同任何本地文件一样）。可以在标记内定义所需的变量，该变量在文件被包含的位置之后就可用了。
 </p>
 <p class="para">
  因为 <code class="literal">include</code> 是一个特殊的语言结构，其参数不需要括号。在比较其返回值时要注意。
  <div class="example" id="example-4">
   <p><strong>示例 #4 比较 include 的返回值</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// 不能运行，执行 include(('vars.php') == TRUE) 就等于执行 include('1')<br /></span><span style="color: #007700">if (include(</span><span style="color: #DD0000">'vars.php'</span><span style="color: #007700">) == </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'OK'</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">// 正常<br /></span><span style="color: #007700">if ((include </span><span style="color: #DD0000">'vars.php'</span><span style="color: #007700">) == </span><span style="color: #0000BB">TRUE</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">'OK'</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  <div class="example" id="example-5">
   <p><strong>示例 #5 <code class="literal">include</code> 和 <span class="function"><a href="function.return.php" class="function">return</a></span> 语句</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">return.php<br /><span style="color: #0000BB">&lt;?php<br /><br />$var </span><span style="color: #007700">= </span><span style="color: #DD0000">'PHP'</span><span style="color: #007700">;<br /><br />return </span><span style="color: #0000BB">$var</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;<br /></span><br />noreturn.php<br /><span style="color: #0000BB">&lt;?php<br /><br />$var </span><span style="color: #007700">= </span><span style="color: #DD0000">'PHP'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;<br /></span><br />testreturns.php<br /><span style="color: #0000BB">&lt;?php<br /><br />$foo </span><span style="color: #007700">= include </span><span style="color: #DD0000">'return.php'</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">$foo</span><span style="color: #007700">; </span><span style="color: #FF8000">// 打印 'PHP'<br /><br /></span><span style="color: #0000BB">$bar </span><span style="color: #007700">= include </span><span style="color: #DD0000">'noreturn.php'</span><span style="color: #007700">;<br /><br />echo </span><span style="color: #0000BB">$bar</span><span style="color: #007700">; </span><span style="color: #FF8000">// 打印 1<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="simpara">
  <code class="literal">$bar</code> 的值为 <code class="literal">1</code> 是因为 include
  成功运行了。注意以上例子中的区别。第一个在被包含的文件中用了
  <span class="function"><a href="function.return.php" class="function">return</a></span> 而另一个没有。如果文件不能被包含，则返回
  <strong><code><a href="reserved.constants.php#constant.false">false</a></code></strong> 并发出一个 <strong><code><a href="errorfunc.constants.php#constant.e-warning">E_WARNING</a></code></strong> 警告。
 </p>
 <p class="para">
  如果在包含文件中定义了函数，无论是在 <span class="function"><a href="function.return.php" class="function">return</a></span>
  之前还是之后，都可以独立在主文件（main）中使用。如果文件被包含两次，由于函数重复定义，PHP 会
  发出致命错误（fatal error）。推荐使用 <span class="function"><a href="function.include-once.php" class="function">include_once</a></span>
   而不是检查文件是否已包含并在包含文件中有条件返回。
 </p>
 <p class="simpara">
  另一个将 PHP 文件“包含”到一个变量中的方法是用<a href="ref.outcontrol.php" class="link">输出控制函数</a>结合
  <span class="function"><strong>include</strong></span> 来捕获其输出，例如：
 </p>
 <p class="para">
  <div class="example" id="example-6">
   <p><strong>示例 #6 使用输出缓冲来将 PHP 文件包含入一个字符串</strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$string </span><span style="color: #007700">= </span><span style="color: #0000BB">get_include_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'somefile.php'</span><span style="color: #007700">);<br /><br />function </span><span style="color: #0000BB">get_include_contents</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">) {<br />    if (</span><span style="color: #0000BB">is_file</span><span style="color: #007700">(</span><span style="color: #0000BB">$filename</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">ob_start</span><span style="color: #007700">();<br />        include </span><span style="color: #0000BB">$filename</span><span style="color: #007700">;<br />        </span><span style="color: #0000BB">$contents </span><span style="color: #007700">= </span><span style="color: #0000BB">ob_get_contents</span><span style="color: #007700">();<br />        </span><span style="color: #0000BB">ob_end_clean</span><span style="color: #007700">();<br />        return </span><span style="color: #0000BB">$contents</span><span style="color: #007700">;<br />    }<br />    return </span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  要在脚本中自动包含文件，参见 <var class="filename">php.ini</var> 中的
  <a href="ini.core.php#ini.auto-prepend-file" class="link">auto_prepend_file</a> 和
  <a href="ini.core.php#ini.auto-append-file" class="link">auto_append_file</a>
  配置选项。
 </p>
 <blockquote class="note"><p><strong class="note">注意</strong>: <span class="simpara">因为是语言构造器而不是函数，不能被
<a href="functions.variable-functions.php" class="link">可变函数</a> 或者
<a href="functions.arguments.php#functions.named-arguments" class="link">命名参数</a> 调用。
</span>
</p></blockquote>
 <p class="simpara">
  参见 <span class="function"><a href="function.require.php" class="function">require</a></span>、<span class="function"><a href="function.require-once.php" class="function">require_once</a></span>、<span class="function"><a href="function.include-once.php" class="function">include_once</a></span>、<span class="function"><a href="function.get-included-files.php" class="function">get_included_files()</a></span>、<span class="function"><a href="function.readfile.php" class="function">readfile()</a></span>、<span class="function"><a href="function.virtual.php" class="function">virtual()</a></span>、<a href="ini.core.php#ini.include-path" class="link">include_path</a>。
 </p>
</div><?php manual_footer($setup); ?>