簡單是可靠的先決條件
——Edsger Dijkstra
本篇文章主要知識(shí)點(diǎn)
- Php與Web交互基本
- 文件上傳
- 表單驗(yàn)證
交互基本
1.變量
為什么提到變量,這個(gè)變量可不是簡單的自定義變量霍弹,他是Php里獲取服務(wù)器信息糖声,請求信息的方法肉微,通常把這些信息稱為EGPCS(environment 娶牌,get , post 情屹, cookies柏锄,server)
這些變量不僅在函數(shù)定義中是可見的者祖,而且是全局的
2.服務(wù)器信息
$_SRVER[]數(shù)組包含大量跟服務(wù)器有關(guān)的信息立莉,不過在這里介紹不完全部的,所以寫一段代碼七问,簡單概括幾種常用的
echo "當(dāng)前服務(wù)器IP地址:".$_SERVER['SERVER_ADDR']."<br>";
echo "當(dāng)前主機(jī)名:".$_SERVER['SERVER_NAME']."<br>";
echo "客戶端IP地址:".$_SERVER['REMOTE_ADDR']."<br>";
echo "客戶端端口:".$_SERVER['REMOTE_PORT']."<br>";
echo "服務(wù)器目錄:".$_SERVER['DOCUMENT_ROOT']."<br>";
運(yùn)行結(jié)果
3.表單處理
客戶端可以使用兩種方法向服務(wù)器傳表單數(shù)據(jù):GET和POST蜓耻,采用哪種方法是由表單標(biāo)簽<form>中的method屬性所指定的
一個(gè)GET請求,需要把表單參數(shù)編碼成URL械巡,成為查詢字符串
而一個(gè)POST請求刹淌,則通過請求HTTP主體來傳遞表單參數(shù),不需要考慮URL
HTTP規(guī)范指出讥耗,GET請求是冪等的有勾,也就是說,一個(gè)對于特定URL的GET請求古程,與對應(yīng)于這一特定URL的兩個(gè)或者多個(gè)GET請求是一樣的蔼卡,因此Web瀏覽器可以把GET請求響應(yīng)的頁面緩存起來,因?yàn)檫@個(gè)頁面不管響應(yīng)多少次挣磨,響應(yīng)頁面是不變的雇逞,而POST請求不具有冪等性,他們無法被緩存茁裙,每次刷新都要重新發(fā)送表單數(shù)據(jù)
4.自處理頁面
所謂自處理頁面塘砸,就是一個(gè)Php頁面能同時(shí)用來生成表單和處理表單,實(shí)現(xiàn)這個(gè)功能能有兩種方法
第一種:判斷method方法晤锥,如果是POST獲取處理表單掉蔬,如果GET直接輸出
第二種:通過isset()函數(shù)判斷指定的參數(shù)是否被創(chuàng)建,如果存在則執(zhí)行處理矾瘾,否則生成
文件上傳
在Php中上傳文件最大的問題是對超大文件的處理女轿,對此,Php有兩種方法避免此種情況壕翩,軟性限制和硬性限制
在Php.ini文件中可以對上傳文件進(jìn)行限制蛉迹,包括是否支持上傳,上傳文件默認(rèn)目錄戈泼,上傳文件大小,指令執(zhí)行時(shí)間赏僧,指令分配的內(nèi)存空間
修改后需要重新啟動(dòng)Apache服務(wù)器大猛,才能生效
在表單中,在文件域之前添加一個(gè)名稱為MAX_FILE_SIZE的隱藏域淀零,通過他的值來實(shí)現(xiàn)軟限制
Php使用is_uploaded_file()來判斷文件是否是通過HTTP POST上傳的挽绩,如果是就返回true,可以繼續(xù)上傳驾中,否則就不能繼續(xù)
下面來實(shí)現(xiàn)一個(gè)文件上傳的功能
<div id="one">
<span>文件上傳測試</span>
<form action="" method="post" enctype="multipart/form-data">
<!--這里我們創(chuàng)建一個(gè)隱藏的域唉堪,用來保存我們的限制大小-->
<input type="hidden" name="MAX_FILE_SIZE" value="10000000">
<input type="file" name="text">
<input type="submit" name="sub" value="上傳">
</form>
<span>
<!--開始Php邏輯-->
<?php
//判讀是否是執(zhí)行了提交
if(isset($_POST['sub'])){
//判斷文件夾是否存在模聋,如果不存在就創(chuàng)建
if(!is_dir("images")){
mkdir("images");
}
$file = $_FILES['text']; //獲取表單提交的文件名稱
//產(chǎn)生錯(cuò)誤
if($_FILES['text']["error"]>0){
echo "上傳錯(cuò)誤";
//1,2唠亚,3链方,4都是固定值,每一個(gè)值代表一個(gè)錯(cuò)誤
switch ($_FILES['text']['error']){
case 1:echo "文件大小超出配置文件限制值";break;
case 2:echo "文件大小超出表單限制值";reak;
case 3:echo"文件不全";break;
case 4:echo"沒有文件";break;
}
}else{
if(is_uploaded_file($file['tmp_name'])){
$flotime = time();
$str = substr($file['name'],-4,4);
$path = "iamges/".$flotime.$str;
if(move_uploaded_file($file['tmp_name'],$path)){
echo "上傳成功:".$flotime.$str;
}
}
}
}
?>
</span>
</div>
表單驗(yàn)證
表單驗(yàn)證用來檢測表單信息是否填寫正確
<form id="form1" name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<input name="user" type="text" size="16">
<input name="password" type="password" size="16">
<input type="submit" name="Submit" value="登錄">
</form>
<?php
/**
* Created by PhpStorm.
* User: surine
* Date: 2017/7/27
* Time: 17:56
*/
//判斷是否點(diǎn)擊了按鈕
if(isset($_POST['Submit'])){
//獲取值
$user = $_POST['user'];
$pswd = $_POST['password'];
if(empty($user)||empty($pswd)){
echo "<script>alert('用戶名不能為空');
window.location.herf = 'Input.php';<script>";
}else{
echo "用戶名".$user."密碼".$pswd;
}
}
運(yùn)行結(jié)果如下圖所示
總結(jié)
其實(shí)Php與Web的交互還有很多灶搜,但是在這里僅僅大概介紹一下祟蚀,以后用到的時(shí)候再具體說。
還有割卖,非常痛苦的一件事情PhpStorm可能用的自己內(nèi)置的網(wǎng)絡(luò)服務(wù)器前酿,好多效果并沒有實(shí)現(xiàn),比如文件上傳鹏溯,賬號(hào)密碼為空的Js彈窗罢维,好迷茫,根本無從下少丙挽,有大神可以教給我怎么解決這個(gè)問題么肺孵?