phpinclude文件
㈠ php裡面的include是什麼意思連接資料庫的時候才用嗎後面括弧裡面的以.php為結尾的文件
$usernc是獲取到的用戶輸入信息($_POST['usernc']),trim()去除字元串首尾的無意義的字元(空格、製表符(就是鍵盤上的Tab鍵)、換行符" "(unix及類unix系統的換行符)、回車符" "(又稱軟換行符,Mac OS X的換行符))。(另外說一下,windows的換行符是" ",也支持" ",但不支持單獨的" ")
另外,少用雙引號,單引號更快。
雙引號支持在字元串中嵌入變數,也支持更多的字元轉義("
","
"之類的必須用雙引號)。
例如:
<?php
$b='b';
$str="a{$b}c";//相當於$str='a'.$b.'c';但雙引號更慢
?>
單引號僅支持很少的轉義序列。事實上,它只支持
'''//這是一個單引號字元,相當於"'"
和
'\'//這是一個反斜線
不過,單引號的速度要快得多。
include可以引入一個PHP文件或HTML文件。
如果引入php文件,那麼php會先執行被include的文件中的代碼,再執行後面的代碼。
如果引入html文件,那麼php會直接輸出這個文件。
在本例中,連接資料庫的代碼被放在了conn文件夾下的conn.php中。
所以,在這里包含此文件,就可以連接到資料庫。
參見PHP手冊:include 和 include_once:
http://php.net/manual/zh/function.include.php
http://php.net/manual/zh/function.include-once.php
舉個例子:
inc.php
<?php
echo'a';
?>
b.php
<?php
echo'm';
//include允許相對路徑與絕對路徑,這里是相對路徑
//PHP手冊推薦在使用include和require時不使用括弧
//因為它們是語法結構(就像if,echo之類的),而不是函數
include'inc.php';
echo'n';
?>
你運行b.php,將會輸出:
man
加不加_once都可以,不過建議你不要加,這樣運行起來會很慢(慢了好幾倍)。
include_once主要是為了防止某些函數被重復定義(多次包含)而報錯。
這應該用合理的代碼規劃來避免,而不是使用_once後綴。
雖然性能問題在小程序中不會得到太大體現,但是在一些復雜的項目中,差勁的代碼導致的性能問題一定會讓你抓狂。
你結合microtime()函數來測試一下,就可以看出來了。
代碼如下:
<?php
//獲取代碼運行的時間
$t=microtime(TRUE);
//這里放上你要測試的代碼
//輸出運行時間,代碼以毫秒為單位
//直接echo很可能會輸出為科學計數法,看起來不直觀
printf('%f',microtime(TRUE)-$t);
unset($t);//變數用完就注銷是個好習慣
?>
另外,如果文件不存在,include會產生警告。
還有一個函數require,與include類似,不過如果文件不存在會產生錯誤。require比include快一些,因為include有返回值,而require沒有。同樣,最好不要使用require_once。
參見PHP手冊:require 和 require_once:
http://php.net/manual/zh/function.require.php
http://php.net/manual/zh/function.require-once.php
另外,我建議您不要再看這本書了,這本書的代碼就好像是一個初學者寫的一樣,根本不符合規范,而且會有很大的性能問題。
例如:
(1)數組鍵名沒有加上引號。php會首先查找是否存在以這個鍵名為名稱的常量。如果存在,這段代碼就很可能會出問題。如果不存在,php沒有辦法,只能返回這個字元串。在這查找的過程中,就會造成相當大的性能損失。
(2)大量使用雙引號,而且還沒有正確利用雙引號的特性。
(3)沒有過濾用戶輸入,存在sql注入漏洞。應該把單引號轉義。
應該改為:
//適用於大多數資料庫,不適用於Sybase
$usernc=addslashes(trim($_POST['usernc']));
//或者
$usernc=mysql_real_escape_string(trim($_POST['usernc']));//僅適用於MySQL
(4)既然有了$_POST['usernc'],為什麼還要再用$usernc呢?難道就為了少輸幾個字元?浪費伺服器內存資源。伺服器內存資源是非常寶貴的,不應該這樣浪費。每執行一次PHP程序都會創建一個新的操作系統線程,並分配2MB的配套內存。使用不當,可能會造成內存泄露(Out of Memory)!如果是在大型網站上,更應注意此類問題。
(5)既然只是判斷一條數據是否存在(用戶名是否存在),就應該在SQL語句的末尾加上
LIMIT1
否則,會嚴重影響MySQL性能。不加的話,MySQL找到一條數據後,還會繼續查找符合條件的數據(即使並不存在)。如果這個數據表的數據量非常大,那浪費的時間是相當恐怖的!
而加上後,MySQL 搜索到一條數據後就會停止,不會浪費時間。
(6)依賴JavaScript中的history.back()是不對的。如果用戶沒有保存歷史記錄(一些瀏覽器有無痕瀏覽模式,例如Firefox,Chrome等),或者用戶剛好將歷史記錄清除了,這條語句就會失效。最好的辦法是新建一個session變數,例如$_SESSION['history'],將歷史記錄保存在裡面就可以了。再說本例中,程序是應該知道應該跳轉到哪個頁面的(不是有getuserinfo.php嗎?)。
應該直接302重定向。可以使用下面的代碼:
//把「網址」替換為相應的URL就行了
//注意:是從http://一直到URL最後
header('Location:網址');
注意,這之前不能有輸出。或者,在程序最開始的php文件上方加上:
ob_start();
這樣就可以了。
以上這些問題都是應該避免的。
㈡ PHP里include的文件能跟參數嗎
php的include可以載入一個外部php文件,其參數是一個文件名,既然是文件名,就不能帶參數了。
例如:
include "http://localhost/aaa.php?id=1";//正確
include "aaa.php?id=1";//錯誤
其實include本義就只是用來載入一個外部文件到當前文件中來的,並不解釋其中的代碼。因此帶參數看上去似乎沒有意義。
㈢ php裡面require和include的區別
require 的使用方法如 require("MyRequireFile.php"); 。這個函數通常放在 PHP 程序的最前面,PHP 程序在執行前,就會先讀入 require 所指定引入的文件,使它變成 PHP 程序網頁的一部份。常用的函數,亦可以這個方法將它引入網頁中。
include 使用方法如 include("MyIncludeFile.php"); 。這個函數一般是放在流程式控制制的處理部分中。PHP 程序網頁在讀到 include 的文件時,才將它讀進來。這種方式,可以把程序執行時的流程簡單化。
他們兩個的用途是完全一樣的,不一定非得哪個放在最前面哪個放在中間。他們最根本的區別在於錯誤處理的方式不一樣。
require一個文件存在錯誤的話,那麼程序就會中斷執行了,並顯示致命錯誤
include一個文件存在錯誤的話,那麼程序不會中端,而是繼續執行,並顯示一個警告錯誤。
1. include有返回值,而require沒有。
2. include()包括並運行指定文件 在處理失敗時include() 產生一個警告,被導入的程序代碼都會被執行,而且這些程序在執行的時候會擁有和源文件中呼叫到include()語句的位置相同的變數范圍。你可以導入同一個伺服器中的靜態頁面。
3. require()會將目標文件的內容讀入,並且把自己本身代換成這些讀入的內容 在處理失敗時require() 則導致一個致命錯。
這個讀入並且代換的動作是在PHP引擎編譯你的程序代碼的時候發生的,而不是發生在PHP引擎開始執行編譯好的程序代碼的時候(PHP 3.0引擎的工作方式是編譯一行執行一行,但是到了PHP 4.0以後就有所改變了,PHP 4.0是先把整個程序代碼全部編譯完成後,再將這些編譯好的程序代碼一次執行完畢,在編譯的過程中不會執行任何程序代碼)。require()通常來導入靜態的內容,而include()則適合用導入動態的程序代碼。
4. require是無條件包含也就是如果一個流程里加入require,無論條件成立與否都會先執行require。
5. require通常放在PHP程序的最前面,PHP程序在執行前,就會先讀入require所指定引入的文件,使它變成PHP程序網頁的一部份。常用的函數,亦可以這個方法將它引入網頁中。
6. include一般是放在流程式控制制的處理部分中PHP程序網頁在讀到include的文件時,才將它讀進來。這種方式可以把程序執行時的流程簡單化。
㈣ 一個PHP文件能多次使用include包涵其他PHP文件嗎
可以包含多次,需要注意的是當一個文件被包含時,其中所包含的代碼繼承了 include 所在行的變數范圍。從該處開始,調用文件在該行處可用的任何變數在被調用的文件中也都可用。不過所有在包含文件中定義的函數和類都具有全局作用域。
另外include是一個特殊的語言結構,其參數不需要括弧。在比較其返回值時要注意
如果在包含文件中定義有函數,這些函數不管是在 return 之前還是之後定義的,都可以獨立在主文件中使用。如果文件被包含兩次,PHP 5 發出致命錯誤因為函數已經被定義,但是 PHP 4 不會對在 return 之後定義的函數報錯。推薦使用 include_once 而不是檢查文件是否已包含並在包含文件中有條件返回。
說明:
include語句包含並運行指定文件。
㈤ php include引入文件問題
include函數是引入文件
命名空間解決的是同一腳本下相同函數重名,不同的命名空間命名,相當於處於不同的模塊,解決同一腳本下php函數重名的致命錯誤
1. 你之前include引入的時候你的2個文件的相同函數處於不同命名空間下,就算在同一腳本也不會報錯
2. 看你最後段代碼,你連續定義了2個命名空間,第1個就沒用了,相當於你在namespace Foo\Bar\subnamespace;命名空間下寫了之後的代碼,但是之後的代碼處於namespace Foo\Bar\subnamespace;下但是出現了2個相同名的函數,自然報錯
3. 你要區分命名空間和include就要先懂得他們代表的意思,從你的問題可以看出你不太懂命名空間,建議你網路或者看下php手冊上的命名空間,自己捉摸比別人教理解得更加深刻
4. 建議你把namespace Foo\Bar\subnamespace;寫到const FOO = 2;上面
㈥ 淺談php中include文件變數作用域
本文給大家總結了php中include文件時的幾種情況下的作用域,十分的簡單實用,希望對大家熟悉include的使用能夠有所幫助。
在php中我們有時候需要include一個文件。比如我前段時間在寫一個框架的時候,打算用原生的php作為模板,然後寫一個display方法引入模板文件就可以,但是這只是我的意淫而已。
寫完後發現在模板中所有的變數都提示未定義。通過各種研究和查找資料,總結了include文件時的幾種情況下的作用域。
第一種情況:A文件include
B文件,在B文件中可以調用A中的變數。
A文件代碼:
1
2
3
4
?php
$aaa
=
'123';
include
B.php;
B文件代碼:
1
2
3
?php
echo
$aaa;
可以正常輸出內容。
第二種情況:A文件include
B文件,然後在A文件中可以調用B文件的變數。
A文件代碼:
1
2
3
4
5
?php
include
B.php;
echo
$fff;
B文件代碼:
1
2
3
?php
$fff
=
'i
am
f';
這個時候是可以正常輸出內容的。
第三種情況:A文件的某個類的某個方法中調用B文件,然後在B文件中可以調用該方法中的變數。
A文件代碼:
1
2
3
4
5
6
7
8
9
10
11
?php
class
test{
public
function
show(){
$bbb
=
'abc';
include
B.php;
}
}
$t
=
new
test;
$t-show();
B文件的代碼:
1
2
3
?php
echo
$bbb;
這個時候是可以正常輸出內容的。
第四種情況:A文件通過定義的一個函數引入B文件,在B文件中無法使用A中的變數,但是可以使用A文件中調用函數(display)中的變數。
A文件代碼:
1
2
3
4
5
6
7
8
9
?php
$aaa
=
'123';
function
display($file){
$bbb=
'asdasdas';
include
$file;
}
display(B.php);
B文件代碼:
1
2
3
?php
echo
$aaa;
echo
$bbb;
運行後$aaa提示未定義,$bbb可以正常輸出。
所以我開始准本用一個display方法來引入模板是不可行的。根據方面的三種情況,最後我選擇了寫一個類來導入模板文件。目前ThinkPHP和Smarty也都是用類來引入模板文件的。文中不足之處歡迎指正。
以上所述就是本文的全部內容了,希望大家能夠喜歡。