日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP基础(必须熟练掌握的基础)

發布時間:2023/12/4 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP基础(必须熟练掌握的基础) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?php/*** 三元運算符的應用*/ /* $a = 10; $b = 15; echo $a > $b ? 1 : 0; */ // 注:php7新添加的運算符比較運算符x<=>y // 如果x和y相等,就返回0,如果x>y,就返回1,如果x的值小于y,就返回-1/* $a = "aaa"; $b = "bbb"; echo $a.$b; *//*** 預定義常量*//* class a {function showName(){echo __METHOD__;echo "<hr>";echo __FUNCTION__;echo "<hr>";echo __CLASS__;echo __FILE__;echo __DIR__;} } $b = new a(); $b->showName();*//*** switch分支語句*//* switch ($type) {case 1:echo "11";break;case 2:echo "12";break;default :echo "13";break; } *//*** while循環* 需要注意,while循環必須進行變量初始化*//* $i = 1; while ($i <= 10) {echo $i." ";$i++; } *//*** do while循環*/ /* $i = 0; do {$i++;echo $i." "; } while($i<10); *//*** for循環*/ /*for ($i = 0; $i < 10; $i++) {echo $i." "; }*//*** foreach循環*//* $arr = ['name'=>'xiaobudiu','age'=>25,'hobby'=> ['1' => 'hobby','2' => 'code'] ]; foreach ($arr as $k => $v){echo $k."=>".$v;echo " "; } *//*** 跳轉語句之goto (還有break,continue)* goto* goto a直接跳到a 中間部分的代碼不執行*//* goto a; echo 'kkk'; echo '123'; a: echo 'bbb'; echo '525'; */ //此部分代碼瀏覽器顯示為 //bbb525/*** goto跳轉語句*//* for($i = 0; $i < 10; $i++) {if($i == 3){goto a;}echo $i; } a: echo "跳出循環"; */ //瀏覽器顯示為 //012跳出循環/*** 引用傳遞*/ /* function test(&$a) {$a = $a + 1;return $a; }$x = 1; echo test($x); // 2 echo "<hr>"; echo $x; // 2 *//*** 函數的默認參數* 為了避免意外情況發生,一般,默認參數放在非默認參數的右側*/ /* function aa($a = 2, $b) {echo $a + $b; } aa(3,5); // 瀏覽器顯示8 // 這里,如果調用時aa(3)只給了一個參數,則會報錯 *//*** 可變參數變量* 參數可包含'...'來表示函數可接受一個可變數量的參數* 可變參數將會被當做一個數組傳遞給函數*/ /* function test(...$num) {$sum = 0;foreach ($num as $k => $value){$sum += $value;}return $sum; }echo test(1, 3, 4, 5); //結果1+3+4+5 = 13 *//*** return跳轉語句* return 本身只能返回一個值,不能返回數組,我們通過這種方法來實現返回數組,并在調用時用list接收* return之后的代碼不在執行,這里,echo "111"代碼執行不了,所以瀏覽器只返回了28 11*/ /* function aak($a, $b) {$sum = $a * $b;$sum2 = $a + $b;return array($sum, $sum2); } list($a1, $a2) = aak(4,7); echo $a1." ".$a2; //瀏覽器顯示 28 11 *//*** 使用get_loaded_extensions 我們來查看一下現在的php程序加載了哪些拓展*/ //var_dump(get_loaded_extensions());/*** 匿名函數(也叫閉包函數)* 允許臨時創建一個沒有指定名稱的函數,經常用作回調函數(callback)參數的值* 閉包函數也可以作為變量的值來使用(比如此例)*/ /* $greet = function ($name) {echo "hello,$name"; }; $greet('xiaobudiu'); //瀏覽器顯示 hello,xiaobudiu *//*** 遞歸思想* 斐波那契數列* 1,1,2,3,5,8...*$n表示第幾個數*/ /* function compute($n) {if ($n > 2) {return compute($n - 1) + compute($n - 2);} else {return 1;} } echo compute(7); *//*** 迭代思想* 利用變量的原值推算出變量的一個新值*/ /* function dieDai($n) {for ($i = 0 , $j = 0; $i < $n; $i++) {$j = $i + $j;}return $j; } echo dieDai(50); *//*** 單引號和雙引號*/ /* $str = "i dont't want to go shoping"; echo ucwords($str); *//*** 字符串替換*str_ireplace();str_replace()*/ /* $str = "hello,world,hello,world"; echo str_replace('or', 'dd', $str); $replace = 'hi'; echo substr_replace($str, $replace, 0, 7);//將第0到第7個字符替換成$replace字符 // 瀏覽器顯示hiorld,hello,world *//**** 截取字符串*/ /* $str = 'abcdefg'; echo substr($str,0,4); // 瀏覽器顯示:abcd *//*** 去掉字符串首尾特殊字符* trim();ltrim();rtrim()*/ /* $str = ' .abcded .gk.'; echo $str; echo "<hr>"; $str = trim($str); echo $str;//.abcded .gk.(空格去掉了) echo '<hr>'; $str = ltrim($str,'.');//abcded .gk.(左邊的點被去掉了) echo $str; echo '<hr>'; $str = rtrim($str,'.');//(右側的點被去掉了) echo $str; *//*** str_replace()*/ /* $str = 'hello,world,d,hello,world,ef'; //要求把第二個hello替換成hi echo str_replace('hello','hi',$str); */ //str_replace()單獨實現不了替換限制次數的需求,要替換,都替換,無法替換單獨一個/*** 對字符串執行指定次數替換* @param Mixed $search 查找目標值* @param Mixed $replace 替換值* @param Mixed $subject 執行替換的字符串/數組* @param Int $limit 允許替換的次數,默認為-1,不限次數* @return Mixed*/ /* function strReplaceLimit($search, $replace, $subject, $limit= -1) {if (is_array($search)) {foreach ($search as $k => $v) {$search[$k] = '`'. preg_quote($search[$k], '`'). '`';}} else {$search = '`'. preg_quote($search, '`'). '`';}return preg_replace($search, $replace, $subject, $limit); } $str = "abccddefccggcccg"; echo strReplaceLimit('cc', 'c',$str, 2); echo '<hr>'; */ // 瀏覽器顯示:abcddefcggcccg(前兩個cc都被替換了,最后一個ccc沒有被替換)/*** 截取字符串* substr*/ /* $str = "abcdefghijklmn"; echo substr($str,-4, 2); // kl *//** 計算字符串長度* str_len、mb_strlen*/ /* $str = "abcde我"; echo strlen($str); // 8 (中文3個字符,英文1個字符) echo mb_strlen($str, 'UTF8'); // 6 (中文、英文都算一個字符) *//*** 轉義和還原字符串* 轉義:addslashes() 還原:stripslashes* 兩個參數 第一個參數字符串,第二個參數要進行轉義的字符*/ /* $str = "I Don't wang to go shopping.."; $str = ucwords($str); echo $str;//I Don't Wang To Go Shopping.. echo "<hr>"; //$str = addslashes($str); $str = addcslashes($str,'.'); echo $str;//I Don't Wang To Go Shopping\.\. *//*** 重復字符串* str_repeat*/ /* $str = 'abcd'; echo str_repeat($str,2); *//*** 隨機打亂字符串* str_shuffle()*/ /* $str = "abcdefghijklmn"; echo str_shuffle($str); *//*** 分割字符串* explode()*/ /* $str = "piece1,piece2,piece3"; $str = explode(',',$str); var_dump($str); //array(3) { [0]=> string(6) "piece1" [1]=> string(6) "piece2" [2]=> string(6) "piece3" } echo "<hr>"; $str = implode('-',$str); echo $str; //piece1-piece2-piece3 *//*** 創建一個指定范圍的數組* range() 第三個參數step 步進值*/ /* $array = range('0', '9', 2); var_dump($array); //array(5) { [0]=> int(0) [1]=> int(2) [2]=> int(4) [3]=> int(6) [4]=> int(8) } *//*** 檢查數組中是否存在某個值* in_array*/ /* $arr = ['beijing', 'shanghai', 'hangzhou', 'shenzhen']; var_dump(in_array('hangzhou', $arr));//bool(true) *//*** 數組轉換成字符串* implode()*/ /* $array = ['beijing', 'shanghai', 'hangzhou', 'shenzhen']; $arrayStr = implode('-', $array); echo $arrayStr; // beijing-shanghai-hangzhou-shenzhen *//*** 計算數組中的單元數目* count()* 第二個參數可選,默認0,識別不了無限遞歸,1:可以識別無限遞歸* 此例中,輸出的count就是6*/ /* $array = ['beijing','shanghai'=>['pudong','jiaoda'],'hangzhou','shenzhen' ]; echo count($array); // 4 echo "<hr>"; echo count($array,1); // 6 *//*** 數組當前單元和指針* current(),next(),prev(),end(),reset()*/ /* $foods = ['banana', 'apple', 'orange']; var_dump(current($foods)); var_dump(next($foods));//將數組指針向后移動一位 var_dump(current($foods)); *//*** 數組中的鍵名和值* key() next()*//*** 檢查給定鍵名或索引是否存在于數組中* array_key_exits*//*** 獲取數組中鍵名* array_keys()*//*** 獲取數組中所有的值* array_values*/ /* $arr = ['12' => 'beijing','25' => 'shanghai','3' => 'hangzhou','4' => 'shenzhen' ]; var_dump(array_values($arr)); *//*** 搜索給定值返回鍵名 (存在多個返回第一個匹配元素的鍵)* array_search*/ /* $arr = ['0' => 'blue','2' => 'red','3' => 'green','5' => 'red' ]; var_dump(array_search('red', $arr)); // 2 *//*** 填補數組* array_pad()* pad_size:填補后數組的長度(若為負數,則填補到左側)* pad_value:填補的內容*/ /* $arr = ['0' => 'blue','2' => 'red','3' => 'green' ]; $arr = array_pad($arr, 6, 'orange'); var_dump($arr); *//*** 使用指定的鍵和值填充數組* array_fill_keys*/ /* $arr = ['banana', 'apple', 2, 5]; $arr = array_fill_keys($arr, ['hangzhou', 'shanghai', 'beijing']); echo "<pre>"; print_r($arr); print_r($arr['banana']); *//** 瀏覽器顯示Array ([banana] => Array([0] => hangzhou[1] => shanghai[2] => beijing)[apple] => Array([0] => hangzhou[1] => shanghai[2] => beijing)[2] => Array([0] => hangzhou[1] => shanghai[2] => beijing)[5] => Array([0] => hangzhou[1] => shanghai[2] => beijing)) *//*** 從數組中隨機取出一個或多個單元* array_rand* 注:返回隨機條目的一個或多個鍵*/ /* $array = ['0' => 'blue','2' => 'red','3' => 'green','4' => 'color' ]; $arrayTwo = array_rand($array, 3); var_dump($arrayTwo); *//*** 數組排序與打亂數組* sort()、asort()、shuffle()*/ /* $arr = range('a','z'); shuffle($arr); foreach($arr as $v){echo $v;echo " "; } *//*** 遍歷數組* for、foreach()、each()、list()*/$array = ['beijing', 'shanghai', 'guangzhou', 'hangzhou', 'shenzhen']; $arrayTwo = ['haerbin', 'zhengzhou' => 'henan', 'nanjing']; /* //for循環寫法 for($i = 0; $i < count($array); $i++){echo $array[$i];echo '<br>'; } echo "<hr>";//foreach寫法 foreach($arrayTwo as $v) {echo $v;echo ' '; } *//*** list() 將數組的值分給賦給變量**/ /* $array = ['beijing', 'shanghai', 'guangzhou', 'hangzhou', 'shenzhen']; list($a[1], $a[2], $a['x']) = $array; var_dump($a); *//*** 數組的拆分,拆分成n組,每組幾個元素* array_chunk()*/ /* $array = ['beijing', 'shanghai', 'guangzhou', 'hangzhou', 'shenzhen']; $array = array_chunk($array, 2, true); echo "<pre>"; print_r($array); *//*** 合并數組(不自動去重,如果需要去重結合array_unique()使用)* array_merge()*/ /* $array = ['beijing', 'shanghai', 'guangzhou', 'hangzhou', 'shenzhen']; $arrayTwo = ['haerbin', 'zhengzhou'=>'henan', 'nanjing', 'hangzhou']; $arr = array_merge($array, $arrayTwo); echo "<pre>"; print_r($arr); *//*** 增加刪除數組中的元素* array_shift() 可在數組開頭插入一個1或多個單元* array_unshift() 可將數組開頭的單元移除數組* array_push() 用來將一個或多個單元壓入數組的末尾(入棧)* array_pop() 可將數組的最后一個單元彈出(出棧)*//*** 從數組中取出一段* array_slice() 字符串 substr*/ /* $array = ['beijing', 'shanghai', 'guangzhou', 'hangzhou', 'shenzhen']; var_dump(array_slice($array, 2, 3, true)); //array(3) { [2]=> string(9) "guangzhou" [3]=> string(8) "hangzhou" [4]=> string(8) "shenzhen" } *//*** 把數組中的一部分去掉,并用其他值取代* array_splice()*/ /* $array = ['haerbin', 'zhengzhou' => 'henan', 'nanjing', 'hangzhou']; array_splice($array, 1, 2, 'code'); echo "<pre>"; var_dump($array); //array(3) { [0]=> string(7) "haerbin" [1]=> string(4) "code" [2]=> string(8) "hangzhou" } *//*** 系統預定義數組 $_SERVER $_GET $_POST*///var_dump($_SERVER); //var_dump($_POST); //var_dump($_GET); /* $name = $_POST['name']; $pass = $_POST['pass']; var_dump($_POST); *//*** 獲取通過post方式上傳文件的相關信息* $_FILES*/ /* session_start(); session_id(); var_dump(session_id()); echo "<hr>"; $_COOKIE['name'] = 'xiaobudiu'; $_COOKIE['pass'] = '56611'; echo "<pre>"; print_r($_COOKIE); setcookie('session_id',''); *//*** 獲取當前時間* time();*/ // var_dump(date('Y-m-d H:i:s', time()));/***取得日期時間信息* getdate()*/ /*$arr=getdate(); var_dump($arr);*/ /* array(11) {["seconds"]=>int(57)["minutes"]=>int(58)["hours"]=>int(18)["mday"]=>int(4)["wday"]=>int(4)["mon"]=>int(1)["year"]=>int(2018)["yday"]=>int(3)["weekday"]=>string(8) "Thursday"["month"]=>string(7) "January"[0]=>int(1515063537) } *//*** 常用時間處理**//*** 默認時區設置* date_default_timezone_set()*/ //date_default_timezone_set('PRC');/*** 計算兩個日期的時間差* 2017年1月4日20時28分30秒 2018年5月6日19時30分15秒* @param $hour_start int 起始小時 (這里填20)* @param $minutes_start int 起始分鐘數 (這里填28)* @param $seconds_start int 起始秒數 (這里填30)* @param $month_start int 起始月份 (這里填1)* @param $day_start int 起始日期(這里填4)* @param $year_start int 起始年份(這里填2017)* @param $hour_end* @param $minutes_end* @param $second_end* @param $month_end* @param $day_end* @param $year_end*/ /* function diff_time($year_start, $month_start, $day_start, $hour_start, $minutes_start, $seconds_start,$year_end, $month_end, $day_end, $hour_end, $minutes_end, $second_end) {//2016年1月1日19點30分0秒時間戳//$start = mktime(19,30,0,1,1,2016)$start = mktime($hour_start, $minutes_start, $seconds_start, $month_start, $day_start, $year_start);//2016年7月7日7點30分0秒時間戳//$end = mktime(7,30,0,7,7,2016);$end = mktime($hour_end, $minutes_end, $second_end, $month_end, $day_end, $year_end);//時間戳之差$diff_seconds = $end - $start;//一周的秒數是24*60*60*7=604800$diff_weeks = floor($diff_seconds / 604800);//一天的秒數是24*60*60=86400$diff_days = floor($diff_seconds / 86400);$diff_hours = floor($diff_seconds / 3600);$diff_minutes = floor($diff_seconds / 60);echo "兩個時間相差".":".$diff_weeks."個星期,".$diff_days."天,".$diff_hours."小時,".$diff_minutes."分,". $diff_seconds."秒"; } //示例: 2016年9月25日18時25分30秒 2017年1月4日20時36分15秒 diff_time(2016, 8, 25, 18, 25, 30, 2017, 1, 4, 20, 36, 15); *//*** 將具體時間日期轉化為時間戳*/ /* echo mktime(10,25,25,10,25,2016); echo "<hr>"; echo strtotime('20161025102525'); *//*** 求兩個日期的時間差* 求2016.9.4 10:32:33 與2017.1.4 21:22:23* @param $start int 起始日期 20160904103233* @param $end int 結束日期 20170104212223* 注:也可以不用strtotime,用mktime()去轉化時間戳,其他步驟一樣*/ /* function diff_time($start,$end) {$start = strtotime($start);$end = strtotime($end);//計算兩個時間的時間戳$diff_seconds = $end - $start;//求相差多少個星期$diff_weeks = floor($diff_seconds / (24 * 60 * 60 * 7));//求相差多少天$diff_days = floor($diff_seconds / (24 * 60 * 60));//求相差多少小時$diff_hours = floor($diff_seconds / (60 * 60));//求相差多少分$diff_minutes = floor($diff_seconds / 60);//輸出結果echo "兩個時間相差".":".$diff_weeks."個星期,".$diff_days."天,".$diff_hours."小時,".$diff_minutes."分,". $diff_seconds."秒"; } diff_time('20160904103233','20170104212223'); *//* $start = 'last Friday'; $time1 = strtotime("$start + 1days"); echo date('Y-m-d H:i:s',$time1); *//* $start = '20170430122531'; $end = '20180104224925'; //求兩個時間戳的差 $diff_time = strtotime($end) - strtotime($start); //求相差多少天 $diff_days = floor($diff_time/(24*60*60)); echo "兩個時間相差".$diff_days."天"; *//*** 驗證日期* checkdate()*/ //var_dump(checkdate(12,32,2016)); //bool(false)/*** 表單的種類*input文本域**//* var_dump($_POST); echo "<hr>"; var_dump($_FILES); *//*** 處理文件上傳* 在html頁面上傳文件到本方法所在php文件,在php文件中,調用方法即可(html頁面中type為file的input name值為file* 如果想更改,本方法中$_FILES['file']也要對應更改*///function upLoadFiles() //{ // if ($_FILES['file']['error'] > 0) { // echo "Error:".$_FILES['file']['error']."<br />"; // } else { // echo "<pre>"; // print_r($_FILES['file']); // //將臨時文件移動到永久文件 // //判斷文件是否是通過http post上傳的 // if(is_uploaded_file($_FILES['file']['tmp_name'])) { // $uploadFile = $_FILES['file']; // //獲取數組里的值 // $name = $uploadFile['name']; // $tmp_name = $uploadFile['tmp_name']; // //移動上傳文件到指定目錄(這里用絕對路徑,也可以用相對路徑,但要注意在文件夾前加上網站根目錄) // /* define('ROOT', dirname(__FILE__)); //E:\PHP\phpstudy\WWW\Project\kk // //對移動臨時文件是否成功做判斷 // if(!move_uploaded_file($tmp_name,ROOT."\Upload\\".$name)) { // echo "Error:移動文件失敗,請確認文件名全為英文"; // }*/ // if(@!move_uploaded_file($tmp_name,"E:\PHP\phpstudy\WWW\Project\kk\Upload\\".$name)){ // echo "Error:移動文件失敗,請確認文件名全為英文"; // } // // } // } // //} //upLoadFiles(); //var_dump(__FILE__); //var_dump(dirname(__FILE__));/*** Class myClass* 靜態屬性(類屬性)* 類內用self調用,類外使用類名調用*/ /* class myClass {static $staticVal = 10;function getStatic(){return self::$staticVal;} } echo myClass::$staticVal; echo "<hr>"; $a = new myClass(); var_dump($a->getStatic()); *//*** 靜態方法(類方法)**///class myClass //{ // static $staticVal = 10; // public $val = 100; // // /** // * 獲取類屬性(靜態屬性 $staticVal) // */ // static function getStaticVal() // { // echo self::$staticVal; // } // // /** // * 類內調用類屬性,并對類屬性進行改變 // */ // static function changeStaticVal() // { // self::$staticVal++; // echo self::$staticVal; // } //} // //myClass::getStaticVal();//10 //myClass::changeStaticVal();//11/*** 文件名操作* basename()*/ /* echo __FILE__; //E:\PHP\phpstudy\WWW\Project\kk\index.php echo "<hr>"; $a = basename(__FILE__,".php"); echo $a; //index *//*** 構造方法* 創建對象時自動調用的方法* __construct* 構造方法常用的場景是在創建對象時給變量賦值*///class yourClass //{ // // public $name; // public $age; // // /** // * yourClass constructor. // * 構造方法 // * 創建對象時自動調用此方法 // */ // function __construct($name,$age) // { // $this->name = $name; // $this->age = $age; // } // // /** // * 析構方法 // * __destruct // * 析構方法是在對象被銷毀前自動執行的方法 // */ // function __destruct() // { // // } //} //$a = new yourclass('xiaoming',25); //echo $a->name;/*** 封裝和繼承* public 任何地方都可以調用* protected 本類和子類中可以被調用* private 只有本類可以調用*//*** 封裝,就是將類中的成員屬性和方法內容細節盡量隱藏起來,確保類外部代碼不能隨意訪問類內內容*//*** 繼承* extends*//*** 多態* 多態,通過繼承,復用代碼實現 可編寫出健壯可擴展的的代碼 減少流程控制語句的使用* 在運行時,根據傳遞的對象參數,決定調用不用的方法*//*** 回顧函數總結:* 函數的三個特性:封裝,繼承,多態* 封裝:將函數的成員屬性成員方法內容細節盡可能隱藏起來,確保類外部代碼不能隨意訪問類中內容* 繼承:一個類作為公共基類,其他類繼承這個類,則其他類都具有這個類的屬性和方法* 多態:通過繼承復用代碼而實現 運行時根據傳遞的參數對象,決定調用哪一個對象的方法*//*** 魔術方法* php提供了內置的攔截器,他可以'發送'到未定義方法和屬性的消息* __set() __get() __isset() __unset() __call() __toString()**//*** __set()* 在代碼要給未定義的屬性賦值時調用,或在類外部修改被private修飾的類屬性時被調用* 它會傳遞兩個參數;屬性名和屬性值* 通過__set()方法也可以實現對private關鍵詞修飾的屬性值進行更改*//*** __get()* 當在類外部訪問被private或protected修飾的屬性或訪問一個類中原本不存在的屬性時被調用*//*** __isset()* 當在類外部對未定義的屬性或者非公有屬性使用isset()函數時,__isset()將會被調用*///注:結合 property_exists() property_exists()用來檢測類中是否定義了該屬性 //用法:property_exists('magic',$key) 檢測在magic類中是否定義了$key屬性/*** __unset()* 對類中未定義的屬性或非公有屬性進行unset()操作時,將會觸發__unset()方法.* 如果屬性存在,unset操作會銷毀這個屬性,釋放該屬性在內存中占用的空間* 再用對象訪問這個屬性時,將會返回NULL*//*** __call()* 當試圖調用不存在的方法時會觸發__call()* __call()有兩個參數,即方法名和參數,參數以索引形式存在*/ /* class magic {function __call($func,$param){echo "$func method not exists";var_dump($param);} } $obj = new magic(); $obj-> register('param1','param2','param3'); //實例化的對象調用不存在的register()方法 *//** 瀏覽器結果顯示:* register method not existsarray(3) {[0]=>string(6) "param1"[1]=>string(6) "param2"[2]=>string(6) "param3"}*//*** toString()* 當使用echo或print打印對象時會被調用__toString()方法將對象轉化為字符串*/ /* class magic {function __toString(){return 'when you want to echo or print the object, __toString() will be called';} }$obj = new magic(); print $obj; //瀏覽器顯示 when you want to echo or print the object, __toString() will be called *//*** 自動加載* __autoload()* 當在代碼嘗試加載未定義的類時會觸發__autoload()函數* 用法簡單示例:*/ //假設有兩個文件為myClass.php和yourClass.php,另外, 在同一目錄下寫一個autoload.php文件,代碼如下/* // myClass.php代碼class myClass {function myName(){echo "My Name Is xiaobudiu";} }// yourClass.php代碼 class yourClass {function yourName(){echo "Your Name Is pgone";} }// autoload.php代碼 function __autoload($name){if(file_exists($name.".php")){$path = $name . 'php';require_once $path;}else{echo "The Path Is Error";} } $my = new myClass(); $my -> myName(); $your = new yourClass(); $your -> yourName(); *//*** 自動加載* spl_autoload_register(),和__autoload()方法功能相似,實現自動加載二選其一即可* 可以實現自動加載以及注冊給定的函數作為__autoload()的實現* 兩個參數 第一個參數autoload_function為要注冊的自動裝載函數,第二個參數throw為布爾值,true為默認,拋出異常;false不拋出異常* 實例:假設當前目錄下存在myClass.php和yourClass.php,并且代碼和上面一樣,autoload.php代碼進行更改*/ /* function my_autoloader($class) {include $class.'.php'; } spl_autoload_register('my_autoloader'); $my = new myClass(); $my->myName(); $your = new yourClass(); $your->yourName(); //此時運行autoload.php 執行結果 My Name Is xiaobudiu Your Name Is pgone *//*** 抽象類* abstract* 一種對下級代碼的規范* 抽象類和接口都是不能被實例化的特殊類* 可以在抽象類和接口中保留公共的方法,將抽象類和接口作為公共的基類* 一個抽象類必須至少包含一個抽象方法,抽象類中的方法不能被定義為私有的(private),因為抽象類中的方法需要被子類覆蓋* 同樣抽象類中的方法也不能用final修飾,因為其需要被子類繼承* 抽象類中的抽象方法不包括方法實體.如果一個類中包含了一個抽象方法,那么這個類也必須聲明為抽象類* 抽象方法不實現具體的功能,由子類來完成* 子類必須實現抽象類中的所有方法,否則會報錯* 語法: abstract class class_name {abstract public function func_name1(arg1, arg2);abstract public function func_name2(arg1, arg2, arg3); }**///示例:計算矩形的周長/* abstract class Shape {abstract protected function get_area(); }class Rectangle extends Shape {private $width;private $height;function __construct($width = 0, $height = 0){$this->width = $width;$this->height = $height;}function get_area(){echo ($this->width + $this->height) * 2;} } $Shape_Rect = new Rectangle(20, 10); $Shape_Rect->get_area(); *//*** 接口* interface* 一種對下級代碼的規范* 與抽象類不同,一個子類可以繼承自多個接口,接口之間用','隔開,* 接口實現了php的多重繼承* 接口需要被繼承,所以接口中定義的方法不能為私有方法或被final修飾* 接口中定義的全部方法都必須被子類實現,并且不能包含實體**/ //示例:定義database接口 /* interface Database {function connect($host, $username, $pwd, $db);function query($sql);function fetch();function close();function test(); }class mysql implements Database {protected $conn;protected $query;function connect($host, $username, $pwd, $db){$this->conn = new mysqli($host,$username,$pwd,$db);}function query($sql){return $this->conn->query($sql);}function fetch(){return $this->query->fetch();}function close(){$this->conn->close();}function test(){echo "test";} } *///類中的關鍵字/*** final* 子類可覆寫父類中的方法,但是在有些時候并不希望父類中的方法被重寫,這時只要在父類中的方法前加上final控制符,* 該方法便不能被子類重寫,否則會報錯*///錯誤示范: /* class father {final function test(){echo "My Name Is xiaobudiu";} }class son extends father {function test(){echo "My Name Is PGone";} } */ //執行程序,瀏覽器會報錯 Fatal error: Cannot override final method father::test()/*** clone* 可通過clone關鍵字克隆一個對象,克隆后的對象相當于在內存中重新開辟了一個空間* 克隆得到的對象擁有和原來對象相同的屬性和方法* 修改克隆得到的對象不會影響到原來的對象*/ //示例: /* class father {public $name = 'xiaobudiu';function test(){echo "test";} } $obj = new father(); $obj_clone = clone $obj; $obj_clone->name = 'PGone'; echo $obj_clone->name; //PGone echo $obj->name //xiaobudiu */// 如果使用"="將一個對象賦給一個變量,那么得到的將是一個對象得引用,通過這個變量改變屬性的值將會影響原來的對象 // 示例: /* class father {public $name = 'xiaobudiu';function test(){echo "test";} } $obj = new father(); $obj_clone = $obj; $obj_clone->name = 'PGone'; echo $obj->name,$obj_clone->name; // PGonePGone *//*** __clone()* 可以使用__clone()魔術方法將克隆后的副本初始化* 可以理解為當對象被克隆時自動調用這個方法*///示例: /* class father {public $name = 'xiaobudiu';function test(){echo "test";}function __clone(){echo "hi,shuaige";$this->name = 'PGone';//當克隆對象時,克隆后的對象得到的將是此處的name屬性值} } $obj = new father(); $obj_clone = clone $obj; //觸發__clone()方法 //hi,shuaige echo $obj->name,$obj_clone->name;//xiaobudiuPGone *//*** instanceof關鍵字* instanceof可以檢測對象屬于哪個類* 也可以用于檢測生成實例的類是否繼承自某個接口*/ //示例: /* class father {public $name = 'xiaobudiu';function test(){echo "test";} }interface Database {function test(); }class mysql implements Database {function test(){echo "test";} }$obj = new father(); $mysql = new mysql(); var_dump($obj instanceof father); var_dump($mysql instanceof Database); var_dump($obj instanceof Database); //bool(true) bool(true) bool(false) *//*** 正則表達式* php中有兩套函數庫支持正則表達式* PCRE(Perl Compatible Regular Expression)庫提供,與Perl語言兼容的正則表達式函數,以"preg_"為函數的前綴名稱* POSIX(Portable Operating System Interface)擴展語法正則表達式函數,以"ereg_"為函數的前綴名稱* PCRE的執行效率高于POSIX*//*** 普通字符* 如 'A','B','C'等*//*** 元字符* 分為單字元字符和多字元字符* 如;\d 與數字字符相匹配*//*單字符元字符 //* 零次或多次匹配前面的字符或表達式 zo* 與"z"和"zoo"匹配 {0,} //+ 一次或多次匹配前面的字符或表達式 zo+ 與"zo"和"zoo"匹配,但與"z"不匹配 {1,} //? 零次或一次匹配前面的字符或表達式 zo? 與"z"和"zo"匹配,但與"zoo"不匹配 {0,1} //^ 匹配搜索字符串開始的位置 ^\d{3} 與搜索字符串開始處的3個數字匹配 //^ 如果將^用作括號表達式的第一個字符,就會對字符集求反 比如: [^abc] 匹配除abc以外的任何字符 //$ 匹配搜索字符串結尾的位置 \d{3}$ 與搜索字符串結尾處的3個數字匹配 //. 匹配除換行符\n之外的任何單個字符 a.c與"abc","alc"和"a-c"匹配 //. 若要匹配包括\n在內的任意字符,可以使用[\s\S]之類的模式(\s \S屬于'非打印字符') //[] 標記括號表達式的開始和結尾 [1-4]與"1","2","3","4"匹配 [^aeiouAEIOU]與任何非元音字符匹配 //{} 標記限定符表達式的開始和結尾 a{2,3}與"aa"和"aaa"匹配 //() 標記子表達式的開始和結尾,可以保存子表達式,以備將來之用 A(\d)與"A0"至"A9"匹配 //| 指示在兩個或多個選項之間進行選擇 z|food 與"z"或"food"匹配; (z|f)ood與"zood"或"food"匹配 /// 表示JScript中的文本正則表達式模式的開始或結尾.在第二個"/"后添加單字符標志可以指定搜索行為 /// /abc/gi 是與"abc"匹配的JScript文本正則表達式.g(全局)標志指定查找模式的所有匹配項,i(忽略大小寫)標志使搜索不區分大小寫 //\ 轉義字符 \\與"\"匹配, \(與"("匹配, \n與換行符匹配 */ /*多字符元字符 \b 與一個字邊界匹配(即字與空格間的位置) er\b與"never"中的"er"匹配,但與"verb"中的"er"不匹配 \B 與非邊界字匹配 er\B與"verb"中的er匹配,但與"never"中的er不匹配 \d 與數字字符匹配,等效于[0-9] \d{2}與"12 345"中的"12"和"34"匹配 \D 與非數字匹配,等效于[^0-9] \D+與"abc123 def"中的'abc"和"def"匹配 \w 與a-z,A-Z,0-9,和下劃線中的任意字符匹配 在"my name is xiaobudiu..."中,\w與"my","name","is","xiaobudiu"匹配 \W 與除a-z,A-Z,0-9,和下劃線中的任意字符匹配 等效于[^a-zA-Z0-9] [xyz] 字符集,與任何一個指定字符匹配 [abc]與"plane"中的a匹配 [^xyz] 反向字符集,與未指定的任何字符匹配 [a-z] 字符范圍,匹配指定范圍內的任何字符 [^a-z] 反向字符范圍,與不在指定范圍內的任何字符匹配 {n} 正好匹配n次,n是非負整數 o{2}與'Bob'中的"o"不匹配,但與"food"中的"oo"匹配 {n,} 至少匹配n次,n是非負整數 o{2,}與'Bob'中的'o'不匹配,但與"fooood"中的所有"o"匹配 {n,m} 匹配至少n次,至多m次 在搜索字符串"1234567"中,\d{1,3}與"123","456"和"7"匹配 (模式) 與模式匹配并保存匹配項 (Chapter|Section) [1-9]與"Chapter 5"匹配,保存"Chapter"以備將來之用 (?:模式) 與模式匹配,但不保存匹配項以備將來之用 industr(?:y|ies)與industry|industries相等 *//*非打印字符 \f 換頁符 \n 換行符 \r 回車符 \t Tab字符 \v 垂直制表符 \s 任何空白字符,包括空格,制表符,換頁符 等效于[\f\n\r\t\v] \S 任何非空白字符 等效于[^\f\n\r\t\v] */#--------------------------- 正則表達式正式部分 ------------------------------------- /*** php中使用正則表達式** 匹配與查找* preg_match()* preg_match_all()* preg_grep()** 搜索與替換* preg_replace()* preg_filter()** 分割與轉義* preg_split()* preg_quote()*//*** 匹配與查找* preg_match* 返回int* 語法: preg_match($pattern,$subject [array & $matches[,$flags=0 [,$offset=0]]])* pattern是要搜索的模式,例如'/^def/';* subject是指定的被搜索的字符串* 它的值是0或1,在匹配一次后就會停止搜索*//* $subject = "abcdefghijkdef"; $pattern_1 = '/def/'; $num = preg_match($pattern_1, $subject); var_dump($num); */ // int(1)/*** 匹配與查找* preg_match_all()函數* 返回int* 與preg_match功能相似,只不過在搜索到一次結果之后會繼續搜索,知道末尾*//*** 匹配與查找* preg_grep()函數* 返回array* 可返回匹配模式的數組條目*/ /* //代碼示例: $subject = ['abc', 'def', 'efg', 'hijk', 'abcdef', 'defabc']; $pattern = '/def$/'; $grep_1 = preg_grep($pattern,$subject);//返回與$pattern匹配的元素組成的數組 var_dump($grep_1); $grep_2 = preg_grep($pattern, $subject, PREG_GREP_INVERT);//返回與$pattern不匹配的元素組成的數組 var_dump($grep_2); *//* //瀏覽器顯示:array(2) {[1]=>string(3) "def"[4]=>string(6) "abcdef" } array(4) {[0]=>string(3) "abc"[2]=>string(3) "efg"[3]=>string(4) "hijk"[5]=>string(6) "defabc" } *//*** 搜索與替換* preg_replace()* 返回替換之后的字符串* 三個參數,第一個參數:$pattern 搜索模式(規則) 可以是一個字符串或字符串數組* 第二個參數:$replacement 用于替換的字符串或字符串數組* 第三個參數:$subject 要進行搜索和替換的字符串或字符串數組* limit 每個模式在每個subject上進行替換的最大次數 默認-1(無限)* count 如果指定,就會被填充為完成的替換次數*/ /* $string_1 = 'lily likes apple,no reason'; $pattern_1 = ['/lily/','/likes/','/apple/']; $replacement_1 = ['tom','hates','orange']; echo preg_replace($pattern_1,$replacement_1,$string_1); //tom hates orange,no reason $arr = ['lily likes apple,no reason','Tom hates orange,no reason']; $pattern_2 = ['/no/','/reason/']; $replacement_2 = ['why','?']; var_dump(preg_replace($pattern_2,$replacement_2,$arr)); //array(2) { [0]=> string(22) "lily likes apple,why ?" [1]=> string(22) "Tom hates orange,why ?" } *//*** 搜索與替換* preg_filter()* 與preg_replace()功能相似* preg_filter()只返回執行替換的元素(替換后的)(沒執行替換的不返回)* 而preg_replace()返回全部元素(替換后的)(替沒替換都返回)*//*** 分割* preg_split* 通過一個正則表達式分割字符串* array preg_split($pattern $subject[,$limit=-1 [,$flag=0]])* $patern 用于搜索的模式(規則)* $subject 輸入字符串* $limit 如果指定,就將限制分隔得到的子串最多只有limit個,返回的最后一個子串將包含所有剩余部分 limit為-1,0,null時都代表不限制*/ //示例://$subject = "I LIKE APPLE,AND YOU"; //$patern = '/[\s,]+/'; //var_dump(preg_split($patern,$subject));/*array(5) {[0]=>string(1) "I"[1]=>string(4) "LIKE"[2]=>string(5) "APPLE"[3]=>string(3) "AND"[4]=>string(3) "YOU" }*//*** 轉義* preg_quote()* 函數轉義正則表達式* preg_quote($str [,$delimiter])* $str 函數會向字符串中的每一個特殊字符前增加一個反斜線* 如果指定了$delimiter,則在指定的$delimiter前也加反斜線* 正則表達式特殊字符包括 . \ + * ? [ ? ] $ ( ) { } = ! < > | : -*/ //示例: /* $keywords = "$40 for \a g3/400*10/x"; $keywords = preg_quote($keywords,'x'); echo $keywords; //\$40 for \\a g3/400\*10/\x *//*** 異常處理* php自帶的Exception異常類*//*error_reporting(0);//設置錯誤級別為0,不報錯 function theDatabaseObj() {$mysql = mysqli_connect('127.0.0.1','root2','root');if($mysql){return $mysql;}else{throw new Exception("could't connect to the database,try again");}}function db(){try{$db = theDatabaseObj();var_dump($db);}catch (Exception $e){echo $e->getMessage(); // echo $e->getCode(); // echo $e->getLine();} }db();*//*** 創建自己的異常類**/ /*class aException extends Exception {function aEX(){return "This is the bad way";} } class aaa {function a(){if (2 < 1) {echo "wrong";} else {throw new aException('你錯了,太笨了le');}}function b(){try{$b = $this->a();var_dump($b);}catch (Exception $E) {echo $E->getMessage();}} }$obj = new aaa(); $obj->b();*///實現的功能,調用exception異常處理 /* function aaa() {if($_GET['name'] == 'xiaobudiu') {return "尊貴的管理員,請登錄";} else {throw new Exception('你沒有權限登錄');} }function upload() {try {$upload = aaa();var_dump($upload);} catch (Exception $e) {echo $e->getMessage();} } upload();*//**.* php7中的錯誤處理* 大多數錯誤開始被當做Error異常拋出,而不是Exception異常* catch($Error $e)*/ /*try {$a = new zoo(); } catch (Error $E) {echo "error_msg:".$E->getMessage(); }*/ //error_msg:Class 'zoo' not found //注:這種Error異常處理方式只適用于php7,php5版本還是要用Exception異常類來處理錯誤及異常#-------------------------------- 圖像處理 ------------------------------------- /*** 圖像處理* 圖像處理要求GD庫*/ //使用函數查看一下當前安裝沒有GD庫 //echo "<pre>"; //var_dump(get_loaded_extensions());/*** 取得圖像大小* getimagesize()* 返回圖像的尺寸以及文件類型*/ //print_r(getimagesize('./Upload/IGS09651F94M.jpg'));/*瀏覽器結果 Array ([0] => 740 //寬度像素值[1] => 1166 //高度像素值[2] => 2 //圖像標記,gif是1,jpg是2,png是3,swf是4,psd是5....[3] => width="740" height="1166" //文本字符串[bits] => 8 //每種顏色的位數[channels] => 3 //RGB圖像是3,CMVK圖像是4[mime] => image/jpeg )*//*** getimagesizefromstring()* 從字符串中獲取圖像尺寸信息* 與getimagesize()函數的參數和返回結果相同,區別是getimagesizefromstring()的第一個參數是圖像數據的字符串表達,而不是文件名*/ //$img = file_get_contents('./Upload/IGS09651F94M.jpg'); //var_dump(getimagesizefromstring($img));/*瀏覽器結果:array(7) {[0]=>int(740)[1]=>int(1166)[2]=>int(2)[3]=>string(25) "width="740" height="1166""["bits"]=>int(8)["channels"]=>int(3)["mime"]=>string(10) "image/jpeg" }*//*** imagesx,imagesy* 取得圖像的寬度和高度*/ /*$img = imagecreatetruecolor(300,200); echo imagesx($img);//300 echo imagesy($img);//200*//*** 圖像繪制* imagecreate(),可創建一個基于調色板的圖像* 與imagecreateturecolor()作用和參數相同* 返回一個圖像標識符,代表了一幅大小為x_size和y_size的空白圖像* 1.創建畫布* 2.在畫布上繪制圖形* 3.保存并輸出結果圖像* 4.銷毀圖像資源*//* //創建一個空白畫布,并輸出一個png格式的圖片 header("Content-type:image/png");//設置mime類型 $image = @imagecreate(120,30) or die("Cannot Initialize new GD image stream"); //創建畫布$background_color = imagecolorallocate($image,255,255,0);//定義顏色imagepng($image);//輸出png格式圖像imagedestroy($image);//銷毀圖像資源,釋放內存 *//*** 定義顏色* imagecolorallocate()* 給圖像的邊框背景和文字等元素指定顏色* 返回一個標識符,代表由給定的RGB成分組成的顏色* 與imagecolorallocate()功能相似的第一個函數是imagecolorallocatealpha(),區別在于后者多了一個透明度參數0-127 127表示完全透明*//*** 繪制橢圓* imageellipse()*/ //新建一個空白的圖像 /* $image = imagecreatetruecolor(400,300); //填充背景色 $bg = imagecolorallocate($image,255,255,255); //選擇橢圓的顏色 $col_ellipse = imagecolorallocate($image,55,55,255); //畫一個橢圓 imageellipse($image,200,150,300,200,$col_ellipse); //輸出圖像 header("Content-type:image/png"); imagepng($image); *//*** 將文字寫入圖像* imagefttext()*///echo "<img src=code.php>";//生成圖片#--------------------------------- 目錄文件操作 -------------------------------------- /*** 判斷文件類型* filetype()* 返回文件的類型.可能值有fifo,char,dir,block,link,file和unknown,出錯返回false*/ //echo filetype('code.php');//file //echo filetype('./Public');//filedir/*** 判斷是否是一個目錄* is_dir()*/ //var_dump(is_dir('Upload'));//bool(true) //var_dump(is_dir('index.php'));//bool(false) //var_dump(is_dir('Upload/aa.jpg'));//bool(false)/*** 創建目錄* mkdir()* 創建成功返回true recursive值為true時,表示允許遞歸創建目錄*/ /*/ error_reporting(0); function mkd($name) {if (file_exists($name)) {echo "file already exists";} else {try {mkdir($name,0777,true);echo "創建成功";} catch (Exception $e) {throw new Exception('創建目錄失敗,請核查后重試');}} } mkd('./aa/bb'); *//*** 刪除目錄* rmdir* 嘗試刪除dir所指定的目錄.該目錄必須為空,并且要擁有相應權限*/ /* error_reporting(0); $dir = './aa/bb'; if (rmdir($dir)) {echo "Remove Dir Successfuly"; } else {die('failes to delete folders...'); } // 注:只能刪除一個文件夾,例如$dir中的'./aa/bb',就只刪除了一個bb文件夾,aa仍在 *//*** scandir* 列出指定路徑中的文件和目錄* 第二個參數shorting可選,設為1,即按字母降序,默認升序**/ //$dir = './'; //$dir1 = scandir($dir,1); //var_dump($dir1); /* array(16) {[0]=>string(9) "test.html"[1]=>string(11) "option.html"[2]=>string(11) "indexx.html"[3]=>string(9) "index.php"[4]=>string(5) "index"[5]=>string(11) "favicon.ico"[6]=>string(8) "code.php"[7]=>string(2) "aa"[8]=>string(6) "Upload"[9]=>string(6) "Public"[10]=>string(5) "2.css"[11]=>string(5) "1.php"[12]=>string(5) "1.css"[13]=>string(5) ".idea"[14]=>string(2) ".."[15]=>string(1) "." }*//*** dirname()* 返回路徑中的目錄部分*/ //echo dirname('./Public/favicon.ico'); // ./Public/*** 查看磁盤空間* disk_free_space(); 返回磁盤分區可用字節數* disk_total_space();返回磁盤分區總容量*///echo disk_total_space('/');//191392714752/*** 打開文件* fopen()* 有參數r,r+,w,w+,a,a+,x,x+,c,c+*//*** 讀取文件* fgets()* 第一個參數表示資源* 第二個參數表示讀取多少字節,默認1kb(1024字節)*/ /* $file = fopen("code.php", "r"); //輸出文本中所有的行,直到文件結束為止。 //feof() 函數檢測是否已到達文件末尾 (eof)。 //如果文件指針到了 EOF 或者出錯時則返回 TRUE,否則返回一個錯誤(包括 socket 超時),其它情況則返回 FALSE while(! feof($file)) {echo fgets($file). "<br />"; }fclose($file); */ /* //要求:讀取code.php中所有行數內容 //打開文件 $file = fopen('code.php',"r"); //讀取文件 while(!feof($file)){//只要不讀到末尾,就輸出本行echo fgets($file)."<br>"; } fclose($file); *//*** 獲取文件上次訪問的時間* fileatime()*/ /* $file = 'code.php'; if(file_exists($file)){echo $file."上次訪問的時間是".date("Y-m-d H:i:s",fileatime($file)); }else{echo "您所訪問的文件不存在,請核查后重新操作"; } //code.php上次訪問的時間是2018-01-08 00:17:28 *//*** 獲取文件上次被修改的時間* filemtime()*/ /* $file = "code.php"; if(file_exists($file)) {echo $file."上次修改的時間為".date("Y-m-d H:i:s", filemtime($file)); } else {echo "您所訪問的文件不存在,請核查后重新操作"; } //code.php上次修改的時間為2018-01-08 00:17:28 *//*** filesize()*獲取文件的大小* 返回文件大小的字節數*/ //echo filesize('./code.php');//1937/*** filetype()* 返回文件的類型*/ //echo filetype('./code.php');//file/*** stat()* 給出文件的詳細信息* 能返回上次訪問,上次修改,文件大小等各種信息*/ //var_dump(stat("./code.php")); /*array(26) {[0]=>int(4)[1]=>int(0)[2]=>int(33206)[3]=>int(1)[4]=>int(0)[5]=>int(0)[6]=>int(4)[7]=>int(1937)[8]=>int(1515341848)[9]=>int(1515341848)[10]=>int(1515334800)[11]=>int(-1)[12]=>int(-1)["dev"]=>int(4)["ino"]=>int(0)["mode"]=>int(33206)["nlink"]=>int(1)["uid"]=>int(0)["gid"]=>int(0)["rdev"]=>int(4)["size"]=>int(1937)["atime"]=>int(1515341848)["mtime"]=>int(1515341848)["ctime"]=>int(1515334800)["blksize"]=>int(-1)*//*** 復制文件* copy()* 第一個參數是resource,第二個參數dist表示復制到哪里*/ /* $file = './code.php'; $newfile = 'aa/code2.php'; if (copy($file,$newfile)) {echo "復制文件".$file."到".$newfile."成功"; } else {echo "復制文件".$file."失敗"; } *//*** 刪除文件* unlink()*/ /* $file = './aa/code2.php'; if(unlink($file)){echo "刪除文件".$file."成功"; }else{echo "刪除文件失敗"; } *//***移動或重命名文件* rename()*/ /* error_reporting(0); if(rename('2.php','1.php')) {echo "文件重命名成功"; } else {echo "Rename Failed"; } *//*** 文件指針* 可以實現文件指針的定位和 查詢,從而實現所需信息的快速查詢* rewind() 將文件位置指針設為文件流的開頭* fseek() 在文件指針中定位* ftell() 返回文件指針讀寫的位置*/ /* $file = "./code.php"; $file = fopen($file,"r"); echo ftell($file); */#------------------------------ COOKIE 及 SESSION ------------------------------------- /*** COOKIE* 一種存儲在客戶端的數據,能存儲cookie的客戶端不只是瀏覽器,但絕大多數都是由瀏覽器來實現的* 瀏覽器通過HTTP協議和服務端進行Cookie交互* 在實現過程中,編程語言是通過指令通知瀏覽器,然后是瀏覽器實現設置Cookie的功能的* 讀取cookie則是通過瀏覽器請求服務端時攜帶的HTTP頭部中的Cookie信息得來的*//*** 設置cookie* setcookie()* 第一個參數name是必選參數,表示cookie名稱* 第二個參數可選,value表示值* 第三個參數可選,expire表示cookie的有效時間,以秒為單位,不設置此值,瀏覽器關閉,cookie隨之失效* 第四個參數可選,path,設置有效目錄,設置為'/'表示當前目錄下均可用,設置為'/aa'表示只有aa目錄下可用* 第五個參數可選,domain,設置cookie的作用域名,默認在本域名下有效,比如設置為example.com表示在example域名下的所有子域名都有效* 第六個參數可選,secure,用來設置是否對Cookie進行加密傳輸,默認false,如果設置為true,則只有使用https時候才會設置Cookie* 第七個參數為true表示只能通過HTTP協議才能訪問Cookie,意味著客戶端javascipt不可以操作這個cookie,使用此參數可減少xss攻擊的風險* 注:php和javascript都可以設置cookie,不同的是,php設置的cookie需要刷新頁面后的下一次請求中才有效,而javascript設置的cookie在本次請求中就有效*//*** cookie經常用來存儲一些不敏感的信息,如用來防止刷票,記錄用戶名,限制重復提交等* 示例:限制重復提交* 原理:當用戶第一次提交表單時,設置cookie有效時間1分鐘,當再次提交時,判斷cookie是否過期來限制用戶的提交*//*** Session設置* $_SESSION[key] = value* Session存儲在服務器,本質上和Cookie沒有區別,都是針對HTTP協議的局限性而提出的一種保持客戶端和服務端間會話狀態的機制.**/ //開啟session會話 /* session_start(); //設置session $_SESSION['name'] = 'xiaobudiu'; session_id(); var_dump($_SESSION); echo "<hr>"; var_dump($_COOKIE); *///var_dump(get_loaded_extensions()); /*** 使用Redis存儲Session* 對于大訪問量的網站來說,會有許多客戶端和服務端建立連接,就會生成許多session文件,由于session文件是存儲在硬盤上的,因此每次* 服務器去讀取這些session文件都要經過許多I/O操作.* PHP可以使用session_set_save_handle()函數自定義session保存函數(如打開,關閉,寫入,讀取等),如果想使用php內置的會話機制之外的方式,* 可以使用本函數.例如,可以自定義會話存儲函數來將會話數據存儲到數據庫.函數參數說明如下:**/#--------------------------- Mysql數據庫的使用 ------------------------------------ /*** 關系型數據庫,數據以表格的形式出現* 每行為各種記錄名稱* 每列為記錄名稱所對應的數據域,許多的行和列構成一張數據表,許多的表構成一個數據庫**//*** MYSQLi連接操作數據庫**/ /*** Mysqli執行插入數據操作**/ /* $db = new mysqli('localhost','root','root','test'); $sql = "insert into `user` (`username`,`email`) VALUES (?,?)"; //定義參數 $username = "xiaobudiu"; $email = "xiaobudiu163@126.com"; //預處理 $sm = $db->prepare($sql); //綁定參數 $sm->bind_param('ss',$username,$email); //執行語句 if($sm->execute()) {echo "Insert Successfully"; } $db->close(); *//***MYSQLi查詢數據*/ /* $db = new mysqli('localhost','root','root','test'); $sql = "select * from user where uid<4"; $re = $db->query($sql); echo "<pre>"; while($arr = $re->fetch_assoc()) {var_dump($arr); } //釋放查詢結果 $re->free(); //斷開數據庫連接 $db->close(); */ /*array(3) {["uid"]=>string(1) "1"["username"]=>string(4) "kate"["email"]=>string(12) "kate@126.com" } array(3) {["uid"]=>string(1) "2"["username"]=>string(5) "admin"["email"]=>string(12) "admin@qq.com" } array(3) {["uid"]=>string(1) "3"["username"]=>string(4) "mary"["email"]=>string(14) "mary@itcast.cn" }*//*** pdo連接操作mysql數據庫*/ /* $dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'root'; $pass = 'root'; try {$pdo = new PDO($dsn,$user,$pass); // var_dump($pdo); } catch (PDOException $e) {echo "Connection failed:".$e->getMessage(); } */ /* //向數據表中插入數據 $dsn='mysql:dbname=test;host=127.0.0.1'; $user = 'root'; $pass = 'root'; //實例化pdo對象,連接數據庫 $pdo = new PDO($dsn,$user,$pass); //向數據庫插入數據 $sql = "insert into user (`username`,`email`) VALUES ('xiaowangba','sandjdsa@163.com')"; $re = $pdo->exec($sql); if ($re) {echo "向數據庫插入數據成功"; } else {var_dump($pdo->errorInfo()); } *//*** 修改數據表數據*/ /* $dsn='mysql:dbname=test;host=localhost'; $user = 'root'; $pass = 'root'; $pdo = new PDO($dsn,$user,$pass); $sql = "update user set username='wangxiaoping' where uid=8"; if ($pdo->exec($sql)) {echo "修改數據成功"; } else {echo "<pre>";var_dump($pdo->errorInfo()); } *//*** 刪除數據表中的數據**/ /* $dsn='mysql:dbname=test;host=127.0.0.1'; $user = 'root'; $pass = 'root'; $pdo = new PDO($dsn,$user,$pass); $sql = "delete from user where uid=7"; if ($pdo->exec($sql)) {echo "刪除數據成功"; } else {var_dump($pdo->errorInfo()); } *//*** 查詢數據表*/ /** $dsn='mysql:dbname=test;host=localhost'; $user = 'root'; $pass = 'root'; $pdo = new PDO($dsn,$user,$pass); $sql = "select `username`,`email` from user where `uid` BETWEEN 2 AND 8"; //預處理 $re = $pdo->prepare($sql); $re->execute(); $arrs = $re->fetchAll(); echo "<pre>"; var_dump($arrs);*/#------------------------------------------- PHP 與 Redis ------------------------------------------ /*** 關系型數據庫能滿足編程中一般的存儲查詢需求,隨著網站業務量的增加,我們還需要存儲許多數據,并且要求能夠很快的將數據查詢出來,這時,關系型數據庫mysql* 就會稍顯吃力.* 當網站用戶并發性非常高(高并發讀寫往往達到每秒上萬次請求)時,對于傳統關系型數據庫來說,硬盤I/O是一個很大的瓶頸,因為mysql的數據存儲是寫入磁盤上的.* 同時,網站每天產生的數據量是巨大的,對于關系型數據庫來說,在一張包含海量數據表中查詢效率也是非常低的* 針對關系型數據庫的不足,出現了很多NOSQL產品,這些數據庫中很大一部分都是針對某些特定應用需求出現的,對于該類應用具有極高性能,依據結構化方法以及應用* 場合不同,主要分為以下幾類:* 面向高性能并發讀寫的key-value數據庫,主要特點是具有極高的并發讀寫性能.Redis,TokyoCabinet,Flare是這類數據庫的代表* 面向海量數據訪問的面向文檔數據庫,這類數據庫的特點是可以在海量的數據中快速查詢數據,典型代表為MongoDB和CouchDB* 面向可擴展性的分布式數據庫,相對于傳統數據庫存在的可擴展性缺陷,這類數據庫可以適應數據量的增加以及數據結構的變化*//*** Redis是一個高級開源的key-value數據庫存儲系統.支持string,list,set,zset,hash 5種數據存儲類型,支持對數據的多種操作,能夠滿足絕大部分業務需求.* Redis中的數據都是緩存在內存中的,比讀取存儲在硬盤上的數據速度要快很多.* Redis支持數據的持久化操作,可通過配置,周期性的將內存中的數據寫入磁盤,提高了數據的安全性* Redis還支持主從同步,更好的解決了高并發的問題* Redis支持在Linux,Windows,MacOS系統中運行,但在實際應用場景中,推薦使用Linux系統.*//*** 在Linux系統使用Redis* http://redis.io/ 下載Redis安裝包* Redis采用"主版本號,次版本號,補丁版本號"的命名規則.次版本號的位置,偶數表示穩定版本,如1.2 2.0 ,奇數表示測試版本,如2.9代表測試版本,n那么3.0將會是2.9.x的穩定版本*這里建議lnamp或者lnmp一鍵安裝包* lnamp默認網站根目錄 /data/wwwroot/default/index.php*/#--------------------------------------- XML ----------------------------------------------- /*** 使用字符串生成xml**/ /* header('Content-type:text/xml'); $xmlstr=<<<XML <?xml version='1.0' standalone='yes'?> <movies><movie><title>shanpaojincheng</title><content>Two shan pao jin cheng</content></movie><plot><name>演的不錯</name></plot> </movies> XML; echo $xmlstr; //注: <<<xml 作用:將"<<<xml"和最后的"xml"之間的內容轉換成字符串; */ /* <movies><movie><title>shanpaojincheng</title><content>Two shan pao jin cheng</content></movie><plot><name>演的不錯</name></plot> </movies>*//*** 使用數組循環遍歷生成xml* 與使用字符串生成xml相比,數組生成xml則不用寫那么多<>標簽,輕松很多**/ /* header('Content-type:text/xml'); echo '<?xml version="1.0" ?>'."\n"; echo "<books>\n"; $books = [['bookname' =>'微信小程序開發實戰與應用實例','press'=>'清華大學出版社','publishtime'=>'2016-07'],['bookname'=>'一周微信公眾號開發入門到精通','press'=>'延安出版社','publishtime'=>'2017-5'] ]; foreach ($books as $book) {echo " <book>\n";foreach ($book as $tag=>$value){echo " <$tag>".htmlspecialchars($value)."</$tag>\n";}echo " </book>\n"; } echo "</books>"; *//* <books><book><bookname>微信小程序開發實戰與應用實例</bookname><press>清華大學出版社</press><publishtime>2016-07</publishtime></book><book><bookname>一周微信公眾號開發入門到精通</bookname><press>延安出版社</press><publishtime>2017-5</publishtime></book> </books>*//*** 通過PHP SimpleXML()解析xml,將字符串解析成對象,采用對象調用屬性的方式獲取值* SimpleXML()是用來處理XML最便捷的方案* 簡化了與xml的交互,可以把元素轉換成對象屬性,位于標簽之間的文本被指定給屬性* 如果同一個位置上有多個同名元素,n那么這些元素會被放在一個列表中.元素的屬性會被轉換成一個數組元素,其中* 數組的鍵是屬性名,鍵的值就是屬性值*/ //示例: /* $xmlstr=<<<XML <?xml version="1.0" standalone='yes' ?> <movies attr="qwe" ha="hahah屬性值"><movie a="shiyanshuxing"><title tt="tt屬性值">PHP從中階進階到大神</title><characters><character><name age="22 years old" country="china">lixiaoming</name><acter>onlivia actora</acter></character><character><name>Mr.coder</name><acter>xiaobudiu</acter></character></characters></movie> </movies> XML; $xml = simplexml_load_string($xmlstr); var_dump($xml);//將字符串變成xml對象 echo $xml->movie->title; echo ":"; echo $xml->movie->characters->character[0]->name; //獲取屬性值 echo $xml->movie->title['tt'] */#---------------------------------------- json的使用 ---------------------------------------- /*** json_encode() 將數組轉換成json編碼數據* json_decode() 對json格式的字符串進行解碼* PHP作為一門服務端語言,常被用來寫服務端接口邏輯,向客戶端返回json格式的數據* 與xml相比,在很多語言中,json數據的處理都比xml數據的處理簡單得多,json數據和數組可以實現非常方便的轉換* 在包含同樣信息的情況下,json數據字節數要比xml少很多* json這種便捷性和簡潔性使其可以取代xml成為互聯網信息的規范數據格式*//*** json_encode() 將數組轉換成json編碼數據*/ /* echo "連續數組"; $a = array('foo', 'zoo', 'xiaoming', 'xiaodong'); var_dump(json_encode($a)); //連續數組string(35) "["foo","zoo","xiaoming","xiaodong"]"echo "非連續數組"; $b = [1 => 'foo',2 => 'zoo',3 => 'XIAOMING',4 => 'XIAODONG' ]; var_dump(json_encode($b)); //非連續數組string(51) "{"1":"foo","2":"zoo","3":"XIAOMING","4":"XIAODONG"}"echo "刪除一個連續數組值的方式產生的非連續數組"; unset($a[1]); var_dump(json_encode($a)); //刪除一個連續數組值的方式產生的非連續數組string(41) "{"0":"foo","2":"xiaoming","3":"xiaodong"}"echo "二維數組"; $arr = array(array('name'=>'xiaobudiu','age'=>25,'sex'=>'man'),array('name'=>'PGone','age'=>25,'sex'=>'woman') ); var_dump(json_encode($arr)); //二維數組string(81) "[{"name":"xiaobudiu","age":25,"sex":"man"},{"name":"PGone","age":25,"sex":"woman"}]" *//*** json_decode()* 將json格式的字符串解碼* 第二個參數可選,選擇為true表示 將json字符串解碼成數組* 第二個參數默認false,解碼成對象object*/ //$json = '{"0":"foo","2":"xiaoming","3":"xiaodong"}'; //var_dump(json_decode($json)); /* object(stdClass)#1 (3) { ["0"]=>string(3) "foo" ["2"]=>string(8) "xiaoming" ["3"]=>string(8) "xiaodong" } */ //var_dump(json_decode($json,true)); /*array(3) {[0]=>string(3) "foo"[2]=>string(8) "xiaoming"[3]=>string(8) "xiaodong" } */#------------------------------------ MVC與ThinkPHP框架 --------------------------------------------- /*** mvc 一種軟件設計典范,用業務邏輯/數據/界面顯示分離 的方法組織代碼,將業務邏輯聚集到一個頁面里面,使得各部分的代碼做各自的事情,* 各個人員編寫的代碼負責特定的功能,降低了耦合度* 由mvc架構系統的程序執行流程:* controller截獲用戶發出的請求,調用model完成狀態的讀寫操作* controller把數據傳給view,view渲染最終效果并呈現給用戶.* 另外,php經常用來寫一些接口程序,提供接口返回特定格式的數據(一般是json),不同的客戶端(網頁前端,桌面客戶端,手機客戶端等)可通過調用接口* 獲得數據.*//*** 常用的php開源框架* ThinkPHP tp是為了簡化企業級應用開發和敏捷Web應用開發而誕生.* Yii 用于開發大型web應用.基于組件的高性能php框架通過一個簡單的命令行工具yiic可以快速創建一個web應用程序的代碼框架.* CI 組件的導入和函數的執行只有在被要求執行的時候才執行,而不是在全局范圍,因此默認的系統非常輕量級,為了達到最大的用途,每個類和它的功能都是高度自治的.* Laravel 一套簡潔,優雅的php web開發框架* Yaf (yet another framework) 提供了bootstrap,路由,分發,視圖,插件 ,是一個全功能的php框架*//*** tp5支持使用composer安裝**/#---------------------------------- 設計模式 -------------------------------------------- /*** 分為3大類:創建型模式,結構型模式,行為型模式,還有一種J2EE設計模式,共23種設計模式(設計模式-可復用的面向對象軟件元素)* 工廠模式以及單例模式屬于創建型模式.* 創建型模式的描述:這些設計模式提供了一種在創建對象的同時,隱藏創建邏輯的方式,而不是使用新的運算符直接實例化對象.* 這使得程序在判斷針對某個給定實例需要創建哪些對象時更加靈活*/ /*** 工廠模式* 工廠模式屬于創建型模式,提供了一種創建對象的方式.* 工廠模式是先定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類.* 工廠模式的精髓就是可以根據不同的參數生成不同的類實例*/ //示例:加減乘除工廠類實例 //定義接口 /* interface Calc {public function getValue($num1,$num2); }//創建實現接口的實體類 class Add implements Calc {public function getValue($num1, $num2){return $num1+$num2;} }class Sub implements Calc {public function getValue($num1, $num2){return $num1 - $num2;} }class Mul implements Calc {public function getValue($num1, $num2){return $num1 * $num2;} }class Div implements Calc {public function getValue($num1, $num2){try {if ($num2 == 0){throw new Exception('除數不能為0');} else {return $num1 / $num2;}} catch (Exception $e) {echo "錯誤信息:".$e->getMessage();}} } // 創建一個工廠,生成基于給定信息的實體類的對象 class Factory {public static function createObj($operate){switch ($operate) {case '+':return new Add();break;case '-':return new Sub();break;case '*':return new Mul();break;case '/':return new Div();break;}} }$test=Factory::createObj('-'); echo $test->getValue(1,4); //注:其實想實現本功能,定義一個類,一個公共方法,方法里采用switch也可以實現本功能,但為了代碼的可讀性以及代碼的執行效率,所以采用工廠類; //注;這樣,我們就實現了根據用戶輸入的操作符實例化相應的對象,進而完成接下來相應的操作.在軟件開發中,php可能要鏈接mysql,也可能鏈接sqlserver. //或者其他數據庫,這樣我們就可以定義一個工廠類,動態生成不同的數據庫連接對象; //再比如設計一個連接服務器的框架,需要三個協議,即pop3,imap,http,可以把這三個作為產品類,共同實現一個接口.工廠模式使用場景很多,需要在實 //際開發中嘗試1應用 *//*** 單例模式* 單例模式涉及一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建* 單例模式主要解決一個全局使用的類被頻繁創建與銷毀的問題* 由于只創建了一個類的實例,因此減少了內存的開銷,節省了系統資源* php中,單例模式經常被用在數據庫應用中.*/ //代碼示例: /* class Student {//私有的靜態屬性, 作用是為了存儲對象的.private static $_instance=null;//私有的構造方法,保證不允許在類外 newprivate function __construct(){}//私有的克隆方法, 保證不允許在類外 通過 clone 來創建新對象private function __clone(){}//公有的靜態方法, 作用,就是用來實例化對象public static function getInstance(){//將創建的新對象存儲到靜態屬性中//判斷靜態屬性中是否為空if (is_null(self::$_instance)) {//如果為空,則創建新對象,并將新存儲賦給靜態屬性$instanceself::$_instance = new self;}//如果$instance不為空,則直接將對象返回return self::$_instance;} } //調用靜態方法來創建對象 $obj = Student::getInstance(); $obj2 = Student::getInstance();//此行不再創建新對象 //var_dump($obj); //var_dump($obj2); *//*** 觀察者模式* 一種事件系統.有兩個類,a類和b類,a類允許b類觀察,獲取a類的狀態,當a類狀態發生改變的時候,b類可以收到通知,并作出相應的動作* 觀察者模式提供了避免組件之間緊密耦合的另一種方法* 比如要實現用戶注冊后發送郵件通知管理員和用戶自己填寫的郵箱的功能,我們可以將發送郵件給管理員和用戶自己都寫在這個實現用戶注冊* 的類里(使用觀察者實現),這樣,即使在以后更改了用戶注冊邏輯也不會影響到發送郵件的功能實現* 再比如當用戶下單購買一件商品時,我們需要將購買記錄寫入文本日志,數據庫日志,還要發送短信,送抵兌換券積分等,我們可以在主體類中實* 現下單購買的流程并定義一個觀察者接口,當用戶下單后通知各個觀察者對象執行自己的業務邏輯.*///示例1 //觀察者模式設計兩個類 //男人類和女人類 //男人類對象 xiaoming 女人類對象 xiaohua mother /* class man {//定義數組屬性,用于存放觀察者對象protected $observers=[];//將傳進來的觀察者對象存入觀察者數組中的方法function addObserver($observer){$this->observers[]=$observer;}//刪除觀察者的方法function delObserver($observer){//查找觀察者在數組中的鍵值$key=array_search($observer,$this->observers);//根據鍵值刪除對應觀察者unset($this->observers[$key]);}//男人buy()方法function buy(){foreach ($this->observers as $girl) {//當被觀察者作出buy()這個行為時,讓觀察者得到通知,并作出相應的反應$girl->dongjie();}} }class woman {function dongjie(){echo "你的兒子或者男朋友正在花錢<br>";} } //創建被觀察著對象 $xiaoming = new man(); //創建觀察者對象 $xiaohua = new woman(); $mother = new woman(); //為xiaoming添加觀察者 $xiaoming->addObserver($mother); $xiaoming->addObserver($xiaohua); //$xiaoming->delObserver($xiaohua); //xiaomign執行buy()之后,看觀察者xiaohua和mother是否能得到通知,并作出相應反應 $xiaoming->buy(); *///示例2: /*** 場景描述:* 哈票以購票為核心業務(此模式不限于該業務),但圍繞購票會產生不同的其他邏輯,如:* 1、購票后記錄文本日志* 2、購票后記錄數據庫日志* 3、購票后發送短信* 4、購票送抵扣卷、兌換卷、積分* 5、其他各類活動等** 傳統解決方案:* 在購票邏輯等類內部增加相關代碼,完成各種邏輯。** 存在問題:* 1、一旦某個業務邏輯發生改變,如購票業務中增加其他業務邏輯,需要修改購票核心文件、甚至購票流程。* 2、日積月累后,文件冗長,導致后續維護困難。** 存在問題原因主要是程序的"緊密耦合",使用觀察者模式將目前的業務邏輯優化成"松耦合",達到易維護、易修改的目的,* 同時也符合面向接口編程的思想。** 觀察者模式典型實現方式:* 1、定義2個接口:觀察者(通知)接口、被觀察者(主題)接口* 2、定義2個類,觀察者對象實現觀察者接口、主題類實現被觀者接口* 3、主題類注冊自己需要通知的觀察者* 4、主題類某個業務邏輯發生時通知觀察者對象,每個觀察者執行自己的業務邏輯。*/#--------------------------------- 定義觀察者、被觀察者接口 ----------------------------- /* //觀察者接口(通知接口) interface guancha {function onBuyTicketOver($sender, $args); //得到通知后調用的方法 }//被觀察者接口(主題接口) interface beiguancha {function addObserver($observer); //提供添加觀察者的方法 }/主題類實現/////主題類(購票)實現主題接口(被觀察者) class buyPiao implements beiguancha {private $_observers = []; //數組存放觀察者對象public function buyTicket($ticket) //購票核心類,處理購票流程{//購票邏輯//循環通知,調用其onBuyTicketOver實現不同業務邏輯foreach ($this->_observers as $obs) {$obs->onBuyTicketOver ($this, $ticket); //$this 可用來獲取主題類句柄,在通知中使用}}//添加通知public function addObserver($observer) //添加N個通知{$this->_observers [] = $observer;} }#--------------------------------------- 定義多個通知 ------------------------------------//短信日志通知 class HipiaoMSM implements guancha {public function onBuyTicketOver($sender, $ticket){echo (date ( 'Y-m-d H:i:s' ) . " 短信日志記錄:購票成功:$ticket<br>");} } //文本日志通知 class HipiaoTxt implements guancha {public function onBuyTicketOver($sender, $ticket){echo (date ( 'Y-m-d H:i:s' ) . " 文本日志記錄:購票成功:$ticket<br>");} } //抵扣卷贈送通知 class HipiaoDiKou implements guancha {public function onBuyTicketOver($sender, $ticket){echo (date ( 'Y-m-d H:i:s' ) . " 贈送抵扣卷:購票成功:$ticket 贈送10元抵扣卷1張。<br>");} }#------------------ 用戶購票 ------------------ $buy = new buyPiao(); $buy->addObserver ( new HipiaoMSM () ); //根據不同業務邏輯加入各種通知 $buy->addObserver ( new HipiaoTxt () ); $buy->addObserver ( new HipiaoDiKou () ); //購票 $buy->buyTicket ( "一排一號" ); *//*** 策略模式* 與工廠模式實現的功能相似,區別是工廠模式關注的是對象的創建,提供創建對象的接口,是創建型的設計接口,接收指令,創建出符合要求的實例* 策略模式是行為型的設計模式,接受已經創建好的實例,實現不同的行為**/#------------------------------------------- 開始進入API的世界 ------------------------------------------------ /*** 隨著移動網絡的發展,多終端的出現,為了降低服務端的工作量,和以后的維護量,我們希望開發一套可適用于多個終端的接口.* 面向接口編程要求我們將定義和實現分開,盡可能編寫粒度更細的接口,降低各個接口之間的依賴度,這些接口通過一定的組合能夠對外提供一套系統服務**/#---------------------- 傳輸消息加解密 -------------------------- /*** 單向散列加密* 常用的單向散列加密:MD5,SHA等* 單向加密是對不同輸入長度的信息進行散列計算,得到固定長度的散列計算值.輸入信息的任何微小變化都會導致散列的很大不同,并且這種計算是不可逆的* 即無法根據散列值獲得明文信息.這種單向散列加密可用于用戶密碼的保存.即不將用戶輸入的密碼直接保存到數據庫,而是對密碼進行單向散列加密.將密文* 存入數據庫,用戶登陸時進行密碼驗證,同樣對輸入的密碼進行散列加密,與數據庫中密碼的密文進行對比,若一致,則驗證通過* 雖然不能通過算法從散列密文解出明文,但是由于人們設置的密碼具有一定的模式(比如使用生日或名字作為密碼),因此通過彩虹表(密碼和對應的密文關系表)* 等手段都可以猜測式的1破解.為了增加單向散列被破解的難度,還可以給散列算法加鹽值(salt),salt相當于加密時的鑰匙,增加破解時的難度*//*** 對稱加密* 對稱加密是指加密和解密使用的是同一個秘鑰.對稱加密類似接口簽名驗證,將明文和密鑰按照一定的算法進行加密,同樣使用密鑰和一定的算法對密文進行解密* 獲得明文.* PHP提供了一個MCRYPT擴展,可用于對稱加密.* 注:php7開始,已經對mcrypt加密方式進行刪除,官方不推薦此方式了.**/ /*** mycrpt加密需要以下幾個步驟:**/ //示例1/* $str = "我的名字是?一般人我不告訴他!"; //加密內容 $key = "key25111"; //密鑰 $cipher = MCRYPT_DES; //密碼類型 $modes = MCRYPT_MODE_ECB; //密碼模式 $iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher, $modes), MCRYPT_RAND);//初始化向量 echo "加密明文:".$str."<p>"; $str_encrypt = mcrypt_encrypt($cipher, $key, $str, $modes, $iv); //加密函數 echo "加密密文:".$str_encrypt." <p>"; $str_decrypt = mcrypt_decrypt($cipher, $key, $str_encrypt, $modes,$iv); //解密函數 echo "還原:".$str_decrypt; *//***非對稱加密* RSA是目前最有影響力的公鑰加密算法*與對稱加密不同的是,非對稱加密和解密使用的是不同的密鑰,其中一個對外公開作為公鑰,另一個只有私有者私有,成為私鑰.用私鑰加密的*信息只有公鑰能夠解開,反之用公鑰加密的信息只有私鑰能夠解開.*常用的非對稱加密有RSA算法*RSA算法基于一個非常簡單的數論事實,將兩個大質數相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰*PHP中,提供基于RSA算法的openssl擴展可實現對數據的非對稱加密*/#------------------------------- 使用ajax進行交互 ---------------------------------- /*** 把網頁看成客戶端,服務端以提供接口的形式向客戶端提供數據的增刪改查服務.* 在網頁開發中,經常使用ajax技術實現客戶端與服務端的數據交互* ajax是一種在無須重新加載整個網頁的情況下能夠更新部分網頁的技術.* ajax通過在后臺與服務器進行少量的數據交換可以使網頁實現異步更新.*///檢測用戶名是否可用 //假設用戶名為zhangsan和lisi已經被使用了 /***html代碼 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>檢測用戶名是否被使用</title> </head> <body> 用戶名:<input type="text" name="name" id="name"><span id="span"></span> </body> <!--實現的功能是:當用戶輸入完用戶名,失去焦點時,自動檢測是否被使用了--> <script>//獲取input元素var input = document.getElementById('name');//給其綁定失去焦點事件input.οnblur = function () {//創建xhr對象xhr = new XMLHttpRequest();//獲取用戶輸入的用戶名var name = this.value;//狀態確認后才接收數據xhr.onreadystatechange = function () {if (xhr.readyState == 4 && xhr.status == 200) {if (xhr.responseText == 1) {document.getElementById('span').innerHTML = "<font color='red'>baoqian,您輸入的用戶名已經有人注冊</font>"} else {document.getElementById('span').innerHTML = "<font color='#7fffd4'>gongxi,可以注冊此用戶名</font>"}}}//設置請求xhr.open('get','index.php?name='+name,true);//發送請求xhr.send();} </script> </html>*/ /***php代碼*/ /* $name = $_GET['name']; if ($name == 'zhangsan') {echo 1; } else {echo 2; } */

總結

以上是生活随笔為你收集整理的PHP基础(必须熟练掌握的基础)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲亚洲精品在线观看 | 成人免费在线观看av | 一级黄色片在线免费看 | 国产视频欧美视频 | 久插视频| 亚州欧美视频 | 国产一区二区三区高清播放 | 91九色综合 | 人人添人人澡人人澡人人人爽 | 欧美一二三视频 | 国产精品毛片一区二区在线看 | 免费高清在线视频一区· | 欧洲亚洲国产视频 | 久久精品一 | 欧美日韩在线免费视频 | 一级久久精品 | 婷婷丁香花五月天 | 亚洲精品456在线播放 | 四虎国产精品成人免费4hu | 91精品一区二区在线观看 | 国产精品久久久久aaaa九色 | 欧美激情操 | 精品自拍网 | 国产精品久久一区二区三区, | 黄色软件网站在线观看 | www免费网站在线观看 | 欧美一区二区三区免费看 | 超碰97在线资源站 | av网站大全免费 | 亚洲精欧美一区二区精品 | 久久国产电影院 | 天天干夜夜 | jizzjizzjizz亚洲 | 免费看一及片 | 国产又黄又爽无遮挡 | 91精品免费在线观看 | 日本三级不卡视频 | 久久综合久久综合久久综合 | 最新日韩视频在线观看 | 国产午夜精品久久久久久久久久 | 日韩精品一区二区在线观看 | 99视频国产精品 | 在线成人免费 | 91九色porny蝌蚪主页 | 日本黄色免费看 | 精品久久久久久国产偷窥 | 中文字幕超清在线免费 | 99精品国产成人一区二区 | 久久男人中文字幕资源站 | av短片在线观看 | 久久不卡国产精品一区二区 | 中文字幕在线看视频国产 | 在线电影播放 | 精品国产成人在线 | av成人动漫在线观看 | 免费久久网 | 色网站在线 | 看av免费 | 成人久久久久久久久久 | 中文字幕无吗 | 天天爱天天操天天干 | 亚洲天堂网视频在线观看 | 国产日产高清dvd碟片 | 在线精品在线 | www.狠狠| 国产二区精品 | 国产裸体永久免费视频网站 | 久久精视频 | 黄色小说视频网站 | 丰满少妇对白在线偷拍 | 午夜久久久影院 | 青春草免费视频 | 久章操 | 亚洲最大色 | 狠狠操天天操 | 欧美一级大片在线观看 | 一级性av| 国产v在线 | 国产成人久久av977小说 | 亚洲精品美女久久久 | 国产精品日韩久久久久 | 中文字幕一区二区在线播放 | 91亚洲精| 久久99久久99精品免观看软件 | 日日夜精品 | 五月香婷 | 午夜黄色一级片 | 最近日本中文字幕 | 亚洲黄色一级电影 | 亚洲欧美日韩在线一区二区 | 国产亚洲欧美精品久久久久久 | 四虎成人免费影院 | 2021国产在线 | 国产精品入口传媒 | 波多野结衣精品在线 | 日韩在线观看中文 | 91自拍成人 | 国产99久久久国产精品 | 波多野结衣视频一区二区三区 | 久久天天操 | 国产女人40精品一区毛片视频 | 欧美久久久久久久久 | 日本韩国在线不卡 | 久久精品一二区 | 国产精品av免费在线观看 | 欧美成人va | 最新色站 | 国产福利一区二区在线 | 亚洲日本精品视频 | 国产成人av网 | 日韩中文字幕免费电影 | 视色网站 | 9999国产精品 | 日韩精品专区在线影院重磅 | 日韩视频免费 | 日韩欧美v| 日韩综合第一页 | 国产另类av| avwww在线 | 久久婷婷精品 | 在线观看mv的中文字幕网站 | 热久久国产 | 亚洲精品乱码久久久久久 | 成人91在线 | 五月天综合网站 | 久久嗨 | 免费黄色在线播放 | 国产精品黄色av | 96亚洲精品久久久蜜桃 | 日韩精品中文字幕在线观看 | 国际av在线 | 久久人人爽人人爽 | 日本天天操 | 久久久九色精品国产一区二区三区 | 丝袜制服天堂 | 国产精品女人网站 | 亚洲一级特黄 | 91九色在线视频观看 | 婷婷av网 | 日本中文字幕网站 | 国产亚洲欧美精品久久久久久 | 六月丁香社区 | 黄色国产在线观看 | 亚洲欧美日韩精品久久久 | 国产中文a | 日本黄色免费看 | 亚洲午夜av电影 | 五月天亚洲婷婷 | 国产美女网站视频 | 欧美综合在线视频 | av成人黄色| 国产99久久九九精品免费 | 国产午夜一级毛片 | 深夜免费福利视频 | 国产精品视频区 | av福利超碰网站 | 亚洲做受高潮欧美裸体 | 日韩免费在线视频 | 丰满少妇一级 | 成人毛片一区 | 久久久91精品国产一区二区三区 | 日本中文字幕网 | 一级黄色大片 | 成人福利在线播放 | 国内外成人在线视频 | 亚洲第一香蕉视频 | 国产v在线播放 | 国产精品美女久久久免费 | 97在线资源 | 在线观看一| 97超在线 | 国产+日韩欧美 | 国产一级片视频 | 九九热在线免费观看 | 五月天最新网址 | 美女网站在线 | www久久99| 操操操日日 | 国产黑丝一区二区三区 | 免费99视频| www..com黄色片| 天堂网在线视频 | 国产精品毛片一区视频播 | 国内精品视频久久 | 中文字幕资源网在线观看 | 久草.com| 免费日韩在线 | 国产xx在线 | 国产精品中文字幕av | 国产热re99久久6国产精品 | 天天干夜夜爱 | 日本最新高清不卡中文字幕 | 日韩欧美一区视频 | 91精品久久久久久久91蜜桃 | 亚洲综合一区二区精品导航 | 国产高清在线免费 | 精品久久久久久久久久久久久久久久久久 | 国产成人福利在线 | 色偷偷88888欧美精品久久 | 国产xxxx性hd极品 | 黄污视频大全 | 国产在线永久 | 久久国产三级 | a级免费观看 | 97电院网手机版 | 91麻豆精品国产91久久久无限制版 | 黄色毛片电影 | 久热久草| 国产区久久 | a级国产乱理论片在线观看 伊人宗合网 | 亚洲成aⅴ人片久久青草影院 | 在线免费观看成人 | 日韩高清精品免费观看 | 国产精品中文在线 | 男女男视频 | 黄色看片 | av高清一区 | 97手机电影网 | 婷婷五情天综123 | 亚洲综合黄色 | 日韩视频区 | 国产a级片免费观看 | 在线播放国产精品 | 久久久男人的天堂 | 最近中文字幕视频完整版 | 在线va视频 | 成人91在线 | 激情久久伊人 | 久久免费a | 国产成人精品一区二区三区在线观看 | 国产一区在线观看免费 | 狠狠gao| 国产成人精品久久久久 | 中文十次啦| 中文字幕日本在线 | 成人欧美一区二区三区在线观看 | 欧美在线free | 久久免费精品视频 | 91中文字幕 | 有没有在线观看av | 国产 亚洲 欧美 在线 | 麻豆视频免费看 | 夜夜骑日日 | 99热在线国产精品 | 国产性xxxx | 4438全国亚洲精品在线观看视频 | www视频免费在线观看 | 婷婷激情综合网 | 蜜桃视频日韩 | 久久er99热精品一区二区三区 | 色爱成人网 | 色综合天天狠天天透天天伊人 | 欧美贵妇性狂欢 | 99久e精品热线免费 99国产精品久久久久久久久久 | 五月丁香| 国产小视频在线免费观看 | 91最新国产 | 天天爽夜夜爽人人爽一区二区 | 操操碰| 色综合天天色综合 | 亚洲理论电影 | 国产视频一区二区在线播放 | 热re99久久精品国产66热 | 亚洲婷婷伊人 | 91精品在线播放 | 四虎影视av | 狠狠的操你 | 色婷婷综合激情 | 最近中文字幕国语免费av | 三级a视频 | 国产高清免费视频 | av网站手机在线观看 | 在线观看日韩一区 | 成年人黄色免费视频 | 91片黄在线观看 | 免费在线播放视频 | 2018好看的中文在线观看 | 国产尤物视频在线 | 婷婷深爱网 | 一级特黄av| 久久99精品久久久久久三级 | 色吊丝在线永久观看最新版本 | 国产精品久久久久永久免费看 | 色狠狠干 | 激情丁香久久 | 永久中文字幕 | 国产资源精品在线观看 | 国产亚洲一区二区在线观看 | 日日婷婷夜日日天干 | 97视频免费在线观看 | 国产美女视频免费 | 日韩精品久久久免费观看夜色 | 中文有码在线 | 91九色网址 | 亚洲激情av| 久久99久久99久久 | 国产午夜精品一区 | 天天拍天天爽 | 日韩视频免费观看高清完整版在线 | 日韩免费观看视频 | 亚洲激情在线观看 | 999久久久欧美日韩黑人 | 天天精品视频 | 亚洲婷婷网 | 欧美一级片免费 | 国产精品一区二区三区在线 | 狠狠躁夜夜a产精品视频 | 国产亚洲人成网站在线观看 | 亚洲午夜精品电影 | bbbbb女女女女女bbbbb国产 | 久久激情视频 久久 | h视频在线看| 日韩小视频网站 | 粉嫩高清一区二区三区 | 日韩欧美一区二区三区在线 | 久久久久国产精品一区 | 国产最新在线 | 欧美成年人在线观看 | 久操久 | 亚洲天堂精品视频 | 久久久久久久久久久免费 | 综合网天天射 | 日韩在线视频看看 | 午夜视频免费播放 | 久久黄色片| 国产成人一区二区三区在线观看 | 久草视频中文 | 在线看片视频 | 国产精品免费一区二区 | 欧美-第1页-屁屁影院 | 国产高清久久 | 亚洲免费精彩视频 | 久久亚洲欧美 | www.成人sex | 一区二区三区四区精品视频 | 国产精品久久久久久久久久久免费看 | 日韩av一区在线观看 | 亚洲高清色综合 | 国产一级电影免费观看 | 国产美女视频免费观看的网站 | 亚洲欧洲中文日韩久久av乱码 | 久久久亚洲成人 | 色综合www | 在线观看视频91 | 人人超碰97 | 美女视频又黄又免费 | 日韩精品不卡在线观看 | 欧美视频在线二区 | 国产网站在线免费观看 | 日韩欧美网址 | 人人涩| 欧美尹人 | 日韩欧美高清一区二区 | 国产一级a毛片视频爆浆 | 国产精品久久久久久久久久久久午 | av在线影视| 亚洲精品成人在线 | 最新av网站在线观看 | 久草在线视频网站 | 国产精品中文久久久久久久 | 欧美一级片在线观看视频 | 91中文字幕永久在线 | 9在线观看免费高清完整 | 天天爱天天操 | 成人av片免费看 | 麻豆免费视频网站 | 国产成人免费av电影 | 日日日天天天 | 国产破处精品 | 91精品国产91久久久久 | 日韩视频一 | 日本一区二区三区免费观看 | 人人干,人人爽 | 久久成人欧美 | 中文字幕在线观看国产 | 日韩一级片大全 | 天天亚洲综合 | 欧美日韩不卡在线观看 | 成人午夜电影在线观看 | 爱爱一区 | 欧美日韩免费视频 | 亚洲综合欧美日韩狠狠色 | 菠萝菠萝蜜在线播放 | 手机av电影在线 | 日韩精品三区四区 | 欧美一级片免费播放 | 久久综合九色综合97_ 久久久 | 色婷婷97 | 国产精品aⅴ | 97视频免费在线观看 | 亚洲免费av网站 | 国产午夜一区二区 | 最新日韩中文字幕 | 久久久影院官网 | 亚洲一区网| 亚洲精选99 | 中文字幕国产 | 国产超碰在线观看 | 青草视频在线免费 | 成人三级网站在线观看 | 五月婷婷综合在线 | 狠狠干天天操 | 天天操天天添 | 手机在线小视频 | 久在线观看视频 | 天天舔夜夜操 | 一区二区三区在线观看 | www.五月天激情 | 亚洲黄色小说网 | 成人在线播放免费观看 | 日韩影视在线观看 | 欧美专区亚洲专区 | 亚洲高清在线观看视频 | 日韩黄色免费电影 | 成年人在线电影 | 最新国产一区二区三区 | 一区二区三区电影 | 国产美女精品 | 久久久精品成人 | 91香蕉视频污在线 | 日本中文字幕视频 | 日本性高潮视频 | 亚洲成人家庭影院 | 五月婷婷在线观看 | 久久久午夜精品福利内容 | www久久精品| 国产精品一区二区三区观看 | 欧美精品视 | 天天干天天看 | 最近免费观看的电影完整版 | 永久免费的av电影 | 午夜12点 | 毛片888| 在线观看国产中文字幕 | 久久一级电影 | www.狠狠操.com | 国产精品黄| 午夜视频在线观看一区二区 | 日韩免费视频在线观看 | 婷婷国产v亚洲v欧美久久 | 精品国产免费看 | 国产视频1 | 亚洲精品视频在线免费 | 人人爱在线视频 | 中文字幕在线视频一区 | 六月丁香激情综合色啪小说 | 国产一级特黄电影 | 日韩在线小视频 | 国产一区网址 | 久久无码精品一区二区三区 | 色网免费观看 | 狠狠色狠狠色终合网 | 成人精品久久 | 三级毛片视频 | 国产伦理一区二区三区 | 热久在线 | 久久久首页 | 91亚洲国产 | 四虎成人精品在永久免费 | 日韩中字在线 | 久久免费精彩视频 | 亚洲午夜精品久久久久久久久久久久 | 91看片在线看片 | 国产在线国偷精品产拍免费yy | www.91国产 | 欧美日韩国产一二 | 日韩区在线观看 | 亚洲一级黄色大片 | 成年人三级网站 | 精品久久一区 | 99精品视频网站 | 天天天干| 天天射天天射天天 | 久久综合中文字幕 | 亚洲v欧美v国产v在线观看 | 人人看人人草 | 97超碰中文字幕 | 天天操天天摸天天射 | 久久精品一区二区三区四区 | 欧美成人亚洲成人 | 99久久精品国产一区二区成人 | 国产91精品欧美 | 91九色最新 | 久久tv| 黄色视屏在线免费观看 | 一区二区欧美日韩 | 免费欧美精品 | 亚洲午夜精品久久久久久久久 | 国精产品满18岁在线 | 日韩在线观看小视频 | 亚洲精品一区二区在线观看 | 五月激情久久久 | 国产二区视频在线观看 | 最新av在线网址 | 日韩高清片 | 欧美日韩在线免费观看视频 | 91精品国自产在线偷拍蜜桃 | 国产精品美女在线 | 2018好看的中文在线观看 | 欧美日韩中 | 国产又黄又硬又爽 | 在线视频99 | av字幕在线 | 日本久久久久久久久久久 | 久久国产精品久久精品 | 亚洲天堂自拍视频 | 精品一区二区免费视频 | 亚洲最大av网 | 精品国产一区二区三区日日嗨 | 国内视频1区 | 日本狠狠色| 在线观看国产永久免费视频 | 99999精品视频 | 97免费公开视频 | 日韩欧美视频免费在线观看 | 国内久久久久 | www色网站 | 国产亚洲欧洲 | 免费在线激情视频 | 人人澡人人爽欧一区 | 精品在线视频一区二区三区 | 69xx视频| 亚洲 在线| 日韩精品久久一区二区三区 | .国产精品成人自产拍在线观看6 | 91传媒在线观看 | 精品久久久久久亚洲综合网站 | 久久国产精品99久久久久 | 在线观看91精品国产网站 | 992tv在线观看网站 | 婷婷久久精品 | 日韩大片在线 | 中文一区二区三区在线观看 | 极品美女被弄高潮视频网站 | 91精品视频在线观看免费 | 91av视频播放 | 久久国产精品二国产精品中国洋人 | www.黄色 | 日韩av在线影视 | www178ccom视频在线 | 91看片在线看片 | 色综合中文综合网 | 久久福利在线 | 人人澡人人添人人爽一区二区 | 岛国av在线不卡 | 国产精品美女久久久久久免费 | 二区三区在线视频 | 成人免费一区二区三区在线观看 | 久久综合影视 | 91成人观看| 日韩在线视频观看免费 | 久久在线免费观看 | 黄色大片免费网站 | 久久99中文字幕 | 久久精品视频在线免费观看 | 一级黄色视屏 | 在线v片免费观看视频 | 美女av免费| 十八岁以下禁止观看的1000个网站 | 97韩国电影| 激情婷婷综合网 | 天天干天天操天天爱 | 久久久久久久久久久久久久免费看 | 在线观看视频福利 | 欧洲亚洲女同hd | 久久久久国产精品午夜一区 | 中文字幕在线看视频国产 | 不卡的av电影 | 久久婷婷色综合 | 99视频精品视频高清免费 | 欧美精品国产综合久久 | 久久久久成人精品免费播放动漫 | 欧美激情精品一区 | 九色91在线视频 | 四虎影视成人永久免费观看视频 | 久久曰视频 | 性色va| 色综合国产 | 国产视频网站在线观看 | 亚洲第一av在线播放 | 亚洲欧美日韩在线看 | 中文字幕高清 | 亚洲视频精选 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 在线视频 91 | 久草网免费| 99精品毛片| 天天干天天操天天干 | av免费福利 | 久久久国产视频 | 天天操导航 | 综合天天色 | 91九色网址 | 欧美激情综合色 | 国产精品二区在线观看 | 二区三区av | 天天草天天摸 | av免费播放 | 日韩av不卡播放 | 一区二区三区四区久久 | 一 级 黄 色 片免费看的 | 7777精品伊人久久久大香线蕉 | 天天操天天射天天操 | 伊人丁香| 亚洲综合成人婷婷小说 | 亚洲婷婷网 | 视频国产在线 | 开心丁香婷婷深爱五月 | 欧美日韩亚洲第一 | 亚洲视频 视频在线 | 尤物97国产精品久久精品国产 | 国产精品原创av片国产免费 | 亚洲综合日韩在线 | 亚洲专区在线视频 | 丁香午夜 | 成人av午夜 | 十八岁以下禁止观看的1000个网站 | 久久久久免费网 | 黄色大片日本 | 久草视频播放 | 久久婷婷五月综合色丁香 | 精品二区视频 | 亚洲三级网 | 91精品国产高清自在线观看 | 免费国产亚洲视频 | 久久综合中文字幕 | 精品在线亚洲视频 | 中文字幕一区二区三区久久 | 在线国产91 | 99av国产精品欲麻豆 | 国产精品精品国产婷婷这里av | 999成人免费视频 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 久久色视频| 在线免费av网 | 日韩av在线网站 | 91麻豆精品国产自产在线游戏 | 成年人免费看片网站 | 五月婷婷六月综合 | 国产a级精品 | 国产原厂视频在线观看 | 97精品国产97久久久久久久久久久久 | 免费黄色网址大全 | 9在线观看免费高清完整版 玖玖爱免费视频 | 一区二区不卡在线观看 | 高清国产在线一区 | 中文字幕亚洲高清 | av手机在线播放 | 成人影片在线免费观看 | 91精品视频在线免费观看 | 日韩艹| 欧美伦理一区二区 | 在线视频 影院 | 狠狠色丁香久久婷婷综 | 最新国产在线视频 | 精品国产诱惑 | 精品国产乱码久久久久久1区2匹 | 国产精品99精品 | 日韩在线观看高清 | 久久久久国产成人精品亚洲午夜 | 欧美调教网站 | 亚洲日本va午夜在线影院 | 精品婷婷 | 麻豆一级视频 | 国内精品福利视频 | 激情综合一区 | 色狠狠操 | 日韩a在线观看 | www.天天成人国产电影 | 99精品免费久久久久久久久 | 国产亚洲综合性久久久影院 | 91精品国产一区二区在线观看 | 五月天激情综合网 | 狠狠的日日 | 丝袜美腿亚洲 | 视频一区二区在线 | 色综合久久88色综合天天人守婷 | 激情久久久久久久久久久久久久久久 | 超碰97免费 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 美女久久久久久久久久 | 久久视频免费在线观看 | 激情综合网天天干 | 久久久久久国产精品亚洲78 | 国产精品国产三级国产aⅴ无密码 | 久久久久成人精品亚洲国产 | 色视频在线看 | 亚洲色图色 | 婷婷六月在线 | 999久久久久久久久6666 | 欧美日韩国产在线一区 | 三级av在线免费观看 | 亚洲视频网站在线观看 | 香蕉色综合| 欧美午夜精品久久久久久浪潮 | 国产一级免费观看视频 | 久草网在线观看 | 99热这里只有精品免费 | 久久伊人精品天天 | 在线观看视频精品 | 91精品久久久久久久久久久久久 | 天天躁日日躁狠狠 | 亚洲欧美日韩在线看 | 久久久久亚洲精品成人网小说 | 国产精品欧美久久久久无广告 | 日本三级吹潮在线 | 91视频在线免费下载 | 91综合色 | 手机在线观看国产精品 | 午夜精品视频一区二区三区在线看 | 亚洲视频1 | 色中文字幕在线观看 | 人人看黄色 | 国产尤物在线观看 | 欧美成人精品欧美一级乱黄 | 国产精品久久久久久久久久久久久久 | 五月婷丁香网 | 日韩av中文在线观看 | 精品久久久久久亚洲综合网站 | 久久久精品 一区二区三区 国产99视频在线观看 | 亚洲视频分类 | 97在线观看免费 | 国产不卡精品 | 波多野结衣在线播放视频 | 日韩中文字幕视频在线 | 不卡的av中文字幕 | 91av电影在线 | 精品福利av| 中文有码在线视频 | 日韩欧美aaa | 国产精品黑丝在线观看 | 人人搞人人干 | wwwav视频| 91av官网| 国产精品永久久久久久久www | 成人在线黄色电影 | 欧美性爽爽 | 在线 精品 国产 | 欧美污网站 | 亚洲精品久久久久999中文字幕 | 欧美日韩中文在线视频 | 黄色在线观看网站 | 久久久久久美女 | 亚洲va欧美va | av高清在线 | 2019中文字幕网站 | 国产亚洲一区 | 日韩性久久 | 国产在线观看国语版免费 | 在线观看a视频 | 插综合网 | 久久艹国产 | 免费三级骚 | 99精品在线视频观看 | 欧美久草视频 | 四虎成人精品永久免费av九九 | 在线岛国av | 99情趣网视频| 中文字幕av免费在线观看 | 国产精品剧情 | 久久婷婷五月综合色丁香 | 成人免费视频网站 | 久久精品久久久久电影 | 亚洲永久精品在线 | 777视频在线观看 | 国产1级毛片 | 欧美一级爽| 91丨九色丨高潮 | 91av99| 2021久久| 99免费观看视频 | 日本在线观看视频一区 | 亚洲精品国产精品99久久 | 日韩精品不卡在线观看 | av资源免费在线观看 | 91麻豆精品国产91久久久无限制版 | 青草视频免费观看 | 日韩在线精品一区 | www.五月天激情 | 久久香蕉国产 | 亚洲va天堂va欧美ⅴa在线 | 色婷婷欧美| 亚洲1区在线 | 激情五月伊人 | 欧美另类高潮 | 亚洲精品黄色在线观看 | 69亚洲乱 | 97超碰国产在线 | 色天天综合久久久久综合片 | av高清在线观看 | 久久毛片网 | 国产一级视频在线 | 免费一区在线 | 最新国产中文字幕 | 国产精品专区一 | 中文字幕免费高清av | 国产高清视频在线 | 国产精品女同一区二区三区久久夜 | 香蕉免费| 免费人成在线观看网站 | 一区二区三区在线视频观看58 | 亚洲高清在线观看视频 | 国产精品热 | 99热最新精品 | 久久一区二区免费视频 | 久久精品99北条麻妃 | 久在线观看视频 | 欧美二区三区91 | 日本mv大片欧洲mv大片 | 欧美美女一级片 | 中文字幕色网站 | 国产一级免费播放 | 91久久人澡人人添人人爽欧美 | 日韩精品一区二区三区中文字幕 | av黄色大片| 欧美色黄| 国产精品视频在线看 | 国产1级视频 | 久草网站 | 91最新地址永久入口 | 亚洲第二色 | 午夜电影一区 | 狠色狠色综合久久 | 91精品国产福利在线观看 | 欧美日韩久久不卡 | 国产网红在线观看 | 在线观看国产中文字幕 | 日本在线观看中文字幕 | 国产亚洲日 | 亚洲在线视频免费观看 | 色999在线 | 国产精品一区二区在线观看免费 | 久久精彩视频 | 人人看人人做人人澡 | 国产精品精品久久久 | 精品不卡视频 | 999久久久免费视频 午夜国产在线观看 | 男女拍拍免费视频 | 色99视频| 国产精品福利一区 | 91欧美在线 | 成年人电影毛片 | 亚洲国产剧情 | 99高清视频有精品视频 | 成年人在线免费看视频 | 性色视频在线 | 成人免费视频观看 | 美女精品在线观看 | 狠狠色伊人亚洲综合成人 | 香蕉日日 | 激情黄色一级片 | 久久久久中文 | 亚洲视频在线观看 | 色婷婷激情综合 | 香蕉视频免费在线播放 | www.天天色.com | 亚洲在线视频观看 | 天天碰天天操视频 | 黄色成人av | 日韩欧美专区 | 日韩在线理论 | 极品美女被弄高潮视频网站 | 欧美久久久久久久久中文字幕 | 亚洲综合在线视频 | 日韩在线电影一区二区 | 国产精品不卡在线 | 国产生活一级片 | 中文字幕亚洲精品日韩 | 一区二区视频电影在线观看 | 精品国产乱码久久久久久1区2匹 | 天天插天天狠天天透 | 久久夜靖品 | 国产精品第三页 | 国产色网站 | 91av久久| 在线观看精品国产 | 99视频精品全国免费 | 婷婷网五月天 | 狠狠狠综合 | 深夜免费小视频 | 免费视频一二三区 | av中文在线观看 | 亚洲香蕉在线观看 | 日本中文字幕网站 | 久草在线久草在线2 | 中文字幕一区二区三区在线观看 | 中文字幕成人一区 | 日韩在线免费视频 | 成人国产精品免费观看 | 国产精品观看在线亚洲人成网 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 欧美一区二区伦理片 | 狠狠躁天天躁综合网 | 久久男女视频 | 91免费高清观看 | 久久综合九色综合久99 | 日黄网站 | 国产一级片在线播放 | 精品亚洲视频在线观看 | 深夜免费小视频 | 久久国产欧美日韩 | 欧美日韩1区| 999久久久免费精品国产 | 欧美色噜噜噜 | 97操操| 久久精品波多野结衣 | 日韩av电影免费观看 | 天天操天天摸天天干 | 五月婷婷在线观看 | 韩日av在线 | 日本在线中文在线 | 亚洲综合射| 国产破处精品 | 亚洲精品乱码久久久久久蜜桃动漫 | 亚洲成人黄色在线 | 日本精品久久久久久 | 91色网址 | 亚洲免费成人av电影 | 最近高清中文字幕在线国语5 | 欧美日韩国产一区二区三区 | 国产综合精品一区二区三区 | 国产一级片不卡 | 免费av免费观看 | 欧美激情精品久久久久久免费印度 | 在线观看日韩 | 激情深爱| 国产精品av免费在线观看 | 91九色成人蝌蚪首页 | 欧美男同视频网站 | 欧美日本高清视频 | www色网站 | 国产色视频网站2 | 日日干美女 | 四虎www. | 久久久蜜桃一区二区 | 日韩精品一区二区三区三炮视频 | 丁香亚洲 | 81精品国产乱码久久久久久 | 欧美激情第一区 | 久久久久久久久久久福利 | 国产原创在线观看 | 色午夜影院 | 在线欧美最极品的av | 91在线公开视频 | 日韩精品一区二区三区在线视频 | 97国产情侣爱久久免费观看 | 午夜91视频 | 亚洲精品中文在线 | 精品国产乱码 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 久久人人看 | 日本久久久亚洲精品 | 丁香六月天婷婷 | 伊香蕉大综综综合久久啪 | 免费黄色av | 91av视频在线观看 | 国内99视频| 亚洲国产午夜精品 | 亚洲精品午夜视频 | 久久免费视频8 | 亚洲黄色区 | 超碰人在线| 91在线小视频 | 久久人人爽爽人人爽人人片av | 九九在线高清精品视频 | 超碰成人免费电影 | 欧美一级电影片 | 国内精品久久久久久 | 一区二区三区视频网站 | 午夜精品久久久99热福利 | 激情婷婷在线观看 | 91一区一区三区 | 2023亚洲精品国偷拍自产在线 | 欧美精品中文在线免费观看 | 成 人 黄 色视频免费播放 | 91在线观看视频网站 | 午夜婷婷在线观看 | 一级片免费在线 | 在线观看成人国产 | 在线免费观看视频你懂的 | 精品91在线| 六月丁香色婷婷 | 久久精品视频在线免费观看 | 99热9| 国产一区91| 日韩美精品视频 | 超碰在线中文字幕 | 国产精品久久免费看 | av在线亚洲天堂 | 日日干日日色 | 五月婷婷电影网 | www.天堂av| 黄色av电影一级片 | 人人爽人人香蕉 | 日韩理论电影网 | 免费h视频 | 欧美极品少妇xxxx | 亚洲精品视频免费在线 |