**顯示有區別 ** get方法是將字符串拼接在地址欄後面能夠看見 而post方法看不見 **傳遞的大小有區別 ** 具體大小和瀏覽器有關係,ie瀏覽器是2k其餘瀏覽器的最大值可能不一樣,可是也比較小。 而post方法傳遞參數的大小是能夠設定的,原來是認爲無限大。在Php當中在php.ini文件是能夠設置參數的大小的。 **安全性 ** get方法安全性比較低由於暴露在外面而post方法安全性比較高 **提交的原理 ** get方法提交的數據都是獨立的。 而Post方法將全部的提交的數據變成一個總體(將提交的數據變成xml格式) **靈活性** get方法很靈活, post方法不靈活,必需要有表單的參與才能用post提交很不方便
require是無條件包含也就是若是一個流程里加入require,不管條件成立與否都會先執行require
include有返回值,而require沒有(可能由於如此require的速度比include快)
包含文件不存在或者語法錯誤的時候require是致命的錯誤終止執行,include不是
1 pathinfo()解析文件路徑,返回其組成部分; 2 返回關聯數組 3 dirname 文件路徑 4 basename 文件名+擴展名 5 extension 最後一個擴展名 6 filename 文件名 7 eg: print_r( pathinfo('/ab/cd/e.php') ); 8 Array( 9 [dirname] => /ab/cd 10 [basename] => e.php 11 [extension] => php 12 [filename] => e 13 ) 14 擴展: 15 打印解析路徑 var_dump( pathinfo($path) ); 16 打印路徑的父級路徑 var_dump( pathinfo($path, PATHINFO_DIRNAME) ); 17 打印路徑的尾名 var_dump( pathinfo($path, PATHINFO_BASENAME) ); 18 打印路徑的最後的擴展名 var_dump( pathinfo($path, PATHINFO_EXTENSION) ); 19 打印路徑的文件的名字 var_dump( pathinfo($path, PATHINFO_FILENAME) );
echo __FILE__ ; // 獲取當前所在文件的絕對路徑及地址,結果:D:\aaa\my.php echo dirname(__FILE__); // 取得當前文件所在的絕對目錄,結果:D:\aaa\ echo dirname(dirname(__FILE__)); //取得當前文件的上一層目錄名,結果:D:\
* 什麼是主從複製 主從複製,是用來創建一個和主數據庫徹底同樣的數據庫環境,稱爲從數據庫; * 主從複製的原理: 1.數據庫有個bin-log二進制文件,記錄了全部的sql語句。 2.只須要把主數據庫的bin-log文件中的sql語句複製。 3.讓其從數據的relay-log重作日誌文件中在執行一次這些sql語句便可。 * 主從複製的做用 1.作數據的熱備份,做爲後備數據庫,主數據庫服務器故障後,可切換到從數據庫繼續工做,避免數據丟失。 2.架構的擴展。業務量愈來愈大,I/O訪問頻率太高,單機沒法知足,此時作多庫的存儲,下降磁盤I/O訪問頻率,提升單機的I/O性能 3.主從複製是讀寫分離的基礎,使數據庫能製成更大 的併發。例如子報表中,因爲部署報表的sql語句十分慢,致使鎖表,影響前臺的服務。若是前臺服務使用master,報表使用slave,那麼報表sql將不會形成前臺所,保證了前臺的訪問速度。 * 主從複製的幾種方式: 1.同步複製:所謂的同步複製,意思是master的變化,必須等待slave-1,slave-2,...,slave-n完成後才能返回。 2.異步複製:如同AJAX請求同樣。master只須要完成本身的數據庫操做便可。至於slaves是否收到二進制日誌,是否完成操做,不用關心。MYSQL的默認設置。 3.半同步複製:master只保證slaves中的一個操做成功,就返回,其餘slave無論。 這個功能,是由google爲MYSQL引入的。 * 關於讀寫分離 在完成主從複製時,因爲slave是須要同步master的。因此對於insert/delete/update這些更新數據庫的操做,應該在master中完成。而select的查詢操做,則落下到slave中。
**什麼是索引** 索引是對數據庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問數據庫表中的特定信息。(摘自百度百科) **索引類型** 1.FULLTEXT 全文索引 全文索引,僅MyISAM引擎支持。其能夠在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不過目前只有 CHAR、VARCHAR ,TEXT 列上能夠建立全文索引。 2.HASH 哈希索引 HASH索引的惟一性及相似鍵值對的形式十分適合做爲索引,HASH索引能夠一次定位,不須要像樹形索引那樣逐層參照,所以具備極高的效率。可是這種高效是有條件的。即只在「=」和「in」條件下高效,對於範圍查詢,排序及組合索引仍然效率不高。 3.BTREE 樹形索引 BTREE因此是一種將索引按必定算法,存入一個樹形的數據結構中(二叉樹),每次查詢都是從樹的入口root開始,一次遍歷node,獲取leaf。這是MySQL中默認也是最經常使用的索引類型。 4.RTREE RTREE在MySQL中不多使用,僅支持geometry數據類型,支持該存儲引擎只有MyISAM、BDb、InnoDb、NDb、Archive幾種。相對於BTREE,RTREE的優點在於範圍查找。 **索引種類** 普通索引:僅加速查詢 惟一索引:加速查詢+列值惟一(能夠有null) 主鍵索引:加速查詢+列值惟一(不能夠有null)+表中只有一個 組合索引:多列值組成一個索引,專門用於組合搜索,其效率大於索引合併 全文索引:對文本內容進行分詞,進行搜索 外鍵索引:與主鍵索引造成聯繫,保證數據的完整性。 **索引使用的注意事項** 1.符合索引遵循前綴原則 2.like查詢%不能再前,不然索引失效。若有須要,使用全文索引 3.column is null可使用索引 4.若是MySQL估計使用索引比全表掃描慢,則放棄使用索引 5.若是or前的條件中列有索引,後面的沒有,索引不會生效。 6.列類型是字符串,查詢時,必定要給值加引號,不然索引失效。 7.肯定order by 和 group by 中只有一個表的列,這樣才能使用索引
web服務器優化 :負載均衡
流量優化:防盜鏈處理 將惡意請求屏蔽,
前端優化:減小http請求、添加異步請求、啓用瀏覽器緩存和文件壓縮、cdn加速、創建獨立的圖片服務器、
服務端優化: 頁面靜態化、併發處理、隊列處理、
數據庫優化: 數據庫緩存、分庫分表、分區操做 、讀寫分離、負載均衡
一、Model(業務模型):應用程序中用於處理應用程序數據邏輯的部分,一般模型對象負責在數據庫中存取數據。 二、view(視圖):應用程序中處理數據顯示的部分。一般視圖是依據模型數據建立的。 三、controller(控制器):應用程序中處理用戶交互的部分。一般控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。
1 **1. 得到文件名:** 2 basename — 返回路徑中的文件名部分 3 4 $path = "/home/cate/index/index2.php";\ 5 $file = basename($path);\ 6 echo $file; //結果index2.php 7 8 **2. 得到目錄名** 9 dirname — 返回路徑中的目錄部分 10 11 $path = "/home/cate/index/index2.php";\ 12 $file = dirname($path);\ 13 echo $file;//結果/home/cate/index 14 15 **3.獲得路徑關聯數組** 16 pathinfo() 函數以數組的形式返回關於文件路徑的信息。 17 返回的數組元素以下: 18 - [dirname]: 目錄路徑 19 - [basename]: 文件名 20 - [extension]: 文件後綴名 21 - [filename]: 不包含後綴的文件名 22 pathinfo(path,options) 23 | path | 必需。規定要檢查的路徑。 | 24 | options | 可選。規定要返回的數組元素。默認是 all。 25 26 可能的值: 27 28 - PATHINFO_DIRNAME - 只返回 dirname 29 - PATHINFO_BASENAME - 只返回 basename 30 - PATHINFO_EXTENSION - 只返回 extension 31 - PATHINFO_FILENAME - 只返回 filename 32 33 | 34 **4.filesize取得文件大小** 35 filesize ( string $filename ) 36 返回文件大小的字節數,若是出錯返回 **FALSE** 並生成一條 **E_WARNING** 級的錯誤。 37 38 **判斷目錄是否存在** 39 $lujing = "./nihao/wohao"; 40 if(!is_dir($liujing)){ 41 mkdir(iconv("UTF-8", "GBK", $lujing),0777,true); 42 } 43 44 **判斷文件是否存在** 45 file_exists(path);
1 1. 冒泡排序 2 思路分析:在要排序的一組數中,對當前還未排好的序列,從前日後對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即,每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。 3 4 代碼實現: 5 $arr=array(1,43,54,62,21,66,32,78,36,76,39); 6 function bubbleSort($arr) 7 { 8 $len=count($arr); 9 //該層循環控制 須要冒泡的輪數 10 for($i=1;$i<$len;$i++) 11 { //該層循環用來控制每輪 冒出一個數 須要比較的次數 12 for($k=0;$k<$len-$i;$k++) 13 { 14 if($arr[$k]>$arr[$k+1]) 15 { 16 $tmp=$arr[$k+1]; 17 $arr[$k+1]=$arr[$k]; 18 $arr[$k]=$tmp; 19 } 20 } 21 } 22 return $arr; 23 } 24 25 2. 選擇排序 26 思路分析:在要排序的一組數中,選出最小的一個數與第一個位置的數交換。而後在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最後一個數比較爲止。 27 28 代碼實現: 29 function selectSort($arr) { 30 //雙重循環完成,外層控制輪數,內層控制比較次數 31 $len=count($arr); 32 for($i=0; $i<$len-1; $i++) { 33 //先假設最小的值的位置 34 $p = $i; 35 36 for($j=$i+1; $j<$len; $j++) { 37 //$arr[$p] 是當前已知的最小值 38 if($arr[$p] > $arr[$j]) { 39 //比較,發現更小的,記錄下最小值的位置;而且在下次比較時採用已知的最小值進行比較。 40 $p = $j; 41 } 42 } 43 //已經肯定了當前的最小值的位置,保存到$p中。若是發現最小值的位置與當前假設的位置$i不一樣,則位置互換便可。 44 if($p != $i) { 45 $tmp = $arr[$p]; 46 $arr[$p] = $arr[$i]; 47 $arr[$i] = $tmp; 48 } 49 } 50 //返回最終結果 51 return $arr; 52 } 53 54 3.插入排序 55 思路分析:在要排序的一組數中,假設前面的數已是排好順序的,如今要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反覆循環,直到所有排好順序。 56 57 代碼實現: 58 function insertSort($arr) { 59 $len=count($arr); 60 for($i=1, $i<$len; $i++) { 61 $tmp = $arr[$i]; 62 //內層循環控制,比較並插入 63 for($j=$i-1;$j>=0;$j--) { 64 if($tmp < $arr[$j]) { 65 //發現插入的元素要小,交換位置,將後邊的元素與前面的元素互換 66 $arr[$j+1] = $arr[$j]; 67 $arr[$j] = $tmp; 68 } else { 69 //若是碰到不須要移動的元素,因爲是已經排序好是數組,則前面的就不須要再次比較了。 70 break; 71 } 72 } 73 } 74 return $arr; 75 } 76 77 4.快速排序 78 思路分析:選擇一個基準元素,一般選擇第一個元素或者最後一個元素。經過一趟掃描,將待排序列分紅兩部分,一部分比基準元素小,一部分大於等於基準元素。此時基準元素在其排好序後的正確位置,而後再用一樣的方法遞歸地排序劃分的兩部分。 79 80 代碼實現: 81 function quickSort($arr) { 82 //先判斷是否須要繼續進行 83 $length = count($arr); 84 if($length <= 1) { 85 return $arr; 86 } 87 //選擇第一個元素做爲基準 88 $base_num = $arr[0]; 89 //遍歷除了標尺外的全部元素,按照大小關係放入兩個數組內 90 //初始化兩個數組 91 $left_array = array(); //小於基準的 92 $right_array = array(); //大於基準的 93 for($i=1; $i<$length; $i++) { 94 if($base_num > $arr[$i]) { 95 //放入左邊數組 96 $left_array[] = $arr[$i]; 97 } else { 98 //放入右邊 99 $right_array[] = $arr[$i]; 100 } 101 } 102 //再分別對左邊和右邊的數組進行相同的排序處理方式遞歸調用這個函數 103 $left_array = quick_sort($left_array); 104 $right_array = quick_sort($right_array); 105 //合併 106 return array_merge($left_array, array($base_num), $right_array); 107 }