PHP包含文件
PHP 包含文件
PHP include 和 require 語(yǔ)句
在 PHP 中,您可以在服務(wù)器執(zhí)行 PHP 文件之前在該文件中插入一個(gè)文件的內(nèi)容。
include 和 require 語(yǔ)句用于在執(zhí)行流中插入寫(xiě)在其他文件中的有用的代碼。
include 和 require 除了處理錯(cuò)誤的方式不同之外,在其他方面都是相同的:
· require 生成一個(gè)致命錯(cuò)誤(E_COMPILE_ERROR),在錯(cuò)誤發(fā)生后腳本會(huì)停止執(zhí)行。
· include 生成一個(gè)警告(E_WARNING),在錯(cuò)誤發(fā)生后腳本會(huì)繼續(xù)執(zhí)行。
因此,如果您希望繼續(xù)執(zhí)行,并向用戶輸出結(jié)果,即使包含文件已丟失,那么請(qǐng)使用 include。否則,在框架、CMS 或者復(fù)雜的 PHP 應(yīng)用程序編程中,請(qǐng)始終使用 require 向執(zhí)行流引用關(guān)鍵文件。這有助于提高應(yīng)用程序的安全性和完整性,在某個(gè)關(guān)鍵文件意外丟失的情況下。
包含文件省去了大量的工作。這意味著您可以為所有網(wǎng)頁(yè)創(chuàng)建標(biāo)準(zhǔn)頁(yè)頭、頁(yè)腳或者菜單文件。然后,在頁(yè)頭需要更新時(shí),您只需更新這個(gè)頁(yè)頭包含文件即可。
語(yǔ)法
include 'filename';
或者
require 'filename';
PHP include 和 require 語(yǔ)句
基礎(chǔ)實(shí)例
假設(shè)您有一個(gè)標(biāo)準(zhǔn)的頁(yè)頭文件,名為 "header.php"。如需在頁(yè)面中引用這個(gè)頁(yè)頭文件,請(qǐng)使用 include/require:
<html> <head> <meta charset="utf-8"> <title> php中文網(wǎng) (php.cn)</title> </head> <body> <?php include 'header.php'; ?> <h1>歡迎來(lái)到我的主頁(yè)!</h1> <p>一些文本。</p> </body> </html>
實(shí)例 2
假設(shè)我們有一個(gè)在所有頁(yè)面中使用的標(biāo)準(zhǔn)菜單文件。
"menu.php":
echo '<a href="/">主頁(yè)</a>
<a href="/html">HTML 教程</a>
<a href="/php">PHP 教程</a>';
網(wǎng)站中的所有頁(yè)面均應(yīng)引用該菜單文件。以下是具體的做法:
<html> <head> <meta charset="utf-8"> <title> php中文網(wǎng) (php.cn)</title> </head> <body> <div class="leftmenu"> <?php include 'menu.php'; ?> </div> <h1>歡迎來(lái)到我的主頁(yè)!</h1> <p>一些文本。</p> </body> </html>
實(shí)例 3
假設(shè)我們有一個(gè)定義變量的包含文件("vars.php"):
<?php $color='red'; $car='BMW'; ?>
這些變量可用在調(diào)用文件中:
<html> <head> <meta charset="utf-8"> <title>php中文網(wǎng) (php.cn)</title> </head> <body> <h1>歡迎來(lái)到我的主頁(yè)!</h1> <?php include 'vars.php'; echo "I have a $color $car"; // I have a red BMW ?> </body> </html>
include不存在的文件
include "foo.php";
上面的代碼包含了一個(gè)叫foo.php的文件,如果文件不存在,執(zhí)行后代碼會(huì)出現(xiàn)下面的警告信息
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
設(shè)置絕對(duì)路徑
include 'C:\wamp\www\foo.php';
上面設(shè)置了絕對(duì)路徑,成功避開(kāi)了include_path的檢索,但是如果代碼COPY給別人使用,而別人使用的是D:\wamp或者E:\www怎么辦?
如果當(dāng)前腳本是C:\wamp\www\index.php,那么在index.php可以改為
include __DIR__ . '\foo.php';
還是前面的練習(xí),把相對(duì)路徑改為絕對(duì)路徑
once
include和require分別對(duì)應(yīng)了一個(gè)once函數(shù):
include_once和require_once
函數(shù)的功能沒(méi)有什么差異,主要的作用是避免重復(fù)包含.
模板的分離
既然使用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
包含還可以玩出新的花樣,如果包含的是一個(gè)PHP文件,在被包含的文件中可以使用return語(yǔ)句
<?php <?php
$arr = include "return.php"; return ['a', 'b', 'c'];
print_r($arr); ?>
?>
PHP include_path
當(dāng)時(shí)候函數(shù)include(),require(),fopen_with_path()函數(shù)來(lái)尋找文件時(shí)候.在不設(shè)置include_path的情況下,這些函數(shù)打開(kāi)文件時(shí)候默認(rèn)的是以web根目錄去尋找.當(dāng)設(shè)置include_path以后,這些php函數(shù)就會(huì)先在指定的include_path目錄下面去搜索尋找
1.include_path的意義
當(dāng)時(shí)候函數(shù)include(),require(),fopen_with_path()函數(shù)來(lái)尋找文件時(shí)候.在不設(shè)置include_path的情況下,這些函數(shù)打開(kāi)文件時(shí)候默認(rèn)的是以web根目錄去尋找.當(dāng)設(shè)置include_path以后,這些php函數(shù)就會(huì)先在指定的include_path目錄下面去搜索尋找.
其原理和window系統(tǒng)的環(huán)境變量相似,在window運(yùn)行cmd命令的時(shí)候,輸入一些cmd的命令之后系統(tǒng)會(huì)在其設(shè)定的環(huán)境變量里面去搜索這些命令是否存在,存在就可以執(zhí)行.
2.include_path的設(shè)置
第一種方法:
修改php.ini文件中的include_path項(xiàng)。
include_path = .:/usr/local/lib/php:./include
第二個(gè)方法:
使用ini_set方法。
ini_set("include_path", ".:../:./include:../include");
3.注意
zendframework include 設(shè)置 index.php
復(fù)制代碼代碼如下:
set_include_path('.' .PATH_SEPARATOR.'../library/'
.PATH_SEPARATOR.'./application/models/'
.PATH_SEPARATOR.'./application/lib/'
.PATH_SEPARATOR.get_include_path());
PATH_SEPARATOR是一個(gè)常量,在Linux系統(tǒng)中是一個(gè)" : "號(hào),Windows上是一個(gè)";"號(hào)。
所以編寫(xiě)程序時(shí)最好用常量 PATH_SEPARATOR 代替,否則如果系統(tǒng)從linux移植到win系統(tǒng)或反過(guò)來(lái)移植會(huì)出錯(cuò)!
get_include_path取得當(dāng)前已有的環(huán)境變量,加上前面的設(shè)置就是新的系統(tǒng)include.