回顧系統(tǒng)函數(shù):字符串函數(shù)和時(shí)間日期函數(shù) 數(shù)組 數(shù)組元素可以是任意數(shù)據(jù)類型,;數(shù)組長(zhǎng)度沒有限制 php凡是碰到變量帶中括號(hào)的一定會(huì)當(dāng)做數(shù)組處理 遍歷數(shù)組:for循環(huán),,foreach循環(huán),each搭配循環(huán),,函數(shù)(key,,current,next,,prev,,end,reset) 二維數(shù)組:php數(shù)組元素又是數(shù)組 數(shù)據(jù)結(jié)構(gòu):棧(FILO)和隊(duì)列(FIFO) 數(shù)組字符串?dāng)?shù)組函數(shù)字符串與數(shù)組之間的關(guān)系(轉(zhuǎn)換) explode:爆炸,,將一個(gè)字符串按照某個(gè)指定的規(guī)則(通常是特殊字符),,將數(shù)組分成多個(gè)段,每一段都當(dāng)做一個(gè)數(shù)組的元素,,返回一個(gè)索引數(shù)組 implode:粘合,,將一個(gè)數(shù)組內(nèi)部的所有元素按照某個(gè)指定的規(guī)則(特殊字符),將所有的元素拼接成一個(gè)字符串 數(shù)組運(yùn)算數(shù)組運(yùn)算通常指的兩種:+運(yùn)算,,合并運(yùn)算,,比較運(yùn)算 +運(yùn)算將兩個(gè)數(shù)組的元素進(jìn)行數(shù)量上的增加,返回一個(gè)數(shù)組,;如果數(shù)組元素的鍵名在第一個(gè)數(shù)組中存在,,那么第二個(gè)數(shù)組的元素就會(huì)被拋棄(鍵名無論是索引還是關(guān)聯(lián)都是一樣的) 合并運(yùn)算array_merge:合并,指的是將兩個(gè)數(shù)組中的元素進(jìn)行累計(jì),。如果后面的數(shù)組與前面的數(shù)組有下標(biāo)(鍵名:關(guān)聯(lián))相同的,,那么后面的元素的值會(huì)覆蓋前面的;如果是索引的相同下標(biāo),,會(huì)自動(dòng)的修改下標(biāo)疊加到前面的數(shù)組里,。 比較運(yùn)算比較兩個(gè)數(shù)組元素的個(gè)數(shù),然后依次比較數(shù)組元素的值 == :值比較 相等條件:數(shù)組的元素個(gè)數(shù)必須相同,,數(shù)組元素的值必須在順序上與另外一個(gè)數(shù)組元素的值相同 === :類型比較 全等條件:在相等條件上保證元素的類型也相同 驗(yàn)證碼驗(yàn)證碼的英文單詞叫做captcha 用數(shù)組來模擬生成驗(yàn)證碼對(duì)應(yīng)的隨機(jī)字符串,。 1. 生成有所有元素的數(shù)組 $arr = array('a’,’b’,’c’……) range:按照指定的ASCII碼來生成一個(gè)序列對(duì)應(yīng)的數(shù)組元素(索引數(shù)組) 2. 獲取隨機(jī)的多個(gè)元素 array_rand:只能隨機(jī)取出多個(gè)數(shù)組元素的下標(biāo),返回一個(gè)索引數(shù)組 遍歷獲取的隨機(jī)下標(biāo):取出對(duì)應(yīng)的值 3. 打亂隨機(jī)取得的下標(biāo) shuffle:將數(shù)組元素的順序打亂,,并且重新生成索引,。 瀏覽器提交數(shù)據(jù)1. 瀏覽器為什么要提交數(shù)據(jù)給服務(wù)器,? 告訴服務(wù)器要做提供什么樣的服務(wù) 2. 瀏覽器提交數(shù)據(jù)的方式,? URL:將數(shù)據(jù)綁定在url之后 表單:<form>,將所有的要提交的數(shù)據(jù)放到對(duì)應(yīng)的表單內(nèi)部 POST:數(shù)據(jù)采用post方式提交,,post提交是將數(shù)據(jù)打包提交,,不會(huì)綁定在url后面 GET:數(shù)據(jù)采用get方式提交,瀏覽器將form表單中的數(shù)據(jù)自動(dòng)的綁定到url后面 3. post和get的區(qū)別 a) 提交方式不一樣,post提交看不到數(shù)據(jù),,但是get可以看到(在URL后面) b) 安全性不一樣:post看不見,,get看得見 c) 二者傳輸?shù)臄?shù)據(jù)量不一樣:get理論上不超過2KB,post理論上可以達(dá)到8M 服務(wù)器接收數(shù)據(jù)1. php采用什么方式接收數(shù)據(jù),? a) $_GET:接收全部get方式提交的數(shù)據(jù),,形成的是一個(gè)數(shù)組,表單名字(name屬性)作為鍵名,,數(shù)據(jù)作為鍵值 b) $_POST:接收全部post方式提交的數(shù)據(jù),,與$_GET形式一樣。 c) $_REQUEST:不管是get方式提交還是post方式提交,,都能夠接收,,而且還能接受其他額外數(shù)據(jù)。 $_REQUEST接收數(shù)據(jù)存在安全漏洞,,原因是因?yàn)?/span>$_REQUEST = array_merge($_GET,$_POST); php.ini中有一個(gè)選項(xiàng)控制$_REQUEST的覆蓋順序:request_order 如果是在低版本中可能沒有該選項(xiàng),,有一個(gè)variables_order,是用來控制$_REQUEST里面的變量順序 請(qǐng)求處理get請(qǐng)求 post請(qǐng)求 任何沒有name屬性的表單,,瀏覽器都不會(huì)提交給服務(wù)器 數(shù)據(jù)接收或者判斷的前處理 使用isset函數(shù)進(jìn)行數(shù)據(jù)判斷 復(fù)選框的使用checkbox通常情況下不止一個(gè)數(shù)據(jù) 1. 制作表單 2. 接收數(shù)據(jù) 矛盾:表單中復(fù)選框通常一個(gè)類復(fù)選框名字都是同一個(gè),,數(shù)據(jù)提交之后服務(wù)器在接收數(shù)據(jù)的時(shí)候,會(huì)將所有的同名的表單進(jìn)行數(shù)據(jù)的覆蓋,,最終只保留一個(gè),。 解決方案: 被同名表單元素的name屬性增加中括號(hào),瀏覽器會(huì)正常的當(dāng)做字符串來解析和處理,,但是一旦提交到服務(wù)器,,php看到中括號(hào)會(huì)當(dāng)做數(shù)組處理(不會(huì)覆蓋,增加元素) 1. 修改表單:給checkbox的name屬性,,增加中括號(hào) 2. 服務(wù)器正常接收數(shù)據(jù),; 用戶信息都需要保存到數(shù)據(jù)庫:數(shù)組不能傳輸給數(shù)據(jù)庫,數(shù)組也不能夠保存到數(shù)據(jù)庫,。 提取checkbox保存的信息,,反顯到對(duì)應(yīng)的checkbox,顯示給用戶 1. 從數(shù)據(jù)庫獲?。韩@取到是字符串,,需要將字符串反轉(zhuǎn)成數(shù)組:explode 2. 如何確定哪些checkbox是被選中的呢? in_array:判斷一個(gè)值是否在數(shù)組中存在,,如果存在返回true,,失敗返回false 文件傳輸流數(shù)據(jù)在網(wǎng)絡(luò)間傳輸?shù)男问椒譃閮煞N:字符流和二進(jìn)制流 數(shù)據(jù)傳輸一定只能是二進(jìn)制。 字符流:數(shù)據(jù)的傳輸是按照有效字符串進(jìn)行傳輸(數(shù)據(jù)本身是字符串) 二進(jìn)制流:數(shù)據(jù)本身是二進(jìn)制格式 不管是get方式還是post方式所能提交的數(shù)據(jù),,只能是字符流,。瀏覽器默認(rèn)的不能提交二進(jìn)制流數(shù)據(jù),。(文件,圖片都不能提交給服務(wù)器),。 文件上傳1. 什么是文件上傳,? 將瀏覽器端電腦上所存在的文件,通過瀏覽器提交給服務(wù)器,,并保存在服務(wù)器端,。 文件上傳條件a) 服務(wù)器端必須要允許瀏覽器端上傳文件,PHP負(fù)責(zé)管理 為了方便查看文件上傳的臨時(shí)文件,,修改臨時(shí)文件的存儲(chǔ)目錄:D:/server/tmp b) 瀏覽器允許文件上傳:瀏覽器能夠根據(jù)表單選擇對(duì)應(yīng)的要上傳的文件,,文件上傳只能是POST提交 二進(jìn)制流不可能直接上傳,必須告訴瀏覽器當(dāng)前文件的流是二進(jìn)制流:給form增加一個(gè)屬性:enctype = “multipart/form-data”告訴瀏覽器當(dāng)前要提交給服務(wù)器的數(shù)據(jù)可能存在二進(jìn)制流 以上代碼執(zhí)行時(shí)出現(xiàn)了三個(gè)現(xiàn)象 1. 文件實(shí)現(xiàn)了上傳,,存在于指定的臨時(shí)目錄下,,以臨時(shí)文件的形式存在 2. 隨著腳本執(zhí)行結(jié)束,臨時(shí)文件消失 操作系統(tǒng)的原因:操作系統(tǒng)認(rèn)為當(dāng)前是用戶提交的數(shù)據(jù),,那么該數(shù)據(jù)存在不安全性,,對(duì)于系統(tǒng)存在安全威脅,不管當(dāng)前服務(wù)器對(duì)該文件處理或者不處理,,系統(tǒng)都會(huì)在服務(wù)器處理完之后清理掉,。 3. 文件上傳成功之后,$_POST接收不到數(shù)據(jù) $_POST與post提交一樣,,$_POST只能接收字符流數(shù)據(jù),,而文件都是二進(jìn)制流,所以不能接收 PHP中專門用$_FILES來接收文件數(shù)據(jù),。所有的文件上傳的數(shù)據(jù)都在$_FILES里面,。 文件轉(zhuǎn)移在腳本期間將臨時(shí)文件從臨時(shí)目錄轉(zhuǎn)入到指定的文件上傳的目錄里。 move_uploaded_file(臨時(shí)文件路徑,目標(biāo)文件路徑):兩個(gè)路徑都是帶文件名,,移動(dòng)是直接移動(dòng)源文件 copy(臨時(shí)文件路徑,目標(biāo)文件路徑):移動(dòng)的是復(fù)制的文件,,源文件不動(dòng) 文件上傳流程封裝文件上傳函數(shù)文件錯(cuò)誤代碼說明 文件重命名 算法排序算法:如何將一個(gè)無序的數(shù)組(數(shù)值數(shù)組)進(jìn)行排序 常見的排序方法:冒泡,選擇,,插入和快速排序 冒泡算法 |
|