PHP
PHP基礎教程
語法
-
PHP 指令碼以<? php 開頭 ,以?>結尾
-
php語句以 ;結尾,php程式碼塊的關閉標籤也會自動標名 ;
-
php支援的三種註釋
//單行註釋
單行註釋
/*
多行註釋
*/
-
php中,所有使用者定義的函式、類和關鍵詞都對大小寫不敏感;
但所有變數都對大小寫敏感
變數
變數規則:
- 以$符號開頭,後跟變數名稱
- 變數名稱必須以字母或下劃線開頭,不能以數字開頭
- 變數名稱只能包含(A-Z,0-9,_)
- 變數名稱對大小寫敏感
三種不同的變數作用域:
- local(區域性)
- global(全域性)
- static(靜態)
global 和 local
函式之外宣告的變數擁有 global 作用域,只能在函式以外進行訪問。
函式內部宣告的變數擁有 local 作用域,只能在函式內部進行訪問。
在函式內部變數前使用 global,就可以在內部訪問變數
static靜態變數
通常,當函式完成/執行後,會刪除所有變數;當需要不刪除某個區域性變數,可以使用static。每當函式被呼叫時,static變數所儲存的資訊都是函式最後一次被呼叫時所包含的資訊。
輸出方法
PHP echo 和 print 語句
- print 只能輸出一個字串,並始終返回1
- echo 能夠輸入一個以上的字串
使用echo:
使用print:
資料型別
- 字串是字元序列,可以是引號內的任何文字
- 整數(int) 不能包括逗號或空格,可以用十進位制,八進位制(字首為0),十六進位制(字首為0x)三種格式規定
- 浮點數(float)是有小數點或指數形式的數字
- 邏輯 (bool) 是 true 或 false
- 陣列(array)在一個變數中儲存多個值
- 物件(class)是儲存資料和有關如何處理資料資訊的資料型別
- NULL值表示變數無值或不存在值
字串函式
-
strlen() 函式返回字串的長度
-
str_word_count() 函式對字串中的單詞進行計數
-
strrev() 函式反轉字串
-
strpos() 函式用於檢索字串內指定的字元或文字
[字串首字元位置是0]
-
str_replace() 函式用於替換字串中的文字
常量
設定常量,使用define()函式:
- 第一個引數定義常量的名稱
- 第二個引數定義常量的值
- 第三個規定常量名是否對大小寫不敏感,預設是 false
運算子
- 算數運算子:+ - * / %
例:$x % $y $x 除 $y 的餘數
-
賦值運算子:
x=y 等同於 x=y
x+=y 等同於 x=x+y
x-=y 等同於 x=x-y
x*=y 等同於 x=x * y
x/=y 等同於 x=x/y
x%=y 等同於 x=x%y
-
字串運算子:
串接 .
串接賦值 .=
-
遞增/遞減運算子
++$x 前遞增 $x++ 後遞增
--$x 前遞減 $x-- 後遞減
-
比較運算子
== 等於 $x == $y
=== 全等(完全相同) $x === $y
!= 不等於 $x != $y
<> 不等於 $x <> $y
!== 不全等(完全不同) $x !== $y,> 大於 $x > $y
< 小於 $x < $y
= 大於或等於 $x >= $y
<= 小於或等於 $x <= $y -
邏輯運算子
and、 && 與
or 、|| 或(至少一個)
xor 異或(有且僅有一個)
! 非
-
陣列運算子
+,聯合 $x + $y
==,相等 $x == $y
===,全等 $x === $y
!=、<>,不相等 $x != $y、$x <> $y
!,不全等 $x ! $y
if...else...elseif
-
if 語句 - 如果指定條件為真,則執行程式碼
-
if...else 語句 - 如果條件為 true,則執行程式碼;如果條件為 false,則執行另一端程式碼
-
if...elseif....else 語句 - 根據兩個以上的條件執行不同的程式碼塊
if (條件) { 條件為 true 時執行的程式碼; } elseif (條件) { 條件為 true 時執行的程式碼; } else { 條件為 false 時執行的程式碼; }
which
- switch 語句 - 選擇多個程式碼塊之一來執行
- 對錶達式(通常是變數)進行一次計算
- 把表示式的值與結構中 case 的值進行比較
- 如果存在匹配,則執行與 case 關聯的程式碼
- 程式碼執行後,break 語句阻止程式碼跳入下一個 case 中繼續執行
- 如果沒有 case 為真,則使用 default 語句
while 迴圈
-
while - 只要指定條件為真,則迴圈程式碼塊
while (條件為真) { 要執行的程式碼; }
-
do...while - 先執行一次程式碼塊,然後只要指定條件為真則重複迴圈
do { 要執行的程式碼; } while (條件為真);
For 迴圈
-
for 迴圈執行程式碼塊指定的次數
for (init counter; test counter; increment counter) { code to be executed; }
- init counter:初始化迴圈計數器的值
- test counter:: 評估每個迴圈迭代。如果值為 TRUE,繼續迴圈。如果它的值為 FALSE,迴圈結束。
- increment counter:增加迴圈計數器的值
-
foreach 迴圈只適用於陣列,並用於遍歷陣列中的每個鍵/值對
foreach ($array as $value) { code to be executed; }
函式
使用者的函式宣告以'function'開頭
function functionName(){
被執行的程式碼;
}
呼叫該函式時,使用'functionName()'即可;
當函式中有引數時,呼叫函式時,同時要傳遞資訊
多個引數用,隔開
<?php
function familyName($fname,$year) {
echo "$fname Zhang. Born in $year <br>";
}
familyName("Li","1975");
familyName("Hong","1978");
familyName("Tao","1983");
?>
陣列
陣列能夠在單獨的變數名中儲存一個或多個值
array();
三種陣列型別:
索引陣列,關聯陣列,多維陣列
count()
函式用於獲取陣列的元素數
索引陣列
索引時自動分配的,從0開始
如需遍歷並輸出索引陣列的所有值,可以使用for迴圈:
關聯陣列
$id=array('aaa'=>'1','bbb'=>'2','ccc'=>'3');
$id['aaa']=1;
$id['bbb']=2;
$id['ccc']=3;
如需遍歷並輸出關聯陣列的所有值,可以使用foreach迴圈:
陣列排序
- sort() - 以升序對陣列排序
- rsort() - 以降序對陣列排序
- asort() - 根據值,以升序對關聯陣列進行排序
- ksort() - 根據鍵,以升序對關聯陣列進行排序
- arsort() - 根據值,以降序對關聯陣列進行排序
- krsort() - 根據鍵,以降序對關聯陣列進行排序
sort舉例:
asort舉例:
超全域性
超全域性變數是在全部作用域中始終可用的內建變數
- $GLOBALS 全域性變數
- $_SERVER 儲存關於報頭、路徑和指令碼位置的資訊
- $_REQUEST 收集 HTML 表單提交的資料
- $_POST 收集 HTML 表單提交的資料,也常用於傳遞變數
- $_GET 收集HTML 表單提交的資料,也可收集 URL 中傳送的資料
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
PHP表單
表單處理
單選
- isset 判斷變數或元素是否存在
- action="" 表示提交到當前指令碼
下拉選單單選
- 透過select的name屬性獲取下拉選單的值
checkbox 核取方塊
- checkbox 核取方塊可以選擇多個值
- 透過name="q[]"以陣列的方式獲取
下拉選單多選
- 下拉選單是多選的( multiple="multiple")
$GET 和 $POST
GET 方法從表單傳送的資訊對任何人都是可見的(所有變數名和值都顯示在 URL 中),GET 對所傳送資訊的數量也有限制,不適合傳送敏感資訊和密碼;
透過 POST 方法從表單傳送的資訊對其他人是不可見的(所有名稱/值會被嵌入 HTTP 請求的主體中),並且對所傳送資訊的數量也無限制,由於變數未顯示在 URL 中,無法將頁面新增到書籤
表單元素
-
< form>在html 中是表單的意思,是一個為使用者輸入建立HTML表單的標籤
action:表示當前表單中的內容提交給哪個頁面進行處理
method:表示當前表單提交的方式,常見的有get和post方式,預設是get提交
-
輸入元素input
type="text" 單行文字輸入框
type="password" 密碼輸入框
type="checkbox" 核取方塊
type="radio" 單選框
type="file" 檔案域
type="submit" 將表單裡的資訊提交給表單屬性action所指向的檔案
type="reset" 將表單裡的資訊清空,重新填寫
type="image" 圖片提交按鈕
type="button" 按鈕
type="hidden" 隱藏域
-
select和option
用來實現下拉選單
<select name=""><option value="">內容</option> <option value="">內容</option> <option value="">內容</option></select>
預設情況下,提交時,它將option裡面的內容作為提交的內容,但是通常會給option設定一個value屬性,屬性值我們通常用數字
-
textarea
定義多行文字輸入控制元件。
元素通常用在表單中,用於收集使用者的輸入,如評論或評論
文字區域可以容納無限數量的字元,並且文字以等寬字型呈現。
文字區域的大小由 cols 和 rows 屬性(或使用 CSS)規定
也可以設定 placeholder 屬性來實現佔位符的效果
提交表單後需要 name 屬性來引用表單資料(如果省略 name 屬性,則不會提交文字區域的資料)
需要 id 屬性將文字區域與標籤(label)相關聯
<textarea cols="30" rows="10"></textarea>
表單的HTML程式碼:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
$_SERVER["PHP_SELF"] 是一種超全域性變數,它返回當前執行指令碼的檔名$_SERVER["PHP_SELF"] 將表單資料傳送到頁面本身
htmlspecialchars() 函式把特殊字元轉換為 HTML 實體,能夠避免 $_SERVER["PHP_SELF"] 被利用
表單驗證
- 透過 PHP trim() 函式去除使用者輸入資料中不必要的字元(多餘的空格、製表符、換行)
- 透過 PHP stripslashes() 函式刪除使用者輸入資料中的反斜槓(\)
- 透過 test_input() 函式檢查每個 $_POST 變數
<?php
// 定義變數並設定為空值
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
$_SERVER["REQUEST_METHOD"]是訪問頁面使用的請求方法
則指令碼開頭是在檢查表單是否用 $_SERVER["REQUEST_METHOD"] 進行提交。如果 REQUEST_METHOD 是 POST,那麼表單已被提交 - 並且應該對其進行驗證。如果未提交,則跳過驗證並顯示一個空白表單
表單必填
<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
<?php
// 定義變數並設定為空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "姓名是必填的";
} else {
$name = test_input($_POST["name"]);
}
if (empty($_POST["email"])) {
$emailErr = "電郵是必填的";
} else {
$email = test_input($_POST["email"]);
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
}
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
if (empty($_POST["gender"])) {
$genderErr = "性別是必選的";
} else {
$gender = test_input($_POST["gender"]);
}
}
function test_input($data) {
$data = trim($data);// 去除輸入中的空格
$data = stripslashes($data);// 去除輸入中的反斜槓
$data = htmlspecialchars($data);// 轉義特殊字元
return $data;
}
?>
<h2>PHP 驗證例項</h2>
<p><span class="error">* 必需的欄位</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
姓名:<input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br>
電郵:<input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br>
網址:<input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br>
評論:<textarea name="comment" rows="5" cols="40"></textarea>
<br>
性別:<input type="radio" name="gender">女性
<input type="radio" name="gende" >男性
<span class="error">*<?php echo $genderErr;?></span>
<br>
<input type="submit" value="提交">
- .error
是一個CSS規則,它將應用於具有 "error" 類的HTML元素,將這個類的顏色設定為紅色
-
開始前先定義變數並設定為空值
-
$_SERVER["REQUEST_METHOD"] == "POST" 表示當前HTTP請求的方法是POST
-
PHP empty() 函式檢查$POST變數是否為空
-
function test_input($data) 是一個使用者自定義的函式,用於過濾和驗證使用者輸入的資料,以防止潛在的SQL隱碼攻擊或其他安全漏洞
-
函式引數和返回值
引數:$data,表示使用者輸入的資料。
返回值:處理後的資料,已去除空格、反斜槓,並轉義了特殊字元。 -
action="< ?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" 這段程式碼的作用是將表單提交的資料傳送到當前頁面本身,而不是跳轉到另一個頁面
-
< span class="error">
span標籤在HTML中用於對內聯元素進行分組,但它本身不提供視覺上的改變,可以用於將內容與其他元素分開,從而允許使用者僅對所選文字進行更改;
class屬性可以用於應用CSS樣式,如顏色、字型大小等
驗證名字、電郵和 URL
- preg_match() 函式檢索字串的模式
驗證名字
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "只允許字母和空格!";
}
驗證 E-mail
$email = test_input($_POST["email"]);
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
$emailErr = "無效的 email 格式!";
}
驗證 URL
$website = test_input($_POST["website"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%
=~_|]/i",$website)) {
$websiteErr = "無效的 URL";
}
PHP高階教程
PHP多維陣列
-
二維陣列是陣列的陣列,三維陣列是陣列的陣列的陣列
-
陣列的維度指示您需要選擇元素的索引數
對於二維陣列,需要兩個索引來選取元素
在For迴圈中使用另一個For迴圈,來獲得陣列中的元素
PHP日期和時間
PHP date() 函式用於對日期或時間進行格式化
date(format,timestamp)
關於日期的字元:
- d-表示月裡的某天
- m-表示月
- Y-表示年
- 1 - 表示周裡的某天
關於時間的字元:
- h-帶有首位零的12小時小時格式
- i-帶有首位零的分鐘
- s-帶有首位零的秒
- a-小寫的午前和午後
時區設定:
eg. date_default_timezone_set("Asia/Beijing")
mktime()建立日期:
mktime(hour,minute,second,month,day,year)
strtotime()用字串來建立日期:
strtotime(time,now)
輸出最近三週中週一的日期:
輸出12月23日之前的天數:
- ceil 向上取整
- time() 用於獲取當前的系統時間,該函式返回自Unix紀元
- /60/60/24 時間單位的換算,將秒換算成天
Include 檔案
透過 include 或 require 語句,可以將 PHP 檔案的內容插入另一個 PHP 檔案
include 'filename';
require 'filename'
include 與 require 的區別:
如果用 include 語句引用某個檔案並且 PHP 無法找到它,指令碼會繼續執行;
如果使用 require 語句,echo 語句不會繼續執行,在 require 語句返回嚴重錯誤之後指令碼就會終止執行
當檔案被應用程式請求時,使用 require;
當檔案不是必需的,且應用程式在檔案未找到時應該繼續執行時,使用 include
檔案處理
開啟檔案 fopen()
fopen() 的第一個引數包含被開啟的檔名,第二個引數規定開啟檔案的模式
讀取檔案 fread()
第一個引數包含待讀取檔案的檔名,第二個引數規定待讀取的最大位元組數
fread($myfile,filesize("file.txt"))
( 把file.txt檔案讀至結尾 )
關閉檔案 fclose()
fclose() 函式用於關閉開啟的檔案
<?php
$myfile = fopen("file.txt" ,"r");
fclose($myfile);
?>
讀取單行檔案 fgets()
fgets() 函式用於從檔案讀取單行
<?php
$myfile = fopen("file.txt","r") or die ("Unable to open file!")
echo fgets($myfile);
fclose($myfile);
?>
(輸出"file.txt"檔案的首行)
呼叫 fgets() 函式之後,檔案指標會移動到下一行
檢查 End-Of-File feof()
feof() 對於遍歷未知長度的資料很有用,檢查是否已到達檔案末尾
在 w 、a 和 x 模式下,無法讀取開啟的檔案
$file = fopen("test.txt", "r");
while (!feof($file)) {
$data = fgets($file);
echo $data;
}
fclose($file);
讀取單字元 fgetc()
fgetc() 函式用於從檔案中逐字元地讀取檔案;
在呼叫該函式之後,檔案指標會移動到下一個字元
<?php
$file=fopen("test.txt","r") or exit("無法開啟檔案!");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>
建立檔案 fopen()
fopen() 函式也用於建立檔案,如果用 fopen() 開啟並不存在的檔案,此函式會建立檔案,假定檔案被開啟為寫入(w)或增加(a)
$myfile = fopen("testfile.txt", "w")
試圖執行這段程式碼時發生錯誤,檢查是否有向硬碟寫入資訊的 PHP 檔案訪問許可權
寫入檔案 fwrite()
-
fwrite() 函式用於寫入檔案
-
fwrite() 的第一個引數包含要寫入的檔案的檔名,第二個引數是被寫的字串
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Bill Gates\n";
fwrite($myfile, $txt);
$txt = "Steve Jobs\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
PHP 覆蓋(Overwriting)
如果現在 "newfile.txt" 包含了一些資料,可以展示在寫入已有檔案時發生的的事情。所有已存在的資料會被擦除並以一個新檔案開始。
檔案上傳
建立一個檔案上傳表單
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
-
< form>標籤的 enctype 屬性規定了在提交表單時要使用哪種內容型別在表單需要二進位制資料時,比如檔案內容,使用 "multipart/form-data"
-
< label>標籤用於定義表單控制元件的標註,透過點選label中的文字,可以觸發相關的表單控制元件;< label> 標籤的 for 屬性應當與相關元素的 id 屬性相同。例如,< label for="file">Filename:< /label> 中的 for="file" 應當與 < input type="file" id="file"> 中的 id="file" 相匹配
這樣,當使用者點選"Filename:"時,焦點會自動跳轉到檔案輸入框
-
< input> 標籤的 type="file" 屬性規定了應該把輸入作為檔案來處理
name="file"設定了輸入欄位的名稱,用於表單提交時識別這個欄位的資料
id="file"設定了輸入欄位的唯一識別符,用於CSS樣式定位或JavaScript操作
建立上傳指令碼
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>
透過使用 PHP 的全域性陣列 $_FILES,你可以從客戶計算機向遠端伺服器上傳檔案
$_ FILES ["file"] ["name"] - 被上傳檔案的名稱
$_ FILES ["file"] ["type"] - 被上傳檔案的型別
$_ FILES ["file"] ["size"] - 被上傳檔案的大小,以位元組計
$_ FILES["file"] ["tmp_name"] - 儲存在伺服器的檔案的臨時副本的名稱
$_FILES["file"] ["error"] - 由檔案上傳導致的錯誤程式碼
上傳限制
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "Invalid file";
}
?>
在這個指令碼中,使用者只能上傳 .gif 或 .jpeg 檔案,檔案大小必須小於 20 kb
儲存被上傳的檔案
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
cookie
cookie常用於識別使用者,cookie 是伺服器留在使用者計算機中的小檔案;每當相同的計算機透過瀏覽器請求頁面時,它同時會傳送 cookie;透過 PHP,您能夠建立並取回 cookie 的值
建立 cookie
setcookie() 函式用於設定 cookie
setcookie() 函式必須位於 < html> 標籤之前
setcookie(name,value,expire,path,domain);
name:必需引數,規定cookie的名稱
value:必需引數,規定cookie的值
expire:可選引數,規定cookie的過期時間,預設為當前會話結束時。時間戳格式。
path:可選引數,規定cookie的有效路徑。瀏覽器在傳送cookie時只會傳送對應路徑及祖先路徑的cookie。例如,如果path設定為/dir/,則只有路徑為/dir/及其子目錄的請求會攜帶該cookie
domain:可選引數,規定cookie的域名。只能設定為當前域或當前域的上級域
取回Cookie的值
$_COOKIE 變數用於取回 cookie 的值
<?php
// Print cookie
echo $_COOKIE["user"];
// 把所有cookie都顯示在頁面上
print_r($_COOKIE);
?>
print_r是一個PHP函式,用於列印變數的易於理解的資訊;
當使用print_r($_COOKIE)時,它會顯示當前頁面所有cookie的名稱和值
使用 isset() 函式來確認是否已設定了 cookie:
<?php
if (isset($_COOKIE["user"]))
echo "Welcome " . $_COOKIE["user"] . "!<br />";
else
echo "Welcome guest!<br />";
?>
刪除cookie
將日期更換為過去的時間點
setcookie("user", "", time()-3600);
Session 變數
Session 的工作機制是:為每個訪問者建立一個唯一的 id (UID),並基於這個 UID 來儲存變數;UID 儲存在 cookie 中,亦或透過 URL 進行傳導
開始 PHP Session
在您把使用者資訊儲存到 PHP session 中之前,首先必須啟動會話
session_start() 函式必須位於 < html> 標籤之前
<?php ssession_start();?>
儲存 Session 變數
使用$_SESSION變數儲存和取回session變數
<?php
session_start();
$_SESSION['views']=1;
?>
<html>
<body>
<?php
echo "Pageviews=".$_SESSION['view'];
?>
</body>
</html>
建立page-view計數器
<?php
session_start();
if(isset($_SESSION['views']))
$_SESSION['views']=$_SESSION['views']+1;
else
$_SESSION['views']=1;
echo "Views=". $_SESSION['views'];
?>
終結Session
刪除某些 session 資料,可以使用 unset() 或 session_destroy() 函式
unset() 函式用於釋放指定的 session 變數:
<?php
unset($_SESSION['views']);
?>
透過 session_destroy() 函式徹底終結 session:
<?php
session_destroy();
?>
session_destroy() 將重置 session,將失去所有已儲存的 session 資料
傳送電子郵件
mail() 函式
用於從指令碼中傳送電子郵件
mail(to,subject,message,headers,parameters)
to 規定email接收者
subject 規定email的主題
message 定義要傳送的資訊
headers 規定附加的標題,比如 From、Cc 以及 Bcc,在傳送電子郵件時具有特定的含義和用途
From:這個標題用於標識郵件的發件人地址。在傳送郵件時,需要在郵件頭部指定發件人的郵箱地址,以便收件人知道郵件的來源
Cc:Carbon Copy的縮寫,意為抄送;在傳送郵件時,如果希望將郵件副本同時傳送給其他人,可以在Cc欄位中新增這些人的郵箱地址;這樣,原始收件人和抄送物件都能收到郵件的副本,但抄送物件不會出現在收件人列表中
Bcc:Blind Carbon Copy的縮寫,意為密送。與Cc類似,Bcc也用於傳送郵件副本,但與Cc不同的是,Bcc中的收件人不會在郵件中顯示出來,即原始收件人和密送物件都不會知道對方的存在。這通常用於保護隱私或避免不必要的干擾
這些標題在傳送電子郵件時,能夠幫助使用者精確地控制郵件的接收者和可見性
parameters 對郵件傳送程式規定額外的引數
傳送簡易的email:
在自己的站點製作一個反饋表單:
向指定的 e-mail 地址傳送了一條文字訊息
$_REQUEST是PHP中的一個超全域性變數,用於獲取透過HTTP請求傳送的資料。它包含從GET請求、POST請求和Cookie中獲取的資料,因此可以同時處理GET和POST請求的資料。
錯誤處理
錯誤處理的幾種辦法:
- 簡單的 "die()" 語句
- 自定義錯誤和錯誤觸發器
- 錯誤報告
使用 die() 函式
舉例:
<?php
if(!file_exists("welcome.txt"))
{
die("File not found");
}
else
{
$file=fopen("welcome.txt","r");
}
?>
當檔案不存在時,會得到資訊
File not found
建立自定義錯誤處理器
建立了一個專用函式,可以在 PHP 中發生錯誤時呼叫該函式
該函式必須有能力處理至少兩個引數 (error level 和 error message),但是可以接受最多五個引數(可選的:file, line-number 以及 error context):
error_function(error_level,error_message,
error_file,error_line,error_context)
Set Error Handler
PHP 的預設錯誤處理程式是內建的錯誤處理程式,我們打算把上面的函式改造為指令碼執行期間的預設錯誤處理程式。
建立一個錯誤處理程式
觸發錯誤
在指令碼中使用者輸入資料的位置,當使用者的輸入無效時觸發錯誤的很有用的;在 PHP 中,這個任務由 trigger_error() 完成。
錯誤記錄
使用 error_log() 函式,可以向指定的檔案或遠端目的地傳送錯誤記錄
這個方法不適合所有的錯誤。常規錯誤應當透過使用預設的 PHP 記錄系統在伺服器上進行記錄。
異常處理
異常處理用於在指定的錯誤(異常)情況發生時改變指令碼的正常流程,這種情況稱為異常。
當異常被觸發時,通常會發生:
- 當前程式碼狀態被儲存
- 程式碼執行被切換到預定義的異常處理器函式
- 根據情況,處理器也許會從儲存的程式碼狀態重新開始執行程式碼,終止指令碼執行,或從程式碼中另外的位置繼續執行指令碼
Try,throw和catch
- Try - 使用異常的函式應該位於 "try" 程式碼塊內,如果沒有觸發異常,則程式碼將照常繼續執行;但是如果異常被觸發,會丟擲一個異常
- Throw - 這裡規定如何觸發異常,每一個 "throw" 必須對應至少一個 "catch"
- Catch - "catch" 程式碼塊會捕獲異常,並建立一個包含異常資訊的物件
建立一個異常
過濾器(Filter)
過濾器用於驗證和過濾來自非安全來源的資料
驗證和過濾使用者輸入或自定義資料是任何 Web 應用程式的重要組成部分
應該始終對外部資料進行過濾
什麼是外部資料?
- 來自表單的輸入資料
- Cookies
- 伺服器變數
- 資料庫查詢結果
函式和過濾器
- filter_var() - 透過一個指定的過濾器來過濾單一的變數
- filter_var_array() - 透過相同的或不同的過濾器來過濾多個變數
- filter_input - 獲取一個輸入變數,並對它進行過濾
- filter_input_array - 獲取多個輸入變數,並透過相同的或不同的過濾器對它們進行過濾
使用"FILTER_VALIDATE_INT" 過濾器來過濾變數,將非整數過濾掉
Validating 和 Sanitizing
Validating 過濾器:
-
用於驗證使用者輸入
-
嚴格的格式規則(比如 URL 或 E-Mail 驗證)
-
如果成功則返回預期的型別,如果失敗則返回 FALSE
Sanitizing 過濾器:
-
用於允許或禁止字串中指定的字元
-
無資料格式規則
-
始終返回字串
淨化輸入
清理從表單傳來的 URL:
首先,我們要確認是否存在我們正在查詢的輸入資料
然後,我們用 filter_input() 函式來淨化輸入資料
Filter Callback
使用 FILTER_CALLBACK 過濾器,可以呼叫自定義的函式,這樣就擁有了資料過濾的完全控制權
使用一個自定義的函式把所有 "_" 轉換為空格
PHP資料庫
連線資料庫
mysqli_connect(servername,username,password);
關閉連線
$value->close();
mysqli_close($connect);
建立
建立資料庫
mysqli_query($connect,"CREATE DATABASE database_name")
建立資料表
選取資料庫
mysql_select_db("databse_name",$connect)
MySQL資料型別
資料插入
向資料庫中插入