PHP中WEB典型應用技術

來源:互聯網
上載者:User

標籤:

主要講5個方面:
  1. PHP與web頁面的互動:表單傳值,檔案的上傳與下載
  2. http協議
  3. PHP的會話技術:cookie和session
  4. PHP的映像技術:GD庫,映像的常見的製作和操作,驗證碼,二維碼,浮水印、縮圖,3D圖等等
  5. 檔案操作:開啟、關閉、讀取檔案、寫入檔案,遍曆目錄等
一、PHP與web頁面的互動:表單傳值,檔案的上傳與下載1、表單傳值

    1.1、單選框

single.html

<!DOCTYPE html>
<html>
<head>
    <title>單選項傳值</title>
    <meta charset="utf-8">
</head>
<body>
    <form method="GET" action="single.php">
        <p>使用者名稱:<input type="text" name="username" /></p>
        <p>
           性  別:
           <input type="radio" name="gender" value="1" />男
           <input type="radio" name="gender" value="2" />女
           <input type="radio" name="gender" value="3" />保密
        </p>
        <p>密  碼:<input type="password" name="password" /></p>
        <p><input type="submit" value="提交"></p>
    </form>
</body>
</html>

single.php

<?php

header(‘Content-type:text/html;charset=utf8‘);
echo ‘<pre>‘;
var_dump($_GET);

注意:

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

   1.2、多選框

muliSelect.html

<!DOCTYPE html>
<html>
<head>
    <title>單選項傳值</title>
    <meta charset="utf-8">
</head>
<body>
    <form method="POST" action="muliSelect.php">
        <p>使用者名稱:<input type="text" name="username" /></p>
        <p>
           愛 好:
           <input type="checkbox" name="hobby[]" value="唱歌">唱歌
           <input type="checkbox" name="hobby[]" value="跳舞">跳舞
           <input type="checkbox" name="hobby[]" value="電影">電影
           <input type="checkbox" name="hobby[]" value="籃球">籃球
        </p>
        <p><input type="submit" value="提交"></p>
    </form>
</body>
</html>

muliSelect.php

<?php

header(‘Content-type:text/html;charset=utf8‘);
/*echo ‘<pre>‘;
var_dump($_POST);*/
// 1,串連資料庫
mysql_connect(‘localhost:3306‘,‘root‘,‘aaa‘);
mysql_query(‘set names utf8‘);
mysql_query(‘use php2018‘);
// 2,接收資料
$user_name = trim($_POST[‘username‘]);
$user_gender = $_POST[‘gender‘];
$hobby = $_POST[‘hobby‘];
$user_password = md5(trim($_POST[‘password‘]));

// 將數群組轉換成字串才能寫入資料庫
$user_hobby = implode(‘,‘,$hobby);

// 3,資料入庫
$sql = "insert into user values
        (null,‘$user_name‘,‘$user_gender‘,‘$user_hobby‘,‘$user_password‘)";

$result = mysql_query($sql);

if($result) {
    echo ‘插入成功‘;
}else {
    echo ‘插入失敗‘;
}

 

/*create table user(
    user_id int primary key auto_increment,
    user_name varchar(20) not null default ‘匿名‘,
    user_gender enum(‘1‘,‘2‘,‘3‘) comment ‘1是男2是女3是保密‘,
    user_hobby set(‘唱歌‘,‘跳舞‘,‘電影‘,‘籃球‘),
    user_password char(32)
);*/

注意:

  • 當我們用PHP擷取多選框的值時,會獲得一個數組;
  • 當我們將多選框的值存入資料庫時,需要將獲得的數組用 implode() 函數分成一個字串,再存入資料庫中。
2、檔案上傳

實現檔案上傳,由下面幾步:

      1)、在伺服器端要開啟檔案上傳功能;

            

      2)、在瀏覽器端提供能夠進行檔案上傳的表單。其實就是給表單添加屬性:enctype=”multipart/form-data”;

      3)、使用$_FILES接收上傳的檔案的相關資訊;

      4)、驗證檔案;

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

             其實就是利用一個函數:move_upload_file(臨時檔案名稱,目標存放的目錄及檔案名稱);有一個傳回值,如果上傳成功就返回true,否則就返回false;

             PHP預設的上傳臨時檔案夾是在C盤下,有時候因為許可權問題會導致上傳失敗, 因此我們一般會修改上傳的臨時檔案夾。

            

封裝檔案上傳函數

upload.php

<?php

# 檔案上傳函數

/**

* 檔案上傳

* @param array $file 上傳檔案的資訊(是一個數組,有5個元素)

* @param array $allow 檔案上傳的類型

* @param string & $error 參考型別,用來記錄錯誤資訊

* @param string $path 檔案上傳的路徑

* @param int $maxsize = 2*1024*1024 允許上傳的檔案的大小

* @return false|$newname 如果上傳失敗就返回false,成功則返迴文件的新名字

*/

function upload($file,$allow,& $error,$path,$maxsize=2097152){

# 1,判斷系統錯誤

switch ($file[‘error‘]) {

case 1:

$error = ‘上傳錯誤,超出了檔案限制的大小!‘;

return false;

case 2:

$error = ‘上傳錯誤,超出了表單允許的大小!‘;

return false;

case 3:

$error = ‘上傳錯誤,檔案上傳不完整!‘;

return false;

case 4:

$error = ‘請先選擇要上傳的檔案!‘;

return false;

case 6:

case 7:

$error = ‘對不起,伺服器繁忙,請稍後再試!‘;

return false;

}

# 2,判斷邏輯錯誤

// 2.1,判斷檔案大小

if ($file[‘size‘] > $maxsize) {

$error = ‘超出檔案大小,允許的最大值為:‘. $maxsize . ‘位元組‘;

return false;

}

// 2.2,判斷檔案類型

if (!in_array($file[‘type‘], $allow)) {

//檔案類型非法

$error = ‘上傳的檔案類型不正確,允許的類型有:‘ . implode(‘,‘, $allow);

return false;

}

# 3, 得到檔案的新名字

$newname = randName($file[‘name‘]);

# 4,移動臨時檔案到指定路徑

$target = $path . ‘/‘ . $newname;

if (move_uploaded_file($file[‘tmp_name‘], $target)) {

return $newname;

}else {

$error = ‘發生未知錯誤,上傳失敗!‘;

return false;

}

}

# 定義一個產生隨機名字的函數

/**

* @param string $filename 檔案的舊名字

* @param string $newname 檔案的新名字

*/

function randName($filename) {

//組建檔案名的時間部分

$newname = date(‘YmdHis‘);

//加上隨機的六位元

$str = ‘0123456789‘;

//得到六位隨機數

for ($i=0; $i < 6; $i++) {

//將每次得到的隨機數加到新名字後

$newname .= $str[mt_rand(0,strlen($str))];

}

// 加上尾碼名

$newname .= strrchr($filename, ‘.‘);

return $newname;

}

?>

3、檔案下載

二、http協議 1、請求協議

    1.1、組成:請求行、要求標頭、空行、請求資料

    1.1.1、請求行。分為三個部分:請求方式、請求路徑、協議版本

    1.1.2、要求標頭。

    要求標頭就是所有當前需要用到的協議項的集合!

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

   常見的要求標頭:

    • 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.3、空行

    用來分離要求標頭和請求資料,意思就是要求標頭到處結束!

    1.1.4、請求資料

2、響應協議

    2.1、組成:響應行、回應標頭、空行、響應主體

三、會話技術 1、cookie

    1.1、基本操作

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

   1.2、屬性

    • 有效期間:預設一個會話周期。可通過setCookie第三個參數設定;
    • 有效路徑:預設目前的目錄及其子目錄。可通過第四個參數設定;
    • 有效域:預設當前網站(子域),可通過第五個參數設定;
    • 是否僅安全傳輸:預設否,第六個參數設定;
    • HTTPONLY:預設否,第七個參數設定。

   1.3、注意事項

    • cookie的值,僅僅支援字串類型;
    • cookie的鍵(下標),可以寫成數組下標的形式。
2、session

    2.1、基本操作

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

    2.2、屬性

    session的實現需要cookie的支援,它的屬性和cookie的屬性一樣。

    2.3、注意事項

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

   2.4、session的銷毀

    • unset():銷毀session中某個資料,並沒有銷毀會話資料區;
    • $_SESSION = ARRAY():清空$_SESSION,並沒有銷毀會話資料區;
    • session_desroy(():銷毀會話資料區。
3、cookie和session的區別
  cookie session
儲存位置 瀏覽器端 伺服器端
資料量
儲存的資料類型 只能是字串 任意類型
安全性 較低 較高
預設的有效路徑 只能是目前的目錄及其子目錄 整站有效

 

四、映像技術 1、GD圖片製作

    1.1、建立畫布

            imagecreatetruecolor(width,height);

    1.2、建立畫筆顏色

            imagecolorallocate(img,red,green,blue);

    1.3、繪製文字(在畫布上畫畫)

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

    1.4、輸出或儲存圖片

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

            輸出前要:

            1)、設定回應標頭資訊:header("content-type:image/png");

            2)、清除緩衝區資料:ob_clean();

    • 儲存:imagepng(圖片資源,路徑/圖片名稱);
2、實現驗證碼

<?php

# 1、建立畫布

$canWidth = 170; // 畫布的寬

$canHei = 40; // 畫布的高

$img = imagecreatetruecolor($canWidth, $canHei);

# 2、為畫布填充背景色

$bgColor = imagecolorallocate($img, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));

imagefill($img, 1, 1, $bgColor);

#/3、定義在畫布上的顯示文字

// 顯示隨機字元的範圍

$arr = array_merge(range(‘a‘, ‘z‘), range(‘A‘, ‘Z‘), range(0, 9));

// 得到指定位元的隨機字元

$str = ‘‘;

shuffle($arr);

$charNum = 4; //驗證碼個數

$keyArr = array_rand($arr,$charNum);

foreach ($keyArr as $value) {

$str .= $arr[$value];

}

// 4、將字元寫入到畫布

$span = ceil($canWidth/($charNum+1));

for ($i=1; $i <= $charNum; $i++) {

// 為畫布建立畫筆色

$charColor = imagecolorallocate($img, mt_rand(120,255), mt_rand(120,255), mt_rand(120,255));

imagestring($img, 5, $span*$i, 12, $str[$i-1], $charColor);

}

// 5、建立幹擾線

for ($i=0; $i < 8; $i++) {

//建立幹擾線顏色

$linColor = imagecolorallocate($img, mt_rand(75,150), mt_rand(75,150), mt_rand(75,150));

//建立幹擾線

imageline($img, mt_rand(0,$canWidth-1), mt_rand(0,$canHei-1), mt_rand(0,$canWidth-1), mt_rand(0,$canHei-1), $linColor);

}

// 6、顯示圖片

header(‘content-type:image/png‘);

ob_clean();

imagepng($img);

?>

 五、檔案操作 1、目錄基本操作
    • 建立目錄:mkdir(目錄位址和名字,許可權);
    • 刪除刪除:rmdir(目錄位址);
    • 移動/重新命名目錄:rename(原始檔案路徑,新的檔案路徑);

(此處的移動實質上也是重新命名,不過目錄的名字不單單是檔案名稱,還包括目錄的路徑,當我們改變目錄的路徑時,既是移動目錄,也可以說是重新命名;)

    • 擷取目錄內容:
  1. 開啟目錄,opendir,得到一個目錄控制代碼(目錄資源);
  2. 依次讀取目錄內的檔案,readdir;
  3. 關閉目錄控制代碼(closedir);

     1.2、常用目錄操作函數

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

     1.3、遞迴遍曆目錄

bianli.php

<?php

/**

* 遞迴遍曆檔案

* @param string $path 目錄路徑(地址)

* @param int $deep=0 目前的目錄的深度

*/

function readDirs($path,$deep=0) {

$dir_handle = openDir($path); //得到$path目錄的控制代碼

while (false !== $file = readDir($dir_handle)) {

//篩選掉./和../

if ($file == "." || $file == "..") {

continue;

}

//輸出檔案

echo str_repeat(‘-‘, $deep*3),$file,‘<br/>‘;

//進入遞迴點和遞迴出口

if (is_dir($path . ‘/‘ .$file)) {

readDirs($path . ‘/‘ .$file,$deep+1);

}

}

}

$path = ‘./‘;

readDirs($path);

?>

2、檔案操作

    2.1、檔案基本操作

    • 讀:file_get_contents;讀取指定路徑的檔案內容,以字串形式返回;
    • 寫:file_put_contents;覆蓋寫,往指定檔案寫入指定資料,並覆蓋以前的內容。如果需要追加資料,則需要設定第三個參數FILE_APPEND;

    2.2、熱門檔案函數

    • filetype:擷取一個檔案的類型。windows下檔案類型有三種,dir、file、unknown。
    • file_exists:判斷一個檔案是否存在;
    • is_dir:判斷一個檔案是否是dir檔案;
    • is_file:判斷一個檔案是否是file檔案;

PHP中WEB典型應用技術

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.