web基礎入門和php語言基礎入門 二
- MySQL入門-續
- MySQL之數據查詢操作
- MySQL其他知識點
- php語言基礎入門
- 認識PHP
- PHP的工作流程
- 安裝PHP環境
- 認識一個PHP程序
- PHP基礎知識點
- 進入正題
- PHP與WEB交互
- PHP與MySQL交互
- 總結
MySQL入門-續
MySQL之數據查詢操作
- WHERE 子句,條件限制語句:
SELECT *或其他 FROM 數據表(可以是多個) WHERE 需要滿足的條件
SELECT NAME FROM VULN WHERE NAME="ecoloy";
SELECT * FROM VULN WHERE NAME="ecoloy";
首先,我先插入了幾條數據。
然后我進行了限制查詢,從 vuln
數據表中的 name
字段下篩選出來 NAME="ecoloy"
數據。
第二句話是,從 vuln
數據表中的所有字段下篩選出 NAME="ecoloy"
的數據。
對數據還可以進行 AND
和 OR
限制。
AND
代表兩個條件都要滿足。
OR
代表滿足其中一個條件即可。
SELECT * FROM VULN WHERE NAME="ecoloy" and ID=5;
SELECT * FROM VULN WHERE NAME="ecoloy" OR ID=5;
2、ORDER BY 子句,排序語句:
SELECT *或其他 FROM 數據表(可以是多個) ORDER BY 字段 ASC/DESC;
ASC
是升序排序, DESC
是降序排序。
我們可以使用數字來進行判斷列長度,比如:
SELECT * FROM VULN ORDER BY 4;
3、UNION 子句,聯合查詢
所謂聯合查詢,就是查詢不同的兩個表,將要查詢的信息合并顯示。
聯合查詢有兩個子句:
UNION 子句 :查詢后不顯示重復數據
UNION ALL 子句 :查詢后會顯示重復數據
SELECT *或其他 FROM 數據表1 UNION SELECT *或其他 FROM 數據表2;
select name,desname from vuln union select name,password from users;
MySQL其他知識點
1、MySQL的注釋: #
從這開始到后面, --
從這開始到后面 , /*
這全是注釋*/
2、常見的內置函數
database() : 顯示當前數據庫名稱
current_user : 顯示當前用戶
version() : 顯示當前數據庫版本
load_file() : 顯示一個文件內容
into outfile : 寫入文件
學習一下 load_file() 與 into outfile 的使用
php語言基礎入門
認識PHP
PHP(Hypertext Preprocessor ,超文本預處理語言),是一種通用開源腳本語言。主要用于WEB開發領域,其語法吸收了C語言,JAVA和Perl的特點。PHP 是一種創建動態交互性站點的強有力的服務器端腳本語言。
上面這段話來自較官方說法,其實對于PHP來說,就是常用在WEB領域的開源腳本語言,作為中間人的角色處理WEB數據,或是處理請求數據,或是返回數據。比如說,我們常見的登錄過程,輸入賬號密碼,點擊提交后,我們所請求的數據是先經過PHP來處理,然后再去數據庫進行操作查詢處理,查詢處理過后再返回給PHP,PHP再經過處理后返回到前端頁面,即呈現在我們眼前的瀏覽器頁面。簡言之,PHP在WEB中充當中間人的角色,它主要處理WEB數據。
其他:在一整套WEB中,要有操作系統,WEB服務器,后端處理語言,以及數據庫。操作系統就是我們常見的Windows,Linux,Ubuntu等。WEB服務器常見的是Apache,Tomcat,Windows Server等。后端處理語言,有PHP,JSP,ASP,Python等,數據庫有MySQL,Oracle,SQL server等。
PHP的工作流程
用語言簡述了PHP的工作流程,加深印象,不妨看看下面這張圖:
上面這張圖,是我們瀏覽網頁基本工作流程,我將其分為了六個步驟:
第一步:我們上網,瀏覽頁面,通過HTTP協議向Web服務器請求數據。
第二步:我拿的Apache舉例,它接收到數據后,轉交給PHP來處理這些數據。
第三步:PHP與數據庫交互,比如Mysql,通過查詢或其他操作訪問數據
第四步:數據庫將訪問操作的數據返回給PHP讓它再去處理。
第五步:PHP再去處理這些數據,整理成我們網頁能看到的樣式,然后返回給Web服務器。
第六步:Web服務器接收到了PHP整理好的數據后,將其打包成HTTP協議返回給我們。
安裝PHP環境
PHP環境安裝
1、Windows下安裝:
在Windows下安裝PHP環境的話,我們首選PHPstudy,將PHP所需環境一鍵部署,省時省力。關于版本,我們下載最新版本。即 phpStudy v8.0版本從官網下載,一路下一步即可。
官方網址:
https://www.xp.cn/download.html
Linux下安裝:
較比于Windows下安裝,Linux下安裝PHP還需要安裝所需的WEB服務器,數據庫,想對于麻煩一些。但卻可以從搭建中,清晰了解WEB基本架構是怎樣的的,對后期學習是有
一定幫助的。
Ubuntu下安裝:
https://www.cnblogs.com/xpwi/p/9818751.html
or
bing,百度搜索
注意:在Ubuntu下或是在Centos下,或是其他Linux系統版本下搭建是有區別的。可以根據自己具體需求查閱相關資料。
說明:
- 關于搭建PHP環境,是基于在服務器上,單一的PHP腳本是運行不了的,一定要放在服務器上。
- 關于PHP程序編寫,大家可以下載phpstorm,專業軟件編寫PHP,以及調試PHP。
- 對于練習來說,我使用的是Visual Studio Code 文本編輯器,編寫好程序后,放入到服務器根目錄,打開對應路徑,即可。
認識一個PHP程序
現在,我們對PHP有了大致的了解,也搭建完了PHP所需的環境。
那么,我們不妨來個實際例子,對它再進一步的認識。
然后,我們再去學習 PHP基礎知識點 。
大家先去這個地方下載我們第一個PHP腳本
https://github.com/Kevil-hui/BestShell
接下來,將腳本復制粘貼到網站根目錄中:
我們打開瀏覽器,輸入路徑,打開這個腳本:
我們可以看到,這個腳本執行了很多內容,都是一些很敏感的內容,有些朋友肯定已經知道了這個腳本的作用了,以及它們的特有的名稱了(有些敏感,大家知道就好)。這就是一個PHP腳本,它所執行的功能,大家可以實際去操作一下,是不是很有趣。
為什么先看個這個例子,為了激發大家的興趣,看懂看不懂先放一邊,后面學習了基礎語法,都會懂得。興趣驅使學習,入門是挺枯燥
注意:
我們在輸入路徑時,后面端口我設置的為 7089 ,大家可以根據自己需求設置:
注意:
請大家不要使用該腳本當任何Webshell,請勿用于非法行為,本例子目的為了學習了解PHP,請大家遵守網絡安全法。
PHP基礎知識點
現在進入PHP基礎知識點環節,這個部分稍微有些多,都是基本知識點,有其他語言的基礎的朋友,大致看一下就會學習很多,語言語法都是如此相似。沒有學過其他語言的朋友們,看完這些基礎點后,建議大家根據自己能力拓展學習,掌握兩三門語言是非常有必要的。
進入正題
- 變量與其數據類型
變量,在編程語言中是最基礎的概念,其意思為一種可變化的量。可根據你所需將其賦值的量。
這個變化就是根據你的需求而變化的。
變量使用規則:
1、變量必須以 $ 美元符號開始
2、變量不能使用數字字符開頭
3、變量開頭可以下劃線 _ 開始
4、變量名不能是PHP常用的關鍵字
5、在PHP中對變量大小寫敏感,$a 與 $A 是兩個變量
舉個例子:
<?php
$a = 1;
$b = "7089bAt";
echo $a;
echo '<br>';
echo $b;
echo '<br>';
$c = 5;
$d = 6;
$e = $c + $d;
echo $e;
?>
輸出結果:
解讀:
在上面代碼中,我們可以看到使用了 = 等于號進行賦值,是的,幾乎在常見的語言中,都是使用等號進行賦值,即把右面的數據’給’右面,這時 $a
不在孤獨了,它有了整型 1
的陪伴,而 $b
也有了字符串 7089bAt
的陪伴,還有下面的那些變量。在下面我用了個最最最簡單的計算,來讓大家了解一些變量最基本的作用。在程序中,可以對不同類型變量,進行不同的操作,下面我們會了解到變量有哪些數據類型。
在進行變量操作時,已聲明的變量會被計算機內存分配一塊區域存放你所賦的值,即$a
在內存中有一小塊區域,其里面存放著 1
這個整型。以后你再去使用變量 $a
時,你知道它是個整型 1
,所以你可以根據你的需求來使用它。當然,這個值是可以根據你的需求變化的,而且$a
這個變量只在本代碼段里的值是 1
。
- 變量的數據類型
在上面我提到了,整型,字符串,其實這是變量的數據類型。在PHP中的變量數據類型有這些:
四種標量類型:
布爾型(boolen)
整型(integer)
浮點型(float)
字符串(string)
兩種復合類型:
數組(array)
對象(object)
兩種特殊類型:
資源(resource)
Null
詳細介紹:
對于下面這四種常用的標量數據類型,大家需要知道它是什么,怎么用即可。
- 布爾型(boolen)
四種標量類型之一。它只有兩個值,真(True)和假(False)。在PHP中,可以將任何類型的值都轉換為真或假。比如:整型數值零(0)為假,浮點型(0.0)為假,空白字符串(“”)為假等等。
舉個列子:
<?php
$a = true;
if($a == true){
echo "<h1>墨羽</h1>";
}
?>
解讀:
布爾類型常在條件語句中使用,具體條件語句使用,下面會說到。我們先解讀下上面這
句話什么意思:
首先,將 $a
賦值為 true
,接下來,在條件語句中的條件判斷處進行判斷,即 $a == true
,(==
兩個等于號是判斷的意思, = 一個等于號是賦值的意思,不要混淆)。我們已經將 $a
賦值為 true
了,所以說 $a == true
條件是成立的,既然這樣,下面就會執行 echo "<h1>墨羽/h1>";
這句話。所以根據輸出結果看,就是想瀏覽器輸出了墨羽這幾個字。
上面是最基本的條件語句,下面還要學習其他條件語句。
是想瀏覽器輸出了墨羽這幾個字。
上面是最基本的條件語句,下面還要學習其他條件語句。
- 整型(integer)
四種標量類型之一。其數據類型只能為整數 - 正整數或負整數。
具體數值會有一個區間,具體可看:
https://www.php.net/manual/zh/language.types.integer.php
比如:$a=3.14;
,$b=-0.12;
,$c=70.89;
這些都是浮點型、 - 字符串(string)
四種標量類型之一。字符串,即連續的字符序列,可以是數字,字母或符號。
定義字符串的三種方式: - 單引號(’ ')
$a = 'moyv';
- 雙引號(" ")
$b = "moyv";
- 定界符(<<<)
定界符用于定義格式化的大文本,其輸出格式會按照你在定界符中所敲打的形式輸出。
使用方法:
<<<str
格式化文本
str;
舉個列子:
<<<test
墨羽
我是moyv
是兄弟,就來砍我。
test;
解讀:
其中test為自定義的標識符,結束的標識符必須在新的一行開頭,并且不要忘記 ; 。
注意:
單引號與雙引號定義字符串區別:
在單雙引號中包含變量名時,雙引號會將其變量的值輸出,而單引號只會把它當做普通的字符輸出。
在PHP中,有個函數,即 - var_dump(變量名)可以查看數據類型。
具體使用如圖:
- 常量
常量在腳本中是初始化的值,不會變的值。一般在程序中定義了常量之后,在整個程序中這個值都是固定有效的。
自定義常量
關鍵字 - define()
define(string constant_name, mixed value, case_sensitive=true)
參數(string constant_name):必選參數,常量名稱。
參數(mixed value):必選參數,常量的值。
參數(case_sensitive=true):可選參數,指定是否大小寫敏感,true為不敏感。
獲取常量值
關鍵字 - constant(),defined()
1、constant(string constant_name)
參數(string constant_name):常量的名稱
指定獲取某常量,如果成功,返回正常值,如果失敗,則提示錯誤信息(常量沒有被定義)
2、defined(string constant_name)
參數(string constant_name):常量的名稱
指定獲取某常量,如果成功,返回true,如果失敗,返回false
舉個列子:
這張圖片截圖是 認識一個PHP程序 的那個腳本開頭,大家來理解一下常量,變量。記
住這個格式,具體情況下再應用,就會更加熟悉了。
備注:
什么是關鍵字,是程序中保留字,每個字符都有特定的含義,在處理程序時,它只認得這些關鍵字,也會根據關鍵字處理相應功能。
- 運算符與表達式
運算符
運算符,是對常量,變量或數據進行計算的符號。比如,前面我們最開始了解變量時,使用的=
,是賦值運算符,還有==
,是比較運算符,除了這些還有很多運算符,有不同的作用。
在PHP中,有以下運算符:
算術運算符
字符串運算符
賦值運算符
比較運算符
條件運算符
遞增或遞減運算符
位運算符
邏輯運算符
下面我簡單講講幾個運算符:
算術運算符:就是常見的 加,減,乘,除,取余
,所使用的的符號為 +,-,*,/,%
字符串運算符:就是對字符串進行基本操作,比如,使用英文句號.
,是將兩個或多個字符串連接起來形成一個新的字符串。
比較運算符:就是對變量或表達式的值進行大小,真假的比較,根據其比較返回true
或者false
。
邏輯運算符:
這個在程序中是比較中要的一種運算符。
記住下面條件為真的情況,在后面自己寫程序時,熟練操作幾遍就會對這個簡單的概念有很深刻的理解
&&或and:($a && $b)邏輯與,當兩者都為真時,結果為真
||或or:($a || $b)邏輯或,但兩者其中一者為真的時候,結果為真
!:邏輯非,(!$a)是個英文的感嘆號,當$a為假時,結果為真
xor:邏輯異或,($a xor $b),當$a,$b為一真一假時,結果為真
關于邏輯運算符的使用,我們在下面理解了條件語句后,配合實例加深理解。
更多運算符符號,以及使用方法,還有他們的運算優先級,大家可以看這篇文章:
https://www.runoob.com/php/php-operators.html
表達式
表達式,是PHP語言的基本元素,它是將運算符和操作數連接起來的式子成為表達式,聽起來很繞,其實 $a=7089 ,這個賦值操作就是最簡單的表達式,還有上面邏輯運算符兩者比較,也是表達式。
關于表達式,多搭配用于條件語句,循環語句。具體實例,看下面。
- 條件判斷語句
在上面多次提到條件語句,以后在編寫程序時,我們以后常用到條件語句。而且會與一些表達式,搭配使用,關系相當密切。
那么什么是條件語句,其實就是對一件事的判斷,根據判斷結果做出一項選擇。比如拋硬幣,如果正面朝上,我親你,如果反面朝上,你親我。這就是一個簡單的條件語句的判斷。(雖然很不要臉 -.-)
具體在程序中使用,是下面這樣的。
- 條件表達式關鍵字 if,if…else,switch…case
- if語句
- if語句是最簡單的條件判斷語句,它判斷一個條件,如果條件成立,就執行下面語句,如果不成立,則跳過這段程序,執行下面程序。
舉個例子:
<?php
$a=1;
$b=1;
if($a == $b){
echo "haha,我們兩是一對";
}
?>
這段if語句,條件單一,運行結果單一,意思為:如果兩個變量相等,就輸出下面那句
話,使用到了 == 兩個等號,也就是比較運算符。
- if…else語句
- if…else語句有了兩個結果,他判斷一個條件,如果條件成立就執行 if 下面的語句,如果條件不成立的,就執行 else 下面的語句
舉個例子:
<?php
$a=1;
$b=2;
if($a == $b){
echo "haha,我們兩是一對";
}
else{
echo "可惜我們不是一對";
}
?>
這段 if…else 語句理解起來也非常容易,針對一個條件進行判斷,成立與否返回其
中一個結果。要么他們兩是一對,要么不是一對。
- if…else if…else多條件語句
- 多條件語句根據成立的條件不同來返回結果。下面用最經典例子來進行理解。
舉個例子:
- 多條件語句根據成立的條件不同來返回結果。下面用最經典例子來進行理解。
<?php
$chengji = 99;
if($chengji >=90){
echo "你真棒,";
}
elseif($chengji >=80){
echo "繼續努力";
}
elseif($chengji >=70){
echo "多多努力";
}
elseif($chengji >=60){
echo "加油鴨!";
}
else{
echo "小明同學,你終于不及格了!";
}
?>
這段代碼,大家運行以下,修改不同數值,來觀察一下其中不同的結果。
- switch…case語句
- switch…case分支控制語句,對于一個條件進行判斷,根據結果和case中的值對比,如果相等,就執行對應的語句。直到switch語句結束或遇見break。
舉個例子:
<?php
$ta = "xiaoli";
switch($ta){
case "xiaoli":
echo "小li人好";break;
case "xiaozhang":
echo "小zhang個高!";break;
case "xiaowang":
echo "小wang白凈";break;
case "xiaozhao":
echo "小zhao腿長";break;
default:
echo $ta."同志是誰?";break;
}
?>
這段代碼,是使用 switch…case 語句,先設置一個變量其值如上,然后使用該和case 下設定的值比較,如果比較條件成功,就會執行響應的語句,如果設置了一個case沒有的值,就會執行 default 下的語句。
在這段代碼中,出現了個 break ,它也是PHP中的關鍵字,它的意思是跳出這次執行,跳出switch語句。如果不使用 break 的話,程序自動執行完剩下的代碼,然后退出。大家可以將 break 刪除,自行調試,觀察結果。
- 循環語句
了解完條件判斷語句,現在要接觸循環語句。
所謂循環,哲學點說,某件事物周而復始的運動或變化。
在程序語言中的循環,是個閉環,從頭開始到結尾然后再從頭開始。比如說你圍繞著操場跑步,如果按照規定圓圈路線進行,你必然會回到起點,然后又從起點開始,計算新的一圈。在程序中,很多都是如此。
在PHP語言中有四種循環結構,分別是:while
循環 ,do...while
循環 ,for
循環 ,foreach
循環 。
- while循環
- 只需單一的條件,如果條件成立,就循環執行代碼塊
格式:
- 只需單一的條件,如果條件成立,就循環執行代碼塊
while(條件){
要執行的代碼;
}
舉個例子:
<?php
$a = 0;
while($a <= 10){
echo "第".$a."次循環的數字是:".$a."<br>";
$a++;
}
?>
運行結果:
解讀:
大家看運行結果,可以看到代碼運行了十一次。首先我給變量 $a
的值設置為了0
,接下來就是 while
循環 部分,它設定的條件為 $a <= 10
,就是變量這個數字 小于或等于10
的時候停止循環,既然一開始設定的變量為0
,肯定小于10
,那就就執行下面代碼。大家看到里面有個 $a++
,這段簡單的表達式,它的意思是,對變量 $a
進行 自加1
,拓展開來就是 $a=$a+1
。這樣的話,變量一開始為0
,進入一次后加了1
后就變為1
,然后繼續進行第二次判斷,還是小于10
,那就就繼續執行下面代碼,直到變量$a
自加到10
的時候與條件相等,此時就會終止循環。
- for循環
- 給定指定條件,按照規定執行代碼塊。
格式:
- 給定指定條件,按照規定執行代碼塊。
for (初始值; 條件; 增量)
{
要執行的代碼;
}
舉個例子:
<?php
for($a=0;$a<=9;$a++){
echo "第".$a."次循環的數字是:".$a."<br>";
}
?>
運行結果:
解讀:
大家可能發現了,這個例子和 while循環 那個一樣,只不過換了 for循環 。我們可以對比一下發現,其實在這兩個循環中都有三個條件,初始值,循環條件,以及變量的遞增或遞減方式。 for循環 只不過將這三個條件集合在了一個地方編寫。但在實際應用
時還會多少有些出入,根據實際情況再決定用哪個。
for循環 ,還可以嵌套循環,在第一層循環下,再加入一層循環。大家可以自己試試寫個9*9乘法口訣。
- foreach循環
- 只用于循環數組,可遍歷每個數組中的鍵值對。
格式:
foreach ($array as $value)
{
要執行代碼;
}
舉個例子:
<?php
$num=array("1234","12","34");
foreach ($num as $value)
{
echo $value . "<br>";
}
?>
大家可以運行這段代碼,觀察一下結果。
關于數組,是數據類型中的復合類型。它能夠在一個變量中存儲一個或多個值,并且能通過索引號訪問對應的值。要注意的是,數組索引號是從零(0)開始。零(0)就是第一位。
三種數組類型:
索引數組 - 帶有數字索引的數組
關聯數組 - 帶有指定鍵的數組
多維數組 - 包含一個或多個數組的數組
- 聲明數組關鍵字 - array()
索引數組:
要注意的是,索引數組索引號是從零(0)開始。零(0)就是第一位。
$a = array("1","2","3");
關聯數組:
$num=array("one"=>"1","two"=>"2","three"=>"3");
在很多過濾一些sql注入語句,xss等都會將要過濾的語句寫進數組中,便于管理。這么多過濾語句總不能都一個個聲明變量吧。
- 函數
函數,在每個程序語言中都及其重要,它將不同功能代碼打包成不同的代碼塊,極大減少了代碼的冗雜。
就像我們學的那些數學公式,拿來套用,代數即可算出想要的結果。函數亦是如此,不同函數你可以定義不同功能,用到哪個功能就選擇哪個函數,方便簡單,極大的提高了代碼的復用性。
定義函數:
關鍵字:function
格式:
function 函數名(參數1,參數2,...參數n){
函數體,具體代碼
[return 參數];
}
舉個例子:
#一個簡單的計算:
<?php
function jisuan($canshu1,$canshu2){
$result = $canshu1 + $canshu2;
return $result;
}
echo jisuan(70,89);
?>
運行結果:
解讀:
這是一個非常簡單函數,計算兩個數之和,在這個代碼中有幾個地方需要注意:
jisuan(70,80)
:是函數的利用方式。
$canshu1,$canshu2
:這是兩個形式參數,可以理解為一個記號,在利用函數時,要傳入兩個參數才能計算, $canshu1
和 $canshu2
分別對應著,70和89(這兩個參數又是參數是實際數值,它是實際參數),然后進入函數體中,對這兩個數字進行計算。
return $result;
:是將計算的結果的值返回,并結束函數的運行。
形式參數
:如果函數需要傳入參數,需要用到形式參數,也可以理解為記號,標志。
實際參數
:在向函數傳入實際參數時,所傳入的參數值是實際參數。
函數也可以是沒有參數的,也可以不返回值。對于函數這方面,在理解了基礎知識點后,要多進行代碼實踐,多敲代碼,多看代碼,才能運用更熟練。
在函數之后,還有一個比較抽象的概念 - 面向對象。
關于這個點,大家可以了解和實戰了基礎代碼后,進行學習,這個概念比較抽象,只有多練習相應代碼,才能理解更加透徹。
多敲,多練,欲速則不達。
- 字符串操作
字符串是什么,在前面說到了,是一串連續的字符,在PHP中用單引號,或者雙引號,將其引起來。
當然,還可以對字符串進行很多操作,處理。舉個例子來說,moyv
是個字符串,我想將對這個字符翻轉過來,可以用到特定的函數 strrev() 來操作。
舉個實際例子,下面會講到PHP與WEB交互,PHP使用特定預定義的數組來接收WEB發來的HTTP協議數據,這些發來的數據,基本都是字符串,對于這些字符串我們要進行響應處理,比如說POST方式發來的數據,如果要想防止SQL注入,我們可以對字符串進行一些相關操作,防止SQL注入。這只是一個簡單的小實例,更多用法,需要你學習更多了解更多,來自己理解。
php字符串處理函數
addcslashes — 為字符串里面的部分字符添加反斜線轉義字符
addslashes — 用指定的方式對字符串里面的字符進行轉義
bin2hex — 將二進制數據轉換成十六進制表示
chop — rtrim() 的別名函數
chr — 返回一個字符的ASCII碼
chunk_split — 按一定的字符長度將字符串分割成小塊
convert_cyr_string — 將斯拉夫語字符轉換為別的字符
convert_uudecode — 解密一個字符串
convert_uuencode — 加密一個字符串
count_chars — 返回一個字符串里面的字符使用信息
crc32 — 計算一個字符串的crc32多項式
crypt — 單向散列加密函數
echo — 用以顯示一些內容
explode — 將一個字符串用分割符轉變為一數組形式
fprintf — 按照要求對數據進行返回,并直接寫入文檔流
get_html_translation_table — 返回可以轉換的HTML實體
hebrev — 將Hebrew編碼的字符串轉換為可視的文本
hebrevc — 將Hebrew編碼的字符串轉換為可視的文本
html_entity_decode — htmlentities ()函數的反函數,將HTML實體轉換為字符
htmlentities — 將字符串中一些字符轉換為HTML實體
htmlspecialchars_decode —htmlspecialchars()函數的反函數,將HTML實體轉換為字符
htmlspecialchars — 將字符串中一些字符轉換為HTML實體
implode — 將數組用特定的分割符轉變為字符串
join — 將數組轉變為字符串,implode()函數的別名
levenshtein — 計算兩個詞的差別大小
localeconv — 獲取數字相關的格式定義
ltrim — 去除字符串左側的空白或者指定的字符
md5_file — 將一個文件進行MD5算法加密
md5 — 將一個字符串進行MD5算法加密
metaphone — 判斷一個字符串的發音規則
money_format — 按照參數對數字進行格式化的輸出
nl_langinfo — 查詢語言和本地信息
nl2br — 將字符串中的換行符“\n”替換成“<br/>”
number_format — 按照參數對數字進行格式化的輸出
ord — 將一個ASCII碼轉換為一個字符
parse_str — 把一定格式的字符串轉變為變量和值
print — 用以輸出一個單獨的值
printf — 按照要求對數據進行顯示
quoted_printable_decode — 將一個字符串加密為一個8位的二進制字符串
quotemeta — 對若干個特定字符進行轉義
rtrim — 去除字符串右側的空白或者指定的字符
setlocale — 設置關于數字,日期等等的本地格式
sha1_file — 將一個文件進行SHA1算法加密
sha1 — 將一個字符串進行SHA1算法加密
similar_text — 比較兩個字符串,返回系統認為的相似字符個數
soundex — 判斷一個字符串的發音規則
sprintf — 按照要求對數據進行返回,但是不輸出
sscanf — 可以對字符串進行格式化
str_ireplace — 像str_replace()函數一樣匹配和替換字符串,但是不區分大小寫
str_pad — 對字符串進行兩側的補白
str_repeat — 對字符串進行重復組合
str_replace — 匹配和替換字符串
str_rot13 — 將字符串進行ROT13加密處理
str_shuffle — 對一個字符串里面的字符進行隨機排序
str_split — 將一個字符串按照字符間距分割為一個數組
str_word_count — 獲取字符串里面的英文單詞信息
strcasecmp — 對字符串進行大小比較,不區分大小寫
strchr — 通過比較返回一個字符串的部分strstr()函數的別名
strcmp — 對字符串進行大小比較
strcoll – 根據本地設置對字符串進行大小比較
strcspn — 返回字符連續非匹配長度的值
strip_tags — 去除一個字符串里面的HTML和PHP代碼
stripcslashes — 反轉義addcslashes()函數轉義處理過的字符串
stripos — 查找并返回首個匹配項的位置,匹配不區分大小寫
stripslashes — 反轉義addslashes()函數轉義處理過的字符串
stristr — 通過比較返回一個字符串的部分,比較時不區分大小寫
strlen — 獲取一個字符串的編碼長度
strnatcasecmp — 使用自然排序法對字符串進行大小比較,不區分大小寫
strnatcmp — 使用自然排序法對字符串進行大小比較
strncasecmp — 對字符串的前N個字符進行大小比較,不區分大小寫
strncmp — 對字符串的前N個字符進行大小比較
strpbrk — 通過比較返回一個字符串的部分
strpos — 查找并返回首個匹配項的位置
strrchr — 通過從后往前比較返回一個字符串的部分
strrev — 將字符串里面的所有字母反向排列
strripos — 從后往前查找并返回首個匹配項的位置,匹配不區分大小寫
strrpos – 從后往前查找并返回首個匹配項的位置
strspn — 匹配并返回字符連續出現長度的值
strstr — 通過比較返回一個字符串的部分
strtok — 用指定的若干個字符來分割字符串
strtolower — 將字符串轉變為小寫
strtoupper –將字符串轉變為大寫
strtr — 對字符串比較替換
substr_compare — 對字符串進行截取后的比較
substr_count — 計算字符串中某字符段的出現次數
substr_replace — 對字符串中的部分字符進行替換
substr — 對字符串進行截取
trim — 去除字符串兩邊的空白或者指定的字符
ucfirst — 將所給字符串的第一個字母轉換為大寫
ucwords — 將所給字符串的每一個英文單詞的第一個字母變成大寫
vfprintf — 按照要求對數據進行返回,并直接寫入文檔流
vprintf — 按照要求對數據進行顯示
vsprintf — 按照要求對數據進行返回,但是不輸出
wordwrap — 按照一定的字符長度分割字符串
- PHP文件引用
PHP文件引用是指將另一個腳本的全部內容以及功能包含到當前腳本中進行使用,可以減少代碼的重用。與C語言中的include使用大致相似。
引用文件語句:
include語句
require語句
include_once語句
require_once語句
- include語句
- 使用include語句引用外部文件時,只有代碼執行到include語句時才會將外部文件引用并讀取代碼。
- 使用:include(引用文件名稱)
- require語句
- 一般要放在文件起始位置,常用于引用需要使用的公共函數文件和公共類文件。
- include語句與require語句比較:
- 在調用問件時,如果未找到,require語句會輸出錯誤信息,并且終止腳本處理。include語句會輸出警告,但不會終止腳本的處理。
- include_once語句 與 require_once語句
- 這兩個與上面兩個相似,只不過在執行導入文件前,他們會檢測該文件是否在其他地方被引用過,如果有,則不再引用,并且程序只能引用一次。
- 細節
最后總結幾個細小注意點:
1、PHP語言的擴展名為 .php
2、PHP程序中可以包含 html,JavaScript代碼
3、腳本范圍在 <?php 這個范圍內 ?>
4、PHP注釋有://,#,/* ... */
5、在編寫PHP代碼時,每個語句結束時,都不要忘記使用英文分號(;),即為指令分隔符
PHP與WEB交互
在上面第二節,用了一張圖,講解了WEB基本工作流程,現在,我們實際練習列子來加深對這方面的理解。
在這之前,我們先回憶一些HTTP請求,常用到 GET 與 POST 這兩個請求,我們也實際操作一個例子來了解PHP是如何接收這兩個請求的數據,并處理的。
PHP是根據接收通過HTTP協議請求來的數據做處理的,在PHP中也有寫好的預定義變量來處理響應的請求:
$_GET:獲取通過GET方式提交的數據
$_POST:獲取通過POST方式提交的數據
$_COOKIE:獲取Cookie數據,這些數據多數是由setcookie()函數設置的值
$_SESSION:獲取包含與所有會話變量有關的信息
$_FILES:處理文件上傳
下面通過幾個小例子來了解一下。
1、GET方式表單提交并接收示例
既然是GET方式提交表單,那么我們先用HTML寫一個簡單的表單頁面:
<html>
<head>
<meta charset="utf-8" />
<title>GET請求例子</title>
</head>
<body>
<form method="GET" action="get.php">
名字:<input type="text" name="name"><br>
年齡:<input type="text" name="age"><br>
<input type="submit">
</form>
</body>
</html>
將其保存為.html
文件。這是一個很簡單便于理解的form表單提交數據的例子,method
是提交方式,我們使用 GET
方式提交,所以設置為 GET
, action
是指用哪個PHP腳本處理我們表單提交的數據,在這個例子中,我將其設為 get.php
。再下面是 input
的設置,將其設為 text
文字域,分別將名字和年齡設置的 name
設置為了 name
和 age
,這兩個是讓 $_GET
明確接收哪個數據,具體如下。
下面看看 get.php
是如何處理表單數據的:
<?php
$name = $_GET["name"];
$age = $_GET["age"];
echo $_GET["name"]."<br>";
echo $_GET["age"]."<br>";
echo "恭喜".$name."大帥哥/大美女"."今年".$age."歲了";
?>
我們看到,我們使用了$_GET
來接收數據, $_GET["age"]
指的是接收年齡這個文字域的數據,這個 age
就是html文件中年齡文字域中 name 設置的屬性,即name="age"
。
我們看看運行結果:
2、POST方式表單提交并接收示例
大家不妨將上面代碼改成POST請求方式并接受,只需簡單修改一些地方即可。
然后運行觀察結果,大家可以看看兩個URL處有什么不同。
對于GET或是POST,我給出的是個簡單的例子,便于理解。但是在實際程序中并沒有那么簡單,比如說你提交的數據是否為空,或者與數據庫交互時是否有敏感字符。當然,PHP中也有相應的函數可以處理這些數據,這些數據傳過來都是字符串,我們也可以用字符串一些函數來處理等等。
更多操作,還是那句話,自己多找例子,多學習,多敲打代碼。
3、實現文件上傳的示例
實現文件上傳,也是一個比較重要的知識點,他可以幫助我們理解后期文件上傳漏洞。
實現文件上傳的預定義變量是 $_FILES 。
在PHP中的 php.ini 文件中有些參數可以對上傳文件進行控制:
在 php.ini 中定位到File Uploads處:
file_uploads:如果該值設置為On,代表服務器支持文件上傳,Off為不支持,默認為On。
upload_tmp_dir:可以設置上傳文件的臨時目錄,上傳后,先放在臨時目錄中,多數使用系統默認目錄。
upload_max_filesize:服務器允許上傳文件最大的值,MB為單位。默認為2MB。
php.ini文件修改后,需要重啟服務器。
上面是對服務器中一些參數的了解,
下面是 $_FILES 預定義變量中參數的含義:
$_FILES["filename"]["name"]:上傳文件的名字
$_FILES["filename"]["size"]:上傳文件的大小,單位為字節
$_FILES["filename"]["type"]:上傳文件的MIME類型
$_FILES["filename"]["tmp_name"]:上傳文件臨時目錄的
$_FILES["filename"]["error"]:上傳文件的結果,如果返回0,則說明文件上傳成功
現在,我們編寫一個實際例子,來加深理解。
首先,編寫html頁面:
<html>
<head>
<meta charset="utf-8" />
<title>文件上傳例子</title>
</head>
<body>
<form action="uploadfile.php" method="POST" enctype="multipart/formdata">
上傳文件:<br>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交文件">
</form>
</body>
</html
在這,我們要注意的是,form表單中的 enctype 屬性,它規定了form表單數據在發送到服務器時候的編碼方式, multipart/form-data ,是指定傳輸數據為二進制數據,例如圖片、mp3、文件。然后是下面上傳文件域的設置,input下的 type 屬性設置為 file 即代表上傳文件域。
然后是 uploadfile.php 代碼的編寫:
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "錯誤: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "文件是: " . $_FILES["file"]["name"] . "<br>";
echo "MIME類型是: " . $_FILES["file"]["type"] . "<br>";
echo "大小是: " . $_FILES["file"]["size"] . " <br>";
echo "存儲在: " . $_FILES["file"]["tmp_name"];
}
?>
在這段代碼中用了簡單的條件判斷,里面的參數也都在上面講到了,如果成功上傳,就會顯示上傳文件的一些信息。
運行結果:
PHP與MySQL交互
現在,我們繼續學習PHP與MySql交互。
我們常將數據存儲在數據庫中,在訪問網頁時通過PHP響應函數調用數據庫中存儲的數據,然后返回到前端界面。這個流程在最上面的那張圖中也將到了。
但PHP具體如何操作MySQL呢?
PHP要想操作MySQL需要在 php.ini 中設置一些參數,打開對應數據庫擴展程序:
具體介紹
然后打開對應擴展:
我們使用 mysqli
擴展,它與 mysql 擴展用法一樣,基本相似,但是 mysqli
的函數名稱是以 mysqli
開始的。
他們兩者當然也有區別,但對初學來說影響不大。
還有一個是 PDO ,它可以應用在12中不同的數據庫中,而 mysqli 只能應用于mysql 中。
mysqli有一系列函數集可以讓我們操作mysql數據庫。
PHP與MySQL交互基本流程
PHP與MySQL交互有這五個步驟對應的函數:
1、連接MySQL數據庫
mysqli_connect("MySQL服務器地址","用戶名","密碼","連接數據庫名稱(可選)","MySQL服務器使用的端口(默認3306)")
2、選擇MySQL數據庫
mysqli_select_db("連接表示(必選參數)","數據庫名稱(必選參數)")當然在連接數據庫時,也可以同時選擇數據庫名稱
3、執行SQL語句
mysqli_query("連接標識(必選參數)","查詢語句(必選參數)")
4、獲取查詢結果
mysqli_fetch_array():將結果集返回數組中。
mysqli_fetch_object():從結果集中獲取一行作為對象
mysqli_fetch_row():從結果集中獲取一行作為枚舉數組
mysqli_fetch_assoc():從結果集中獲取一行作為關聯數組
mysqli_num_rows():獲取查詢結果集中的記錄數
5、釋放內存,關閉連接
mysqli_free_result(): 釋放結果內存。
mysqli_close():關閉先前打開的數據庫連接。
PHP 5 MySQLi 函數大全以及具體用法:
https://www.runoob.com/php/php-ref-mysqli.html
連接數據庫并選擇數據庫例子:
<?php
$host = "127.0.0.1";
$user = "root";
$pwd = "123456 ";
$connID = mysqli_connect($host,$user,$pwd);
$select_db = mysqli_select_db($connID,"information_schema");
if($connID){
echo "<script type='text/javascript'>alert('連接成功!')
</script>";
}
else{
echo "<script type='text/javascript'>alert('連接失敗!')
</script>";
}
?>
大家運行一下,修改不同參數,來觀察一下連接結果。
獲取結果例子:
https://www.runoob.com/php/php-mysql-select.html
現在,大家對PHP操作MySQL有了基本的了解,畢竟他獲取結果方式有些多,大家可以根據我給的例子多操作一下,多了解一下。例子有很多,多練習,直到你真正的了解了這個知識點,熟練應用這個知識點為止。
總結
本篇PHP基礎教程,講了常見基礎知識點,非常實用。但是,一門語言不是花個幾分鐘看一篇文章就能明白的,要多動手實踐。本篇基礎教程,給出了幾個實例,要自己動手操作。另外,本篇教程,省略了一些其他的細枝末節,畢竟一門語言從0到1,需要自己花大量時間打磨。
但這篇文章,從大的方面可以對這個語言有個極大的了解,從小的方面又可以學習一些基礎知識點。
但還缺乏你自己的練習,對Web安全和CTF來說,一定要先掌握一門語言,PHP好學易懂,然后要學python,開發屬于自己的小工具。
在了解,學習過一門語言之后,對于其他語言學習也是有極大幫助的。