PHP中WEB典型應用技術

主要講5個方面:

  1. PHP與web頁面的交互:表單傳值,文件的上傳與下載
  2. http協議
  3. PHP的會話技術:cookie和session
  4. PHP的圖像技術:GD庫,圖像的常見的製做和操做,驗證碼,二維碼,水印、縮略圖,3D圖等等
  5. 文件操做:打開、關閉、讀取文件、寫入文件,遍歷目錄等

1、PHP與web頁面的交互:表單傳值,文件的上傳與下載

一、表單傳值

    1.一、單選框php

single.htmlhtml

 1 <!DOCTYPE html> 
 2 <html> 
 3 <head> 
 4     <title>單選項傳值</title> 
 5     <meta charset="utf-8"> 
 6 </head> 
 7 <body> 
 8     <form method="GET" action="single.php"> 
 9         <p>用戶名:<input type="text" name="username" /></p> 
10         <p> 
11            性  別: 
12            <input type="radio" name="gender" value="1" />男 13 <input type="radio" name="gender" value="2" />女 14 <input type="radio" name="gender" value="3" />保密 15 </p> 16 <p>密 碼:<input type="password" name="password" /></p> 17 <p><input type="submit" value="提交"></p> 18 </form> 19 </body> 20 </html>

 

single.phpmysql

1 <?php
2 
3 header('Content-type:text/html;charset=utf8'); 4 echo '<pre>'; 5 var_dump($_GET);

 

注意:web

  • 一組選擇的name值必須相同;
  • 必需要有value屬性,且value屬性的值不能相同。

   1.二、多選框sql

muliSelect.html數據庫

 1 <!DOCTYPE html> 
 2 <html> 
 3 <head> 
 4     <title>單選項傳值</title> 
 5     <meta charset="utf-8"> 
 6 </head> 
 7 <body> 
 8     <form method="POST" action="muliSelect.php"> 
 9         <p>用戶名:<input type="text" name="username" /></p> 
10         <p> 
11            愛 好: 
12            <input type="checkbox" name="hobby[]" value="唱歌">唱歌 13 <input type="checkbox" name="hobby[]" value="跳舞">跳舞 14 <input type="checkbox" name="hobby[]" value="電影">電影 15 <input type="checkbox" name="hobby[]" value="籃球">籃球 16 </p> 17 <p><input type="submit" value="提交"></p> 18 </form> 19 </body> 20 </html>

 

muliSelect.phpwindows

 1 <?php
 2 
 3 header('Content-type:text/html;charset=utf8'); 4 /*echo '<pre>'; 5 var_dump($_POST);*/ 6 // 1,鏈接數據庫 7 mysql_connect('localhost:3306','root','aaa'); 8 mysql_query('set names utf8'); 9 mysql_query('use php2018'); 10 // 2,接收數據 11 $user_name = trim($_POST['username']); 12 $user_gender = $_POST['gender']; 13 $hobby = $_POST['hobby']; 14 $user_password = md5(trim($_POST['password'])); 15 16 // 將數組轉換成字符串才能寫入數據庫 17 $user_hobby = implode(',',$hobby); 18 19 // 3,數據入庫 20 $sql = "insert into user values 21 (null,'$user_name','$user_gender','$user_hobby','$user_password')"; 22 23 $result = mysql_query($sql); 24 25 if($result) { 26 echo '插入成功'; 27 }else { 28 echo '插入失敗'; 29 } 30 31 /*create table user( 32 user_id int primary key auto_increment, 33 user_name varchar(20) not null default '匿名', 34 user_gender enum('1','2','3') comment '1是男2是女3是保密', 35 user_hobby set('唱歌','跳舞','電影','籃球'), 36 user_password char(32) 37 );*/

 

注意:數組

  • 當咱們用PHP獲取多選框的值時,會得到一個數組;
  • 當咱們將多選框的值存入數據庫時,須要將得到的數組用 implode() 函數分紅一個字符串,再存入數據庫中。

二、文件上傳

實現文件上傳,由下面幾步:瀏覽器

      1)、在服務器端要開啓文件上傳功能;緩存

      2)、在瀏覽器端提供可以進行文件上傳的表單。其實就是給表單添加屬性:enctype=」multipart/form-data」;

      3)、使用$_FILES接收上傳的文件的相關信息;

      4)、驗證文件;

      5)、將文件從臨時文件夾移動到指定的目錄下。

             其實就是利用一個函數:move_upload_file(臨時文件名,目標存放的目錄及文件名);有一個返回值,若是上傳成功就返回true,不然就返回false;

             PHP默認的上傳臨時文件夾是在C盤下,有時候由於權限問題會致使上傳失敗, 所以咱們通常會修改上傳的臨時文件夾。

             

封裝文件上傳函數

upload.php

  1 <?php
  2 
  3 # 文件上傳函數
  4 
  5 /**
  6 
  7 * 文件上傳
  8 
  9 * @param array $file 上傳文件的信息(是一個數組,有5個元素)
 10 
 11 * @param array $allow 文件上傳的類型
 12 
 13 * @param string & $error 引用類型,用來記錄錯誤信息
 14 
 15 * @param string $path 文件上傳的路徑
 16 
 17 * @param int $maxsize = 2*1024*1024 容許上傳的文件的大小
 18 
 19 * @return false|$newname 若是上傳失敗就返回false,成功則返回文件的新名字
 20 
 21 */
 22 
 23 function upload($file,$allow,& $error,$path,$maxsize=2097152){ 24 25 # 1,判斷系統錯誤 26 27 switch ($file['error']) { 28 29 case 1: 30 31 $error = '上傳錯誤,超出了文件限制的大小!'; 32 33 return false; 34 35 case 2: 36 37 $error = '上傳錯誤,超出了表單容許的大小!'; 38 39 return false; 40 41 case 3: 42 43 $error = '上傳錯誤,文件上傳不完整!'; 44 45 return false; 46 47 case 4: 48 49 $error = '請先選擇要上傳的文件!'; 50 51 return false; 52 53 case 6: 54 55 case 7: 56 57 $error = '對不起,服務器繁忙,請稍後再試!'; 58 59 return false; 60 61 } 62 63 # 2,判斷邏輯錯誤 64 65 // 2.1,判斷文件大小 66 67 if ($file['size'] > $maxsize) { 68 69 $error = '超出文件大小,容許的最大值爲:'. $maxsize . '字節'; 70 71 return false; 72 73 } 74 75 // 2.2,判斷文件類型 76 77 if (!in_array($file['type'], $allow)) { 78 79 //文件類型非法 80 81 $error = '上傳的文件類型不正確,容許的類型有:' . implode(',', $allow); 82 83 return false; 84 85 } 86 87 # 3, 獲得文件的新名字 88 89 $newname = randName($file['name']); 90 91 # 4,移動臨時文件到指定路徑 92 93 $target = $path . '/' . $newname; 94 95 if (move_uploaded_file($file['tmp_name'], $target)) { 96 97 return $newname; 98 99 }else { 100 101 $error = '發生未知錯誤,上傳失敗!'; 102 103 return false; 104 105 } 106 107 } 108 109 # 定義一個產生隨機名字的函數 110 111 /** 112 113 * @param string $filename 文件的舊名字 114 115 * @param string $newname 文件的新名字 116 117 */ 118 119 function randName($filename) { 120 121 //生成文件名的時間部分 122 123 $newname = date('YmdHis'); 124 125 //加上隨機的六位數 126 127 $str = '0123456789'; 128 129 //獲得六位隨機數 130 131 for ($i=0; $i < 6; $i++) { 132 133 //將每次獲得的隨機數加到新名字後 134 135 $newname .= $str[mt_rand(0,strlen($str))]; 136 137 } 138 139 // 加上後綴名 140 141 $newname .= strrchr($filename, '.'); 142 143 return $newname; 144 145 } 146 147 ?>

 

三、文件下載

clipboard

2、http協議

一、請求協議

    1.一、組成:請求行、請求頭、空行、請求數據

    1.1.一、請求行。分爲三個部分:請求方式、請求路徑、協議版本

    1.1.二、請求頭。

    請求頭就是全部當前須要用到的協議項的集合!

    協議項就是瀏覽器在請求服務器的時候事先告訴服務器的一些信息,並且每個協議項都要單獨的佔用一行!

   常見的請求頭:

  • host:當前url中所要請求的服務器的主機名(域名)
  • accept-encoding:是瀏覽器發給服務器,聲明瀏覽器支持的壓縮編碼類型 好比gzip
  • accept_charset:表示,瀏覽器支持的字符集
  • referer:表示,這次請求來自哪一個網址
  • accept-language:能夠接收的語言類型,cn,en等
  • cookie:
  • user-agent:用戶代理,當前發起請求的瀏覽器的內核信息
  • accept:表示瀏覽器能夠接收的數據類型,text/html,image/img
  • content-length(post):只有post提交的時候纔會有的請求頭,顯示當前提交的數據長度(字節)
  • if-modified-since(get):在客戶端向服務器請求某個資源文件時,詢問此資源文件是否被修改過
  • content-type(post):定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什麼形式、編碼讀取這個文件

    1.1.三、空行

    用來分離請求頭和請求數據,意思就是請求頭處處結束!

    1.1.四、請求數據

二、響應協議

    2.一、組成:響應行、響應頭、空行、響應主體

3、會話技術

一、cookie

    1.一、基本操做

  • 增刪改:setCookie(名,值)
  • 查:$_COOKIE

   1.二、屬性

  • 有效期:默認一個會話週期。可經過setCookie第三個參數設置;
  • 有效路徑:默認當前目錄及其子目錄。可經過第四個參數設置;
  • 有效域:默認當前站點(子域),可經過第五個參數設置;
  • 是否僅安全傳輸:默認否,第六個參數設置;
  • HTTPONLY:默認否,第七個參數設置。

   1.三、注意事項

  • cookie的值,僅僅支持字符串類型;
  • cookie的鍵(下標),能夠寫成數組下標的形式。

二、session

    2.一、基本操做

    增刪該查都是經過$_SESSION數組來完成的。

    2.二、屬性

    session的實現須要cookie的支持,它的屬性和cookie的屬性同樣。

    2.三、注意事項

  • session數據能夠是任意類型的數據(cookie只能是字符串類型)
  • $_SESSION數組元素的下標只能是字符串型(關聯型),不能是索引數組

   2.四、session的銷燬

  • unset():銷燬session中某個數據,並無銷燬會話數據區;
  • $_SESSION = ARRAY():清空$_SESSION,並無銷燬會話數據區;
  • session_desroy(():銷燬會話數據區。

三、cookie和session的區別

  cookie session
存儲位置 瀏覽器端 服務器端
數據量
存儲的數據類型 只能是字符串 任意類型
安全性 較低 較高
默認的有效路徑 只能是當前目錄及其子目錄 整站有效

 

4、圖像技術

一、GD圖片製做

    1.一、建立畫布

            imagecreatetruecolor(width,height);

    1.二、建立畫筆顏色

            imagecolorallocate(img,red,green,blue);

    1.三、繪製文字(在畫布上畫畫)

            imagestring(img,size,x,y,string,color);

    1.四、輸出或保存圖片

  • 輸出:imagepng(圖片資源);

            輸出前要:

            1)、設置響應頭信息:header("content-type:image/png");

            2)、清除緩存區數據:ob_clean();

  • 保存:imagepng(圖片資源,路徑/圖片名稱);

二、實現驗證碼

captcha.php

 1 <?php
 2 
 3 # 一、建立畫布
 4 
 5 $canWidth = 170; // 畫布的寬
 6 
 7 $canHei = 40; // 畫布的高
 8 
 9 $img = imagecreatetruecolor($canWidth, $canHei); 10 11 # 二、爲畫布填充背景色 12 13 $bgColor = imagecolorallocate($img, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120)); 14 15 imagefill($img, 1, 1, $bgColor); 16 17 #/三、定義在畫布上的顯示文字 18 19 // 顯示隨機字符的範圍 20 21 $arr = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)); 22 23 // 獲得指定位數的隨機字符 24 25 $str = ''; 26 27 shuffle($arr); 28 29 $charNum = 4; //驗證碼個數 30 31 $keyArr = array_rand($arr,$charNum); 32 33 foreach ($keyArr as $value) { 34 35 $str .= $arr[$value]; 36 37 } 38 39 // 四、將字符寫入到畫布 40 41 $span = ceil($canWidth/($charNum+1)); 42 43 for ($i=1; $i <= $charNum; $i++) { 44 45 // 爲畫布建立畫筆色 46 47 $charColor = imagecolorallocate($img, mt_rand(120,255), mt_rand(120,255), mt_rand(120,255)); 48 49 imagestring($img, 5, $span*$i, 12, $str[$i-1], $charColor); 50 51 } 52 53 // 五、建立干擾線 54 55 for ($i=0; $i < 8; $i++) { 56 57 //建立干擾線顏色 58 59 $linColor = imagecolorallocate($img, mt_rand(75,150), mt_rand(75,150), mt_rand(75,150)); 60 61 //建立干擾線 62 63 imageline($img, mt_rand(0,$canWidth-1), mt_rand(0,$canHei-1), mt_rand(0,$canWidth-1), mt_rand(0,$canHei-1), $linColor); 64 65 } 66 67 // 六、顯示圖片 68 69 header('content-type:image/png'); 70 71 ob_clean(); 72 73 imagepng($img); 74 75 ?>

 

5、文件操做

一、目錄基本操做

  • 建立目錄:mkdir(目錄地址和名字,權限);
  • 刪除刪除:rmdir(目錄地址);
  • 移動/重命名目錄:rename(原始文件路徑,新的文件路徑);

(此處的移動實質上也是重命名,不過目錄的名字不僅僅是文件名,還包括目錄的路徑,當咱們改變目錄的路徑時,既是移動目錄,也能夠說是重命名;)

  • 獲取目錄內容:
  1. 打開目錄,opendir,獲得一個目錄句柄(目錄資源);
  2. 依次讀取目錄內的文件,readdir;
  3. 關閉目錄句柄(closedir);

二、經常使用目錄操做函數

  • getcwd:獲取當前的工做路徑;
  • chdir:改變當前的工做路徑;
  • rewinddir:重置資源指針,回到第一個;
  • scandir:瀏覽某一目錄,以索引數組的形式返回目錄中內容。

三、遞歸遍歷目錄

bianli.php

 1 <?php
 2 
 3 /**
 4 
 5 * 遞歸遍歷文件
 6 
 7 * @param string $path 目錄路徑(地址)
 8 
 9 * @param int $deep=0 當前目錄的深度
10 
11 */
12 
13 function readDirs($path,$deep=0) { 14 15 $dir_handle = openDir($path); //獲得$path目錄的句柄 16 17 while (false !== $file = readDir($dir_handle)) { 18 19 //篩選掉./和../ 20 21 if ($file == "." || $file == "..") { 22 23 continue; 24 25 } 26 27 //輸出文件 28 29 echo str_repeat('-', $deep*3),$file,'<br/>'; 30 31 //進入遞歸點和遞歸出口 32 33 if (is_dir($path . '/' .$file)) { 34 35 readDirs($path . '/' .$file,$deep+1); 36 37 } 38 39 } 40 41 } 42 43 $path = './'; 44 45 readDirs($path); 46 47 ?>

 

二、文件操做

    2.一、文件基本操做

    • 讀:file_get_contents;讀取指定路徑的文件內容,以字符串形式返回;
    • 寫:file_put_contents;覆蓋寫,往指定文件寫入指定數據,並覆蓋之前的內容。若是須要追加數據,則須要設置第三個參數FILE_APPEND;

    2.二、經常使用文件函數

  • filetype:獲取一個文件的類型。windows下文件類型有三種,dir、file、unknown。
  • file_exists:判斷一個文件是否存在;
  • is_dir:判斷一個文件是不是dir文件;
  • is_file:判斷一個文件是不是file文件; 
相關文章
相關標籤/搜索