PHP 包含文件
PHP include 和 require 语句
在 PHP 中,您可以在服务器执行 PHP 文件之前在该文件中插入一个文件的内容。
include 和 require 语句用于在执行流中插入写在其他文件中的有用的代码。
include 和 require 除了处理错误的方式不同之外,在其他方面都是相同的:
· require 生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
· include 生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP 应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。
包含文件省去了大量的工作。这意味着您可以为所有网页创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。
语法
include 'filename';
或者
require 'filename';
PHP include 和 require 语句
基础实例
假设您有一个标准的页头文件,名为 "header.php"。如需在页面中引用这个页头文件,请使用 include/require:
<html> <head> <meta charset="utf-8"> <title> php中文网 (php.cn)</title> </head> <body> <?php include 'header.php'; ?> <h1>欢迎来到我的主页!</h1> <p>一些文本。</p> </body> </html>
实例 2
假设我们有一个在所有页面中使用的标准菜单文件。
"menu.php":
echo '<a href="/">主页</a>
<a href="/html">HTML 教程</a>
<a href="/php">PHP 教程</a>';
网站中的所有页面均应引用该菜单文件。以下是具体的做法:
<html> <head> <meta charset="utf-8"> <title> php中文网 (php.cn)</title> </head> <body> <div class="leftmenu"> <?php include 'menu.php'; ?> </div> <h1>欢迎来到我的主页!</h1> <p>一些文本。</p> </body> </html>
实例 3
假设我们有一个定义变量的包含文件("vars.php"):
<?php $color='red'; $car='BMW'; ?>
这些变量可用在调用文件中:
<html> <head> <meta charset="utf-8"> <title>php中文网 (php.cn)</title> </head> <body> <h1>欢迎来到我的主页!</h1> <?php include 'vars.php'; echo "I have a $color $car"; // I have a red BMW ?> </body> </html>
include不存在的文件
include "foo.php";
上面的代码包含了一个叫foo.php的文件,如果文件不存在,执行后代码会出现下面的警告信息
Warning: include(foo.php): failed to open stream: No such file or directory in /var/www/web/test.php on line 3
Warning: include(): Failed opening 'foo.php' for inclusion (include_path='.:/usr/local/php/lib/php') in /var/www/web/test.php on line 3
设置绝对路径
include 'C:wampwwwfoo.php';
上面设置了绝对路径,成功避开了include_path的检索,但是如果代码COPY给别人使用,而别人使用的是D:wamp或者E:www怎么办?
如果当前脚本是C:wampwwwindex.php,那么在index.php可以改为
include __DIR__ . 'foo.php';
还是前面的练习,把相对路径改为绝对路径
once
include和require分别对应了一个once函数:
include_once和require_once
函数的功能没有什么差异,主要的作用是避免重复包含.
模板的分离
既然使用include或者require包含其他的代码,那么我们也可以把代码分离到不同的文件中
<?php
$name = 'andy';
$age = 18;
?>
<h1><?=$name?> is <span><?=$age?></span> years old</h1>
<?php
$name = 'andy';
$age = 18;
require "template.html";
return
包含还可以玩出新的花样,如果包含的是一个PHP文件,在被包含的文件中可以使用return语句
<?php <?php
$arr = include "return.php"; return ['a', 'b', 'c'];
print_r($arr); ?>
?>
PHP include_path
当时候函数include(),require(),fopen_with_path()函数来寻找文件时候.在不设置include_path的情况下,这些函数打开文件时候默认的是以web根目录去寻找.当设置include_path以后,这些php函数就会先在指定的include_path目录下面去搜索寻找
1.include_path的意义
当时候函数include(),require(),fopen_with_path()函数来寻找文件时候.在不设置include_path的情况下,这些函数打开文件时候默认的是以web根目录去寻找.当设置include_path以后,这些php函数就会先在指定的include_path目录下面去搜索寻找.
其原理和window系统的环境变量相似,在window运行cmd命令的时候,输入一些cmd的命令之后系统会在其设定的环境变量里面去搜索这些命令是否存在,存在就可以执行.
2.include_path的设置
第一种方法:
修改php.ini文件中的include_path项。
include_path = .:/usr/local/lib/php:./include
第二个方法:
使用ini_set方法。
ini_set("include_path", ".:../:./include:../include");
3.注意
zendframework include 设置 index.php
复制代码代码如下:
set_include_path('.' .PATH_SEPARATOR.'../library/'
.PATH_SEPARATOR.'./application/models/'
.PATH_SEPARATOR.'./application/lib/'
.PATH_SEPARATOR.get_include_path());
PATH_SEPARATOR是一个常量,在Linux系统中是一个" : "号,Windows上是一个";"号。
所以编写程序时最好用常量 PATH_SEPARATOR 代替,否则如果系统从linux移植到win系统或反过来移植会出错!
get_include_path取得当前已有的环境变量,加上前面的设置就是新的系统include.