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