What's PHP ?
Hypertext Preprocessor(超文本預(yù)處理器),是一種腳本語(yǔ)言唆迁,PHP腳本在服務(wù)器上運(yùn)行灌侣,結(jié)果以純HTML形式返回給瀏覽器。
PHP可以對(duì)服務(wù)器上的文件進(jìn)行操作研儒,也可以對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行操作。
關(guān)于運(yùn)行的服務(wù)器独令,可以考慮一下phpStudy呀~配置簡(jiǎn)單易上手
PHP基礎(chǔ)語(yǔ)法
<?php //這是開(kāi)頭
//這是單行注釋
header("Content-Type: text/html;charset=utf-8");
/* 這是
多行注釋*/
echo "這是用echo直接輸出,","可以輸出多個(gè)字符串,","比print看起來(lái)優(yōu)秀一點(diǎn)","<br>";
print "這是用print直接輸出端朵,只能輸出一個(gè)字符串";
//這是結(jié)尾 ?>
變量及數(shù)據(jù)類型
- 變量名前需帶$符號(hào);
- 變量名必須用字母或者下劃線開(kāi)頭燃箭;
- 變量名區(qū)分大小寫冲呢、不能包含空格;
- 沒(méi)有聲明的變量招狸,當(dāng)?shù)谝淮伪毁x值時(shí)敬拓,被創(chuàng)建。
變量作用域
example:
<?php
header("Content-Type: text/html;charset=utf-8");
$x = 9; //這是一個(gè)全局變量
echo "全局變量x的值為:$x";
echo "<br>";
echo "<br>";
function demo(){
$y = 12; //這是一個(gè)局部變量
echo "局部變量y的值為:$y";
echo "<br>";
global $x; //使用global裙戏,在函數(shù)內(nèi)引用全局變量
$z = $x + $y;
echo "全局變量x和局部變量y的和為:$z";
echo "<br>";
$m = $GLOBALS['x'] + 2 * $y; //也可以用$GLOBALS[]數(shù)組的形式乘凸,引用全局變量
echo "第二種引用全局變量方式的結(jié)果為:$m";
echo "<br>";
}
function demo2(){
static $n = 1; //這是一個(gè)加了static關(guān)鍵字的局部變量
echo "加了static關(guān)鍵字的局部變量第","$n","次輸出是:$n";
$n++;
echo "<br>";
}
demo();
echo "<br>";
demo();
echo '<p style="color:red">由此可見(jiàn),當(dāng)一個(gè)函數(shù)完成時(shí)累榜,它的所有變量一般都會(huì)被刪除营勤。</p>';
demo2();
demo2();
demo2();
echo '<p style="color:red">由此可見(jiàn)灵嫌,加了static的局部變量,每次調(diào)用該函數(shù)時(shí)葛作,會(huì)保留前一次被調(diào)用結(jié)束時(shí)的值寿羞。</p>';
?>
效果如下:PHP將所有全局變量存儲(chǔ)在數(shù)組$GLOBALS[index]的數(shù)組中,index保存變量的名稱赂蠢。
PHP對(duì)象類似JAVA對(duì)象绪穆,看一眼就行。
常量
define虱岂,類似C語(yǔ)言中的define玖院。語(yǔ)法:
bool define(string $name,mixed $value[, bool $case_insensitive = false])
參數(shù):
name,參數(shù)名第岖,必選难菌;
value,參數(shù)值绍傲,必選扔傅;
case_insensitive:大小寫敏感耍共,默認(rèn)為false大小寫敏感烫饼,可選。
example:
<?php
header("Content-Type: text/html;charset=utf-8");
define("a","Fine"); //默認(rèn)试读,大小寫敏感
define("B","Fine",false); //設(shè)置為false杠纵,大小寫敏感
define("C","Fine",true); //設(shè)置為true,大小寫不敏感
echo A,"<br>";
echo a,"<br>";
echo B,"<br>";
echo b,"<br>";
echo C,"<br>";
echo c;
?>
運(yùn)行結(jié)果:運(yùn)算符
算數(shù)運(yùn)算符钩骇、賦值運(yùn)算符比藻、遞增/遞減運(yùn)算符、比較運(yùn)算符倘屹、邏輯運(yùn)算符银亲、三元運(yùn)算符與C語(yǔ)言類似。
數(shù)組運(yùn)算符
example:
<?php
$x = array('a' =>"cat", 'b' =>"orange", 'm' =>"fine");
$p = array('a' =>"cat", 'b' =>"orange", 'm' =>"fine");
$y = array('c' =>"rabbit", 'd' =>"white", 'm' =>"fine");
$q = array('c' =>"rabbit",'m' =>"fine", 'd' =>"white");
$z = $x + $y; //合并x纽匙、y兩個(gè)數(shù)組务蝠;
//var_dump()函數(shù)用于輸出表達(dá)式的類型和值
var_dump($z); //輸出合并后的數(shù)組z,做并集
echo "<br>","<br>";
var_dump($x == $y); //比較兩個(gè)數(shù)組烛缔,如果所有鍵/值對(duì)相等馏段,不管順序是否相同,就返回true
echo "<br>";
var_dump($y ==$q);
echo "<br>","<br>";
var_dump($x === $p); //比較兩個(gè)數(shù)組践瓷,鍵/值對(duì)和順序完全相同才返回true
echo "<br>";
var_dump($x === $y);
echo "<br>","<br>";
var_dump($x != $y); //比較兩個(gè)數(shù)組院喜,如果不相等,則返回true
echo "<br>";
var_dump($x <> $y);
echo "<br>";
var_dump($x !== $y);
?>
運(yùn)行結(jié)果:超全局變量
這是PHP 4.1.0之后系統(tǒng)中自帶的變量晕翠,在一個(gè)腳本的全部作用域中都可用喷舀。
$GLOBALS
超級(jí)全局變量組。
在前面變量作用域中有提到,這里做一個(gè)簡(jiǎn)單的演示元咙。
<?php
$x = "Flexible";
$y = "Cat";
function globalsDemo(){
$GLOBALS['z'] = $GLOBALS['x'].$GLOBALS['y']; //z在這里也被定義為全局變量
echo $z; //這樣是不行的梯影,因?yàn)閦是全局變量
echo $GLOBALS['z'];
}
globalsDemo();
echo "<br>";
echo $z; //在函數(shù)外直接用$z是可以的
?>
運(yùn)行結(jié)果:$_SERVER
包含了服務(wù)器、當(dāng)前腳本等部分信息庶香,是數(shù)組甲棍,數(shù)組中的項(xiàng)目由Web服務(wù)器創(chuàng)建。
示例:
<?php
echo $_SERVER['PHP_SELF'], "<br>"; //返回當(dāng)前腳本的相對(duì)地址
echo $_SERVER['SCRIPT_FILENAME'], "<br>"; //返回當(dāng)前腳本的絕對(duì)地址
echo $_SERVER['SERVER_ADDR'], "<br>"; //返回當(dāng)前腳本所在服務(wù)器的IP地址
echo $_SERVER['SERVER_NAME'], "<br>"; //返回當(dāng)前運(yùn)行腳本所在服務(wù)器的主機(jī)名
echo $_SERVER['SERVER_SOFTWARE'], "<br>"; //返回服務(wù)器表示字符串
?>
運(yùn)行結(jié)果:更多元素及其含義可以需要時(shí)找度娘赶掖。
$_REQUEST
收集HTML表單提交的數(shù)據(jù)感猛,不論method為POST還是GET都可以。奢赂。
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>requestDemo</title>
</head>
<body>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
<!--action的值表示陪白,在當(dāng)前腳本頁(yè)面顯示結(jié)果-->
Lover:<input type="text" name="someone">
<input type="submit">
</form>
<?php
@$name = htmlspecialchars($_REQUEST['someone']);
echo "My lover is ".$name;
?>
</body>
</html>
運(yùn)行結(jié)果:$_POST
收集來(lái)自表單中method="post"的表單值,用POST方法的表單發(fā)送的值不會(huì)在瀏覽器的地址欄顯示膳灶,并且發(fā)送的信息量也無(wú)限制咱士。
示例:
example8.php:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>postDemo</title>
</head>
<body>
<form action="Hey.php" method="post">
Who are you?<input type="text" name="fname">
<input type="submit" value="OK">
</form>
</body>
</html>
Hey.php:
<?php
echo "Hey ".$_POST["fname"].", you are soooo pretty~";
?>
運(yùn)行結(jié)果:$_GET
收集來(lái)自表單中method="get"的表單值,用GET方法的表單發(fā)送的值會(huì)在瀏覽器的地址欄顯示轧钓,并且發(fā)送的信息不能超過(guò)2000個(gè)字符序厉。
示例代碼僅將上一個(gè)示例中的POST改成GET。
$_FILES
用于從客戶端向遠(yuǎn)程服務(wù)器上傳文件毕箍。語(yǔ)法:
$_FILES["file"]["name"] //客戶端上傳文件的名稱
$_FILES["file"]["type"] //所上傳的文件類型
$_FILES["file"]["size"] //所上傳的文件大小
$_FILES["file"]["temp_name"] //上傳的文件保存在服務(wù)器中的臨時(shí)文件名弛房,無(wú)法用putenv()方法設(shè)置
$_FILES["file"]["error"] //和該文件上傳相關(guān)的錯(cuò)誤代碼
- 在表單中需要上傳文件時(shí),用enctype屬性規(guī)定提交表單時(shí)要使用的內(nèi)容類型而柑。文件內(nèi)容屬于二進(jìn)制數(shù)據(jù)文捶,所以需要使用multpart/form-data。
- 允許用戶上傳文件是由很大的安全風(fēng)險(xiǎn)的媒咳,在編寫上傳腳本時(shí)最好加上文件的上傳限制粹排。
具體可以扒CTF中的文件上傳類題型源碼來(lái)看,本胖這里就暫時(shí)不寫了涩澡,
還不是因?yàn)閼?/del>顽耳。
$_ENV
存儲(chǔ)了一些系統(tǒng)的環(huán)境變量,使用<?php print_r($_ENV); ?>
查看筏养,但是因?yàn)闋砍兜綄?shí)際的操作系統(tǒng)斧抱,所以一般情況下不可能讓你查看它的完整列表。
- 如果非要看的話渐溶,那么辉浦,打開(kāi)php.ini
-
改成EGPCS,就OK了茎辐。
講道理這樣是沒(méi)問(wèn)題的宪郊,但是我也不知道為什么我的虛擬機(jī)里不行掂恕,
慫的不敢在本機(jī)上瞎折騰,各位看官們了解一下就好弛槐。
$_COOKIE
cookie一般用來(lái)識(shí)別用戶懊亡,使用setcookie()創(chuàng)建cookie,語(yǔ)法:
setcookie(name, value, expire, path, domain)
$_COOKIE變量就是用來(lái)獲取cookie的值的乎串。
刪除cookie時(shí)店枣,將過(guò)期日期變成過(guò)去的時(shí)間點(diǎn)就行啦。
這一塊的示例叹誉,回(隨)頭(緣)再補(bǔ)吧
$_SESSION
session變量用來(lái)臨時(shí)存儲(chǔ)關(guān)于單一用戶會(huì)話的信息鸯两,或者更改用戶會(huì)話的設(shè)置。
session工作機(jī)制:為每位用戶創(chuàng)建一個(gè)唯一的UID长豁,并根據(jù)這個(gè)UID來(lái)存儲(chǔ)變量钧唐。UID存儲(chǔ)在cookie中,或者通過(guò)URL進(jìn)行傳導(dǎo)匠襟。
- 在php中使用session必須在<html>標(biāo)簽前加上
<?php session_start(); ?>
钝侠,這樣就會(huì)向服務(wù)器注冊(cè)用戶的會(huì)話,為用戶會(huì)話分配一個(gè)UID酸舍; - 存儲(chǔ)和獲取session變量的值都是使用$_SESSION變量完成帅韧,
_SESSION['UID']
; - 銷毀session時(shí)父腕,可以用unset()釋放指定的session變量弱匪,也可以用session_destroy()函數(shù)徹底銷毀session青瀑。
unset($_SESSION['UID'])璧亮; //釋放制定的session變量
session_destroy(); //徹底銷毀所有的session
包含
倆函數(shù)斥难,include和reqire枝嘶,語(yǔ)法:
include 'filename'; require 'filename';
區(qū)別:
- include一般放在程序的流程控制中,當(dāng)程序執(zhí)行遇到時(shí)才會(huì)引用哑诊;require一般放在PHP文件的最前面群扶,在程序執(zhí)行前就導(dǎo)入要引用的文件。
- include引入的文件有錯(cuò)誤時(shí)镀裤,不會(huì)中斷竞阐,繼續(xù)執(zhí)行,返回一個(gè)警告暑劝;require引入的文件有錯(cuò)誤時(shí)骆莹,執(zhí)行終端,返回一個(gè)錯(cuò)誤担猛。
今天的白小胖也很優(yōu)秀(≧?≦)/