書接上回:後端開發技術教學(三) 表單提交、數據處理-CSDN博客
必要資源:
trae中文版下載網址: TRAE - The Real AI Engineer
phpStudy 2018 : phpStudy - Windows 一键部署 PHP 开发环境 · 小皮出品
前言
大家好,我是小楓。書接上期說到的後端數據交互,分別從數據接收、數據處理以及數據存儲3方面解說。但在$_FILES(即文件上傳)的解說上只是略略帶過。
其實$_FILES跟$_GET 和 $_POST的運作框架並不樣,大家會發現只有這些好像並不能組成一個完整的文件數據接收系統。
所以今天小編會跟大家分享完整的文件數據接收區塊是怎麼形成,我將會從代碼意義、運作邏輯以及輸出實例3方面給大家解說。
目录
一、$_FILES與$_GET & $_POST的不同
1.1 編碼模式
$_POST & $_GET : 接收的是字符串數據
$_FILES : 接收的是2進制文件數據
//get & post
<form action="" method="get/post">
<input type="text/password">
</form>
//file
<form action="" method="post" enctype="multipart/form-data"> //數據接收必定要用post
<input type="file"> //type必定是file
</form>
多出的enctype="multipart/form-data"是用來轉換編碼模式的,以防2進制文件被轉義了。
1.2 數據存儲方式
$_POST & $_GET : 以數組的方式存儲,可更改下標。
$_FILES : 以2維數組的方式存儲,第2維的下標不可更改
print_r($_FILES);
::輸出:
Array{
[file] => Array{ //第一維,下標可更改
[name] => '文件原始名' //以下全都是第2維,下標不可更改
[type] => 'MIME類型'
[tmp_name] => '臨時存儲路徑'
[error] => '文件是否上傳成功' //顯示1,2,3,4即為接收失敗,0為成功
[size] => '文件大小(字節)'
}
二、完整架構
[name] => 1.png
[type] => image/png
[tmp_name] => C:\Users\Administrator\AppData\Local\Temp\phpCB1D.tmp
[error] => 0
[size] => 205401
if($_POST){ //if(假條件)=>不會執行指令,$_POST為空=假條件
$name=$_FILES['file']['name'];
$tmp_name=$FILES['file']['tmp_name'];
==更改源文件名字
::取文件後綴名(txt php html…)
//strrchr($name,"."); => 標記$name最右邊的"."
//substr((…),1) => 從第一個字符開始截取
//substr((strrchr($name,".")),1) => 從$name最右邊的"."開始截取字符
$ext=substr(strrchr($name,"."),1); //從"."後開始取後綴名
//生成隨機文件名
$file_name=time().rand().".".$ext; //time()=>輸入現在的時間 | rand()=>隨機生成字符
::e.g 1234567890.1234567890.png
==趁臨時文件存在的時候,將其永久保存下來
$dir="upload";
if(!is_dir($dir)){ //判斷$dir是不是一個文件夾,不是的話再執行下面的命令
mkdir($dir,0777,true); //若文件夾不存在,會創建一個名為$dir 權限全開 的递歸文件夾
}
//編寫文件存儲路徑
$path=$dir."/".$file_name; // upload/1234567890.1234567890.txt (跟C D盤差不多)
if(!move_upload_file($tmp_name,$path)){ //若文件沒移動到指定路徑,執行下面命令
//move_upload_file(文件名,要移動到的路徑)=> 移動指定文件到指定路徑
echo "上傳失敗";
exit; //往後命令不再運行,即停止運行腳本
}
}
1. 查看$_FILES是否為空,不為空才可以開始執行以下命令
2. 把文件後綴取下來 (png)
3. 隨機生成以png為後綴的文件名(1234567890.png)
4. 查看指定文件夾是否存在,不存在則創建一個
5. 編寫文件存儲路徑(文件夾名+ / + 隨機生成的文件名)
6. 查看文件是否己被移至指定路徑
簡單來說就是,更改源文件名字,並趁臨時文件存在的時候,把他永久保存下來。
三、進階處理
3.1 安全過濾 (防XSS)
$username = htmlspecialchars($username);
$email = htmlspecialchars($email);
$gender = htmlspecialchars($gender);
htmlspecialchars() : 將特殊字符轉為 HTML 實體(防 XSS)
3.2 數據驗證
filter_var($email, FILTER_VALIDATE_EMAIL) //驗證郵箱格式
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { //過濾無效格式
die("無效的郵箱格式!"); //終止腳本並返回錯誤信息
}
其他過濾器:
FILTER_SANITIZE_STRING
(清理字符串)
四、小結
大家只需要記住它們的功能和運作邏輯就可以了,實操可以讓AI幫忙寫代碼,具體的之前已經說過了,這裡就不多說了。接我們會開始研究後端python、數據庫mysql以及分析漏洞哈。大家敬請期待了。
trae AI寫代碼:後端開發技術教學(一) [附2025最新可用 phpstudy2018下載鏈接] -CSDN博客
文件管理合集:Linux基礎命令合集——文件管理篇(一)基礎文件操作-CSDN博客
數組 & if指令:後端開發技術教學(二) 條件指令、循環結構、定義函數-CSDN博客