lamp兄弟连视频笔记
第一章
1.2
一 分號
結構定義語句 如for(;;){}?? if(){}?? while(){}...
功能執行語句,需要加";"? 如$name = "zhang";? echo $name;
?????????????? 離php腳本結束最近的分號可以省略如<?php echo $name ?>
二php注釋
單行注釋 //
多行注釋 /*
????????? */
文本注釋
???????? /**
????????? *
????????? */
注釋功能
a寫過的程序不要刪
b調試程序,在程序中加輸出、關掉程序中的部分功能
c寫幫助代碼?? 在代碼上面或右邊? 不要在下面
三、變量與常量
變量:區分大小寫,其它并不區分
用$定義
變量類型?? 查看變量類型函數[getType($name)<需要echo輸出>?? var_dump($name)<不需echo >]
a四種標量類型
布爾? 整型? 浮點型? 字符型
b兩種復合類型
數組? 對象
c兩種特殊類型
資源??? Null
注意(變量名或函數名)
a變量名有意義
a不要以數字開頭,中間不能有"."或空格,不能為系統關鍵字
isset()檢查變量是否存在
常量? 遵循常量命名規則
用define()定義常量?? 一般用大寫?? 如 define("NAME","新軍");? echo NAME;
注:
a常量只能包含標量類型(boolean,integer,float,srting)
b只能在聲明時賦值,并不能在運行時改變
變量和常量的區別
a常量前不能用$,變量必須
b常量用define()函數定義,不能通過賦值語句賦值
c常量不必理會變量范圍的規則,可在任意地方定義和訪問,常量定義不能重新賦值或取消
d常量的值只能是標量
defined檢查常量是否已定義? 返回 1 為真 返回 空 為假
?
第二章
1整數
十進制
八進制 以0開頭如0100
十六進制? 以0x開頭如0xff 或0XFF(大小寫對應)
2浮點數
$a=1.2345
可以使用科學計數法? $a=1.2e-4
3字符串
$a="abd"?? $a='abcd'?? 注意單雙引號的區別
4布爾型
$a=true;?? $b=false;
其它七種類型都可轉換為布爾型
整型 浮點型 0代表假其它為真;字符串中空字符串和"0"代表假? 字符串空格" "(有空格)代表真
沒有成員的數組代表假,在php4中沒有單元的對象代表假php5已不支持
任何資源類型代表真,null類型代表假
5變量類型的相互轉換
自動轉換與強制轉換
自動轉換? 如 $a="100abd";$b="300abd";$c=$a+$b;echo $c;(輸出400)
強制轉換
a在要轉換的變量之前加上用括號括起來的目標類型? $b=(int)$a
(int)? (integer)? ;(bool) (boolean);
(float) (double) (real);? (string);(array);(object)
這種類型轉換不會把原來的類型轉換,而是形成一個新的類型
b用函數 setType()? 如 setType($a,"integer");//在原有變量上轉換,原來的類型發生轉換
c使用php中的轉換函數,作用類似于第一種方式,形成新的類型
intval()?? 如 $b=intval($a);
floatval()
srtval()
注? null轉換為字符串為空字符串
?
2.2
外部變量
$_GET
$_POST
?
$_FILES
$_COOKIE
$_SESSION
?
環境變量
$_SEVER
$_ENV
2.3-2.4
運算符
算術運算符?? +、-、*、/、%、++、--
比較運算符?? ==? 、 === 、 != 、 <> 、? !== 、? < 、 > 、 <== 、? >== 、? ? :
邏輯運算符?? and &&?? 、?? or ||?? 、?? not !?? 、? xor
位運算符????? &????? 、??????? |??? 、???? ^?? 、???? ~??? 、?? <<? 、??? >>??? 、??? >>>(無符號右移)
賦值運算符? = 、 +=??? 、? -=? 、?? *=?? 、?? /=?? 、?? %=
其它運算符??? .?? 、??? .=
一、算術運算符
取余的作用是求一個數的范圍。
$a=6;$b=-5;$c=$a%$b;echo $c;(1)?????? $a=-6;$b=-5;$c=$a%$b;echo $c;(-1)? 結果取決于第一個變量或數值$a
++?? --?????
$a=10;?? $a++? //$a=$a+1?? $a--? //$a=$a-1?? (先用變量,然后再加/減)
????????????????????? ++$a? //$a=$a+1?? --$a?? //$a=$a-1? (先自增/減,然后再使用變量)
$b=$a++? //$b=10? $a=11???????? $c=$b--? //$c=10? $b=9????? $d=--$c? //$d=9??? $c=9??? $e=++$d?? //$e=10?? $d=10??
??????????? 10? -??? 8???????????????????????????? 2??? +??? 4
???????? $f=$e-- - --$e; //$f=2???? $e=8???????? $g=$f++ + ++$f;? //$g=6??? $f=4
?
二、比較運算符
等號為“==”而非單個“=”后者為賦值運算符
===
三、邏輯運算符
兩邊放布爾型的值返回布爾型的值
四、位運算符——右移相當于除2.左移相當于乘2(詳見視頻)
??????????????????? 每一個整數都是有32位組成
????????????????????????????????????????????? 8421
$a=15;?? //??? 00000000 00000000 00000000 00001111????? 最高位為符號為0代表正數,1代表負數
$b=13;?? //??? 00000000 00000000 00000000 00001101??
$c=$a & $b;??? 00000000 00000000 00000000 00000000
按位與兩個同為1為1,按位或有一個1即為1,抑或相同為0不同為1,^求反,~
?
$ |可以作為邏輯運算符使用,注意邏輯$$和||“短路”問題
?
運算符的優先級?? 沒必要硬記,可以用括號解決
?
第三章
一 分支結構
if ... else ...???? switch ... case ... default ...???? try ... catch ...
if(){};if(){}else{};if(){}else if(){}elseif(){}else{};
?
巢狀結構
if(){if(){if(){}else{}}else{}}else{if(){}else{}};
?
switch(變量——標量即可)?? //注意其格式
{
??? case 值:
????????? echo? //表達式??
????????? break;
??? case 值:
????????? echo? //表達式??
????????? break;
??? case 值:
????????? echo? //表達式??
????????? break;
??? default :
????????? echo //表達式
}
單個值匹配時選用switch ... case ... 比較方便;
求范圍用 if 語句;
?
循環結構
while(布爾型){};
do{
}while();?? //注意分號??? 與while的區別是while先判斷后執行,而do..while.則先執行后判斷,無論條件真假都執行一次
$i=0;
$k=0;
while($i<100)
{
??? echo "<tr>";
??? $j=0;??????? //j不應該放在外圍循環外面
??? while($j<10)
??? {
??????? echo "<td>".$k++."</td>";??? //注意k的值
??????? $j++;
??? }
??? echo "</tr>";
??? $i++;
}
?
?
for 循環
break (n);?? //退出(n層)循環
continue (n);//退出本次(n層)循環,本循環以后的循環繼續
while中使用continue注意死循環
如
$i=0;
while($i<100)
{
if($i==3)
???? continue;??????? //死循環,因為程序執行到continue后退出本次循環,后面的代碼未執行,$i的值還是3,if語句繼續執行,形成死循環,for循環的執行原理?為啥其不成為死循環?
echo "#########".$i."<br>";
$i++;
}
?
第四章
函數
函數是一段完成指定任務的已命名代碼
函數定義:
function 函數名(參數1,參數2,參數3,...)? //注意函數的命名規則參照變量命名規則,函數名不能重名,函數名不區分大小寫,只有變量區分大小寫
{
??????? 函數體;
???????
??????? return 返回值;
}
聲明函數時,函數的參數一般稱為形參;調用函數時,傳入的參數稱為實參;
函數調用注意函數名后要有括號;
函數如果有返回值,那么調用函數時的帶參數的函數名也就代表函數中return后面的值,即此時其有兩個作用一是調用函數二是代表return后面的值。
函數執行到return語句就不再 執行后面的語句。
?
4.2
函數的幫助文檔
/*寫出函數的作用
*函數有幾個參數,每個參數是什么類型的,哪些參數是必須的,哪些參數是可選的
*函數執行后返回什么樣的結果
*/
變量的作用范圍——全局變量和局部變量
在函數內要訪問函數外面的值有兩種方式即:
使用global關鍵字或者使用全局數組$GLOBALS[ ];
要在函數外部訪問函數內部的變量需要借助return返回值
在函數形參里聲明的變量和函數內部聲明的變量是一回事(局部變量),[調用函數傳值時就相當于在函數內部聲明了一個變量?]
兩者區別在于,在函數內部定義的變量在函數調用時不可以賦值,在參數里面聲明的變量在函數調用時可以通過傳值的方式給其賦值。
傳值與傳址? fun($a)?? fun(&$a)
靜態變量?? static $a;
一個靜態變量在所有對該函數調用之間共享,并且僅在腳本執行期間第一次調用時被初始化
通常靜態變量第一次調用是賦予一個初始值。
判斷函數是否存在?? function_exsit({"fun");
4.3
任意參數
php中調用函數時可以使用任意參數。實參大于形參或形參大于實參皆可;
默認參數(實參少于形參)
默認參數必須列在所有沒有默認參數的后面
任意參數列表(形參多于實參)
使用php系統函數:Func_get_args()——返回一個數組,數組中為傳進的參數值
變量函數——把一個函數賦給變量【函數名稱不加括號——代表整個函數(函數指針)】
function test()
{
??????? echo "####################<br>";
??????? echo "####################<br>";
}
$a=test;//注意不加括號,如果加上就相當于先調用函數,再將函數值賦給變量$a
$a();//調用函數$a代表整個函數體
如果一個變量名后面有括號,php將尋找與變量的值同名的函數并嘗試執行它,可用于實現回調函數函數表等
變量函數不能用于語言結構,系統中的函數不能用于變量函數:echo()? print()? unset()
empty()? include()?? require()????
遞歸函數——自己調用自己???? 注意退出條件 防止死循環
function demo()
{
??????? if($a > 1)
??????? {
??????????????? $r=$a*demo($a-1);
???????????????
??????? }else
??????? {
??????????????? $r=$a;???????
??????? }
??????? return $r;
}
echo demo(4);
4.4
內部函數——在函數內部再聲明一個函數
在父函數沒有被調用的情況下,父函數里面的函數不能被調用
重用函數
include();??? //include("demo.php"); 或者? include "demo.php";
require();??? //同上 類似的還有echo
include_once(); //防止函數等重復定義錯誤,比如多個頁面(都包含過同一函數文件)之間互相調用
require_once();?
require()在預處理期間導入,相當于將文件完全拷貝,與有無條件邏輯無關
include()每次都要重新計算文件名,在處理錯誤上,include產生一個警告,require產生一個致命錯誤
?
第五章
字符串
字符串的定義
雙引號定義的字符串"",
特點:可以在雙引號里面執行變量;可以使用轉義字符;雙引號中可以包含單引號
$num=1000;?? $a="##### $num aaaaa";如果不像在輸出結果中有空格可以用兩種方式解決:$a="#####".$num."aaaa";或者$a="#####$(num)aaaaa";
echo "this is a \"string\" test!";
單引號定義的'',不能在單引號的字符串里面執行變量(只能使用連接的辦法);只能使用部分轉義字符(可以使用轉義單引號和轉義斜杠\)
反引號``,在反引號里使用的是服務器的命令,將命令的輸出結果返回到字符串中
?
定界符,和雙引號一樣但可以在里面使用任何多的雙引號;
heredoc
<<<定界符
定界符;
?
字符串的相關函數
輸出函數
echo(); 不用括號可以輸出多個參數,參數之間用“,”號隔開,用括號則不可
print();? 有返回值 1,0,只能輸出一個參數
die();?? 輸出里面的內容并推出程序(類似 echo+exit)
??????? mysql_connect("localhost","root","") or die("連接失敗!")
??????? or的用法:如果前面的執行成功則不執行后面的語句,如果前面的執行失敗則馬上執行后面的語句
printf();按格式輸出
sprintf();用法類似于printf()但不知接輸出結果而是將結果保存于變量中
print_r();只用于輸出數組
var_dump();檢測變量類型
修正字符串函數
itrim()去掉字符串左空格
rtrim()去掉字符串右空格
trim()去掉字符串兩邊空格
以上三個函數不改變原字符串,返回去掉空格后的新的字符串
strrev()將字符串前后顛倒
函數不改變原字符串,返回新的字符串
strlen()求字符串長度
strtolower()將字符串轉換成小寫
strtoupper()將字符串轉換成大寫
函數不改變原字符串,返回新的字符串
ucfirst()將字符串中第一個字符轉為大寫
ucwords()將字符串中每個單詞第一個字母改成大寫
函數不改變原字符串,返回新的字符串
explode(string srparater,string string[,inc limit])使用一個字符串分割另一個字符串,返回數組
implode(string glue,array pleces)用一組較小的字符串創建一個大字符串,返回字符串
??????? 別名:join()用法與implode相同
substr(string string,int start[,int length])取部分字符串
strstr(str,str)別名:strchr()返回字符串中某字符串開始處至結束的字符串
int strpos(str,char[,int offset])尋找字符串 、中某字符最先出現的位置
strrpos()最后出現的位置
str strrchr()返回最后出現的字符到結尾的字符串
str _pad(str str,in length,str add,STR_PAD_LEET|STR_PAD_RIGHT|STR_PAD_BOTH)字符串的填補函數
字符串比較
<>==
按字節進行字符串比較
strcmp()? 區分大小寫,返回值為-1? 0?? 1
strcasecmp()不區分大小寫的比較
按自然排序法進行字符串比較
strnatcmp()
字符串的模糊比較
soundex()按發音比較鍵
similar_text()計算兩個字符串的相似度,返回匹配個數,
如果有第三個參數則此參數為百分比
替換字符串
str_replace(str ,str,str)返回替換后的字符串,源字符串為改變(str_replace(被替換串,替換串,母串))
str_replace(array,string,string)
str_replace(array,array,string)兩個數組對應好
字符串翻譯函數
strtr(string,string from,string to)字符串的翻譯函數
strtr(string,array)(數組鍵值互換)
?
stripslashes();
addslashes()
htmlentities()
htmlspecialchars()
strip_tags()刪除/過濾HTML標簽
處理URL
對URL字符串的解析
parse_str()
parse_url()
對URL編碼處理函數
rawurlencode()
urlencode()
urldecode()
構造查詢字符串等
http_build_query()
?
第六章
1.PHP中數組的聲明
2.PHP數組的遍歷
3.PHP數組的相關處理函數
什么是數組?
??????? 數組是一個可以存儲一組或一些列數值的變量
???????
??????? 可以存儲任何類型的數據(多數據類型);
??????? 數組長度可變
下標:可以視為資料內容在此數組中的識別名稱,
數組的聲明
??????? PHP數組分兩類
??????????????? 索引數組:數組的索引值是整數,以0開始
??????????????? 關聯數組:數組以字符串作為索引值并且
$arr[0]=1;$arr[1]=2;$arr[2]=3;
??????? $數組變量名[索引值]=資料內容;$[0]=12;$["name"]="zhangsan";
??????? $arr[]=1;$arr[]=100;
???????
??????? $數組變量名=array(資料內容,資料內容,。。。)
??????? $arr=array(1,"abc",2);$arr-array("one"=>1,100=>"abc",2)//2的下標為101,索引下標依據前面的索引小標遞增
????? $arr=array("age"=>1,2,"name"=>"one",3.333,true)//關聯數組與索引
數組混合使用,如果索引數組不指定下標,下標從0開始
二維數組的聲明:
遍歷數組
foreach循環結構
while() list()? each()//詳見視頻6.2
6.3
指針控制函數
current(數組的名稱) :得到目前指針位置內容的資料(不移動指針)
key(數組的名稱):讀取目標指針所指向資料的索引的值
next(數組名稱)往下移動一個
prev()前一個
end()結尾的
reset()重回第一個
count():求數組長度
sizeof():求數組長度
array_change_key_case(目標數組,形態常數)//適用PHP4.2.0以后版本
??????? 將數組中字符串索引的英文字母轉換為全部大寫或小寫形態去不
??????? 形態常數:CASE_UPPER轉換為大寫?? CASE_LOWER轉換小寫
array_chunk(目標數組,索引個數[,boolean]):將指定的數組分為小數組_分解數組
array_count_values(數組名稱):計算數組中各值出現的次數
array_fill(起始索引位置,區段大小,指定字元):初始化數組
array_filter(目標數組,使用者定義的函數):過濾函數——字符串默認等于0???????
array_walk()
array_map()
array_flip(目標數組):目標數組中的索引與值對調,注意翻轉后相同鍵名的覆蓋!!!!
array_sun(目標數組):計算數組中所有元素值得總和
array_unique():去除數組中重復的值
6.4
array_values()返回數組中所有值形成一個新數組,忽略原有鍵名,重新使用數字索引值
array_keys()返回包含數字或字符串的鍵名數組
數組檢索
in_array()查找每個某一個值是否在數組里面,返回布爾值:第一個參數:要檢索的元素;第二個要檢索的數組,第三個參數,是否嚴格按照數據類型進行檢索
array_search()與in_array()參數相同,存在返回值為相對應的鍵名,不存在返回FALSE
array_key_exists();判斷下標是否在數組中,返回布爾值
數組與變量轉換——元素的鍵名與變量名,元素的值與變量值保持對應關系
extract()數組轉換成變量
compact()變量轉換成數組
數組與棧
棧“后進先出”
array_push()將一個或多個元素壓入數組,返回數組元素個數
array_pop()將數組中最后一個元素彈出(將元素從數組刪除),返回彈出的元素
數組與隊(隊列)
array_unshift()在隊列的開頭插入一個或多個元素,返回數組長度
array_shift()在數組的開頭彈出數據,返回刪除的元素
數組排序
sort()
忽略鍵名的數組排序
sort()
rsort()
usort()
保留鍵名的數組排序
asort()
arsort()
uasort()
根據鍵名對數組排序
ksort()
krsort()
uksort()
按自然數順序排序
natsort()
natcasesort()
數組元素計算的函數
array_sum()計算數組元素之和
array_merge()數組合并
array_merge_recursive()數組合并
array_diff()求差集
array_diff()_assoc()
數組交集
array_intersect()
array_intersect_assoc()
?
第七章
PHP面向對象
oop
什么是類
什么是對象
類和對象之間的關系
什么是成員屬性
什么是成員方法
?
7.2
如何去抽象一個類
class? 類名
{
??????? 成員屬性;
??????? 成員方法;
}
7.3
如何實例化對象
$對象名稱=new 類名稱()
$對象名稱->成員屬性;$p->name="張三"
$對象名稱->成員方法;$p->say();
7.4
特殊的引用$this使用
構造方法特點:名稱和類名相同,對象一產生的時候,自動調用構造方法,
用構造方法初始化成員屬性
__construct()//構造方法
{
}
__destruct()//析構方法——棧
{
}
7.5
封裝性
private
就是將對象內部的屬性或方法封裝在自己對性的內部,在對象內部可以被使用或訪問,但在對象的外部或在其它對象里不能使用封裝的成員屬性或成員方法
7.6
__set()對私有屬性賦值時自動調用
__get()對私有屬性取值時自動調用
__isset()判斷對象里面的私有屬性是否存在時調用的
__unset()刪除對象內部私有屬性時自動調用
在某一時刻自動調用的方法
7.7
類的繼承
繼承就是對原有類的“擴展”
7.8
類方法的重載
訪問類型
private? protected? public
??????????????????????? private??????????????? protected???????????????? public
同一個類中??????? ok????????????? ok???????????? ok
子類中???????????????????????????? ok??????????????????????? ok
外部????????????????????????????????????????????? ok
7.9
常用關鍵字:final??? static??? const
final:只能用來定義類和方法
作用:使用final定義的類不能被繼承
??????? 使用final定義的方法不能被重載
static? :可以修飾屬性,也可以修飾方法
靜態成員使用?? 類名::$成員? 的形式訪問
this:在對象中代表本對象
self:在類中代表本類
用static聲明的方法里面不能使用非靜態的成員
const:是一個在類里面定義成員屬性為常量的關鍵字
類名::成員屬性(沒有$)
只能修飾屬性,只用在聲明的時候給初始值
const country="中國";
7.10
自動調用的方法
__toString()???? __clone()???? __call()??? __autoload()
__toString()在直接輸出對象是自動調用
__clone()在克隆對象時自動調用的方法;作用:對新克隆出來的副本進行初始化
$this? 代表副本??????????????????????????????????????? $that? 代表原本(不好用)
__call()調用對象里面不存在的方法時自動調用
__autoload()寫在類外面,加載類時自動調用
?
7.11
對象的串行化與反串行化
兩個過程:串行化,就是把對象轉為二進制的字符串?? serialize():參數為對象名,返回值是串行化后得到的二進制串
反串行化,就是把二進制的字符串轉化為對象?? unserialize()函數
需要串行化的兩種情況:
第一種:對象在網絡中傳輸的時候;
第二種:將對象寫入文件或者是寫進數據庫時
部分序列(串行化)化
__sleep()?? //有選擇的序列化
{
??????? $arr=array("name","age");
??????? return $arr;
}
__wakeup()?? 作用類似于:__clone()方法,反序列化初始化對象
{
???????
}
?
7.12
抽象類與接口
抽象方法:在類里面沒有方法體的方法就是抽象方法,即沒有{}以及其中的內容,在方法名后面加一個分號結束,另外在方法聲明時還要加上關鍵字“abstract”來修飾;
抽象類:如果一個類里面有一個類是抽象的,那么這個類就是抽象類;
??????? 這個類就要使用“abstract”關鍵字來修飾
???????
??????? 注意:抽象類不可以實例化對象
用途:抽象類就相當于一個規范,
7.13
接口聲明與使用
class? Demo??????????? //普通類
{
??????? 可以有成員屬性
??????? 可以有成員方法
}
abstract class Demo?? // 抽象類
{
??????? 可以有成員屬性,可以有普通方法,至少有一個抽象方法
}
interface Dema???????? //接口
{
??????? 所有的成員屬性必須是常量(const),所有的方法都是抽象的(不需要abstract關鍵字),所有的成員都必須是public
}
作用:接口也是一種規范,與抽象類相似
實現接口時使用implements 關鍵字? == extends 都是創建一個類的子類
可以使用抽象類去實現一個接口的部分方法
使用類去實現接口中全部方法
訪問常量用類名::常量名
接口之間可以繼承? 用extends關鍵字
一個類可以實現多個接口
class Demo implements One,Two,Three
{
}
class Demo extends Test implements One? //繼承一個類的同時可以實現多個接口,一定先繼承再實現
{
}
7.14
多態的應用
?
第八章
正則表達式
是用于描述字符排列模式的一種語法規則。
作用:字符串的模式分割、匹配、查找、替換
8.1
正規字符:a_z? 0_9??? A_Z
特殊字符:()?^$
原子:(普通字符,如:英文字符、數字、標點符號等)
?? 單個字符,數字,如a-z?? A-Z? 0-9
?? 模式單元,如(abc)
?? 原子表,如[abc],使用[]里面每個原子地位相等,只匹配其中一個原子
??????? [^abc]? “^”排除原子表 ,匹配除原子表內原子之外的任何一個字符
??????? [a-z]? [a-zA-Z0-9]
???????
?? 轉義字符組成
??????? \d?? 匹配一個數字 0-9 [0-9]
??????? \D?? 匹配除數字意外的任何一個字符? [^0-9]
??????? \w? 匹配一個英文字母,數字或下劃線(_)[0-9a-zA-Z_]
??????? \W 匹配除英文字母,數字下劃線外任何一個字符[^0-9a-zA-Z_]
??????? \s? 匹配一個空白字符(\f\n\r\t\v) [\f\n\r\t\v]
??????? \S? 匹配一個除空白字符外的任意字符[^\f\n\r\t\v]
??????????????????? \f??? 換頁
??????????????????? \n? 換行
??????????????? \r?? 回車
??????????????? \t? 制表符
??????????????? \v? 垂直制表符
??????? \oNN?? 八進制
??????? \xNN??? 十六進制
??????? \cC?????? 匹配一個控制字符
8.2
元字符:(有特殊功能用途的字符)*+?.|^$——如果元字符想匹配原意加\轉義即可
*:0,1或多次匹配其前的原子——/go*gle/可以與ggle匹配
+:1或多次匹配其前的原子與*相比,*可以沒有即/go*gle/可以與ggle不匹配
?:0次或1次匹配其前的原子
.:匹配除換行符外任何一個字符,相當于[^\n](linux)[^\n\r](win)
|:或得意思,匹配兩個或多個選擇,優先級比較低
^:匹配字符串串首的原子,即必須以什么開頭??? /^abc/
$:匹配字符串串尾的原子,即必須以什么結尾??? /abc$/
\b:匹配單詞邊界?? /\bis\b/ is兩邊必須都有邊界
\B:匹配單詞邊界以外的部分
{}的應用:
{m}:表示其前原子恰好出現m次
{m,n}:表示其前的原子至少出現m次,最多出現n次
{m,}:表示其前的原子出現不少于m次
():括號里面內容整體表示一個原子,一個模式單元中的表達式將被優先匹配或運算,系統自動
將這些模式匹配單元依次儲存起來,需要時可以用“\1? \2? ”的形式進行引用,當正則表達式包含有相同的匹配單元時這種方式是比較便于管理的
8.3
模式匹配的順序,由左到右 依次匹配
優先級???????????????
模式單元 ()?????????????? 1
重復匹配 ?*+{}??????????? 2
邊界限制 ^$ \b \B?????????????????? 3
模式選擇? |?????????????? 4
?
模式修正字符:(i,u,s,x):模式修正符擴展了正則表達式在字符匹配替換操作時的某些功能,增強了正則表達式的處理能力
標記在整個模式之外,如"/abc/i",模式修正符可以組合,如"/abc/iUsx"
詳見手冊?
i:不區分大小寫的匹配
m:將字符串視為多行
s:將字符串視為單行,換行符作為普通字符
x:將模式中的空白忽略
e:
A:
D:
U:匹配到最近的字符串
S:
?
?
兩種函數庫,功能相似效率不同
PCRE??? preg_??? //效率較高
POSIX?? ereg_
正則表達式模式定界符除了字母 數字和正斜線(\)之外都可作為定界符,通常用/
?
8.4(8.5)
preg_match()
preg_match_all()
preg_grep()
8.5(8.4)
?
8.6
UBBCode轉義
正則中文匹配:\x7f-\xff
?
第九章
??????????????? PHP文件系統(文件操作)
9.1
php對文件系統的操作是基于unix或者linux的
?
fopen("目的文件名稱","文件打開模式參數")//打開成功返回文件指針,如果打開失敗返回假
目的文件名稱:
windows:c:\\test\\test.txt?? 兩個“\”是轉義,windows也接受"/"的格式?? c:/test/test.txt?? 出于可移植性的考慮,使用"/"格式
linux:/root/test/test.txt????????? “DIRECTORY_SEPAPATOR”常量
fopen("../test/test.txt","r");當前目錄上一級目錄下的test目錄下的test.txt文件
fopen("http://www.cunlicunwai.com/index.php%22,%22r"); 遠程文件不能寫只能讀? http? https
fopen("ftp:root:pass@www.cunlicunwai.com/a.txt","r")? ftp可以以只寫的方式打開,不能以讀寫的方式打開? ftp? ftps
文件打開模式參數
r:只讀方式打開?? 文件指針指向開頭??? 文件必須先存在
r+:讀寫方式打開?? 文件指針指向開頭?? 文件必須先存在
w:以寫的方式打開?? 文件指針指向文件開頭并將文件大小清空? 文件不存在創建文件
w+:讀寫方式打開??? 文件指針指向文件開頭并將文件大小(截為零)清空?? 文件不存在創建文件
a:以寫的方式打開??? 文件指針指向文件結尾?? 寫的內容在文件末尾追加?? 文件不存在創建文件
a+:以讀寫方式打開??
x:創建并以寫入方式打開? 將文件指針指向文件開頭? 如果文件存在則fopen()調用失敗并返回假,并生成一個
錯誤信息,文件不存在嘗試創建文件,只是用于本地文件
x+:創建并以讀寫方式打開??
b:只限于windows系統? 附加在上述模式的末尾,明確操作的是一個二進制文件
t:只限于windows系統?? 附加在上述模式末尾,透明的將行結束符(\n)轉換成\r\n
fwrite()?? //別名 fputs()
fclose()? //關閉?? 失敗返回假
9.2
fread();
fgets():從文件指針中讀取一行
fgetc():從文件中讀取一個字符
file():不用打開文件和關閉文件,直接讀取文件,返回數組,文件有多少行數組有多少變量
readfile():讀取文件內容并直接輸出
9.3
fopen()打開遠程文件
file_get_contents(讀取的文件名) 可以打開本地或遠程文件——讀取
file_put_contents(寫入的文件名,寫入的內容,)——寫入
flock(文件指針,訪問的權限)? 鎖定
訪問權限:
LOCK_SH:共享鎖定,讀文件時使用
LOCK_EX:獨占鎖定,寫入文件時使用
LOCK_UN:釋放鎖定,釋放共享或獨占鎖定
LOCK_NB:附加鎖定,? flock($file,LOCK_EX+LOCK_NB)? flock($file,LOCK_UN+LOCK_NB)? 防止鎖定阻塞
9.4
ftell(文件指針):返回文件指針當前位置
fseek(文件指針,移動的字節數,起始位置):移動文件指針到指定位置?? //讀取成功返回0,否則返回-1
起始位置:SEEK_CUR:當前位置??????? SEEK_SET:默認,從開始位置開始讀??? SEEK_END:從文件末尾開始讀(第二個參數負數倒著讀)
rewind():移動文件指針到文件開頭
如果要使用此函數,必須提供一個由fopen()打開的合法的文件指針,指針位置是以從文件開頭的字節數來定的
下面四個函數,操作成功返回真,失敗返回假
copy():復制
unlink():刪除
rename():重命名
ftruncate(文件指針,截取長度):截取文件
9.5
獲取文件屬性的函數,所需參數-文件名稱
filectime():文件創建時間? 返回時間戳
filemtime():文件修改時間
fileatime():最后訪問時間
file_exists():判斷文件是否存在
filesize():文件大小
filetype():判斷文件類型
is_dir():判斷是否為目錄文件
is_file():判斷是否為常規文件
is_link():判斷是否為鏈接文件
is_executable():判斷文件是否為可執行文件
is_readable():判斷文件是否可讀
is_writable():判斷文件是否可寫
linux文件權限——rwx(文件擁有著)??? rwx(文件所在組)? rwx(其它用戶)?? r-讀 4???? w-寫? 2????? x-執行? 1
chmod(文件名,權限常數):改變文件權限
chowm(文件名,用戶id):改變文件擁有者?? 普通用戶id從500開始
chgrp(文件名,組id):改變文件擁有組??? 普通組id從500開始
fileowner(文件名):獲取文件擁有者,返回擁有者id(管理員id為0)
filegroup(文件名):獲取文件擁有組,返回擁有組id
9.6
目錄操作
遍歷目錄
fopen()
fread()
fclose()
opendir(目標路徑):返回目錄的引用句柄,否則返回假及錯誤警告e_warnine
readdir(目錄的引用句柄-上一個函數返回的):返回目錄下的文件或目錄名,且指針向下移動一次???? ("."代表當前目錄,".."代表上一級目錄)
rewinddir():把指針返回目錄開始處
closedir():
檢索目錄? *? ??? {}
glob()
9.7
建立目錄
mkdir($pathname[,mode]):成功返回真
刪除目錄
rmdir(dirname):指定的目錄必須為空目錄
目錄非空時沒有現成的刪除函數,自己用遞歸的方法寫函數
function? deleteDir()
{
??????? $handle=opendir($pathName);
??????? readdir($handle);? //刪除"."
??????? readdir($handle); //刪除".."
???????
??????? while(($file=readdir($handle))!==false)??? //進入目錄刪除其中的文件
??????? {
??????????????? $file=$pathNme.DIRECTORY_SEPARATOR.$file;
??????????????? if(is_dir($file))
??????????????? {
??????????????????????? deleteDir($file);
??????????????? }else
??????????????? {
??????????????????????? if(unlink($file))
??????????????????????? {
??????????????????????????????? echo "文件 $file 刪除成功<br>";
??????????????????????? }else
??????????????????????? {
??????????????????????????????? echo "文件 $file 刪除失敗<br>";
??????????????????????? }
??????????????? }
??????? }
??????????????? closedir($handle);//關閉打開的目錄
??????????????? if(rmdir($pathName))?? //刪除目錄
??????????????? {
??????????????????????? echo "目錄<b>$pathName</b>刪除成功<br>";
??????????????? }else
??????????????? {
??????????????????????? echo? "目錄<b>$pathName</b>刪除失敗<br>";
??????????????? }
}
復制目錄
沒有現成函數,使用遞歸創建
function copydir($dirfrom,$dirto)
{
??????? if(is_file($dirto))
??????? {
??????????????? die("無法創建目錄 $dirto");
??????? }
??????? if(!file_exists($dirto))
??????? {
??????????????? mkdir($dirto);
??????? }
???????
??????? $handle=opendir($dirfrom);
??????? readdir($handle);
??????? readdir($handle);
???????
??????? while(($file=readdir($handle))!==false)
??????? {
??????????????? $filefrom=$dirfrom.DIRECTORY_SEPARATR.$file;
??????????????? $fileto=$dirto.DIRECTORY_SEPARATR.$file;
???????????????
??????????????? if(is_dir($filefrom))
??????????????? {
??????????????????????? copydir($fielfrom,$fileto);?? //遞歸
??????????????? }else
??????????????? {
??????????????????????? copy($filefrom,$fileto);
??????????????? }
???????????????
??????? }
???????
??????? closedir($handle);
}
?
第十章
10.1
文件上傳
1.表單提交
2.對文件的操作
表單必須要改兩個值
1.method="post"
2.enctype="multipart/form-data"???? //文件上傳時改成此值,其它情況默認即可
隱藏表單
$_FILES:接收文件上傳,二維數組
?
?
文件下載
10.2
標準的MIME(多用途網絡郵件擴展協議)類型
主要用于網絡文件、電子郵件的傳輸或下載等,MIME類型規定了各種文件的格式的類型
text:文本類型
??????? text/html?? .html?? .htm
??????? text/plain?? .txt?? .log
image:圖像類型
??????? image/gif??? .gif
??????? image/jpeg?? .jpeg? .jpg
??????? image/png???? .png
autio:聲音
??????? audio/x-midi??? .mid?? .midi
??????? audio/x-wav???? .wav??
video:視頻
??????? video/quicktime????? .qt?? .mov
??????? video/mpeg???????????? .mpeg
application:應用程序
??????? application/pdf??????? .pdf
??????? application/msword??? .doc??? .dot
??????? application/vnd.ms-excel??? .xls
??????? application/vnd.mspowerpoint??? .ppt
??????? application/zip?????? .zip
??????? application/rar?????? .rar
??????? application/xml????? .xml???? .xsl
??????? application/mshelp??? .hlp??? .chm
??????? application/octet-stream?? .exe? .bin? .com?? .dll??? .class
multipart:多組件
message:處理消息的
每一種MIME類型定義了大量的子類型,子類型使用需用"/"分割
move_uploaded_file()
is_uploaded_file():判斷是否是上傳文件
錯誤代碼($_FILES[$filename]["error"])
10.3
上傳多個文件和文件下載
<form action="todo.php" method="post" enctype="multipart/form-data">
//注意name為數組名稱,此時$_FILES變為三維數組,
<input type="file" name="myfile[]"><br>
<input type="file" name="myfile[]"><br>
<input type="file" name="myfile[]"><br>
<input type="file" name="myfile[]"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="100000">? //隱藏表單
<input type="submit" value="上傳">
</form>
//$_FILES內部組成為
$_FILES["myfile"]["name"][o]
$_FILES["myfile"]["name"][1]
$_FILES["myfile"]["name"][2]
$_FILES["myfile"]["name"][3]
$_FILES["myfile"]["size"][o]
.......
?
下載文件
下載文件需要向瀏覽器發送必要的頭信息,通知瀏覽器將要進行下載文件的處理,發送信息包含以下內容:
??????? 文件下載的類型使用MIME類型
??????? 下載文件的描述,如給出文件的名稱等
??????? 下載文件的長度以字節為單位
發送頭信息,使用header()函數,此函數前面不能有任何輸出包括空行空格都不可以
此函數接收一個頭信息的字符串作為參數,之后需要將文件內容輸出到瀏覽器以便進行下載
$filename="one.html";
header("Content-type:text/html");?? //指定文件類型
header('Content-Disposition:attachment;filename="download.html"')? //指定文件的描述
??????????????????????????????????????????????????? 附件????? 文件名
header("Content-Length:".filesize($filename));?? //指定文件大小
$fp=fopen($filename,"r");
while(feof($fp)==false)??????????????? //循環從里面讀字節輸出
{
??????? echo fread($fp,1024);
}
fclose($fp);
?
$filename="圖片.jpg";
header("Content-type:image/jpeg");?? //指定文件類型
header('Content-Disposition:attachment;filename="tutudown.jpg"')? //指定文件的描述
??????????????????????????????????????????????????? 附件????? 文件名??? 隨便命名
header("Content-Length:".filesize($filename));?? //指定文件大小
readfile($filename);? //讀取全部文件內容并直接輸出到瀏覽器
轉載于:https://www.cnblogs.com/daiye/archive/2009/10/19/1585914.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的lamp兄弟连视频笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用bde连接 连接sql server2
- 下一篇: 书评:卓有成效的ThoughtWorks