使用PHP实现文件上传
生活随笔
收集整理的這篇文章主要介紹了
使用PHP实现文件上传
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ? ?這里使用PHP實現文件的上傳,由在瀏覽器這邊選擇文件,上傳到服務器。其中,在上傳文件中,考慮到對上傳文件大小的限制、類型限制等問題。(當然可以根據我們需要修改對上傳的文件的限制,而一般而言php自身也同樣對將要上傳的文件大小進行了限制,默認為2M,也就是說我們不能上傳太大的圖片。)這里我們限制用戶只能上傳jpg格式的圖片,此外,圖片大小不能超過2M。
文件上傳界面 upload.php
提交含上傳文件的表單時,表單form需要設置enctype屬性:
<form action=”” enctype="multipart/form-data" method=”post”> 上傳文件<input type=”file” name=”myfile”/> <input type=”submit” value=”上傳”/> </form>
具體代碼如下:
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <title>上傳你的File吧</title> </head> <form enctype="multipart/form-data" method="post" action="uploadprocess.php"> <table> <tr><td align="center" colspan="2"><font style="font-size:40px;font-family: 華文彩云;">文件上傳</font></td></tr> <tr><td>請填寫用戶名:</td><td><input type="text" name="username"/></td></tr> <tr><td>請簡單介紹該文件</td><td><textarea name="fileintro" rows="10" cols="80"></textarea></td></tr> <tr><td>請選擇你要上傳文件:</td><td><input type="file" name="myfile"/></td></tr> <tr><td><input type="submit" value="上傳文件"/></td><td></td></tr> </table> </form> </html>
上傳文件的處理 ?uploadprocess.php
<?php//1.接收提交文件的用戶$username=$_POST['username'];$fileintro=$_POST['fileintro'];//我們這里需要使用到 $_FILES/*echo "<pre>";print_r($_FILES);echo "</pre>";*///其實我們在上傳文件時,點擊上傳后,數據由http協議先發送到apache服務器那邊,這里apache服務器已經將上傳的文件存放到了服務器下的C:\windows\Temp目錄下了。這時我們只需轉存到我們需要存放的目錄即可。//php中自身對上傳的文件大小存在限制默認為2M//獲取文件的大小$file_size=$_FILES['myfile']['size'];if($file_size>2*1024*1024) {echo "文件過大,不能上傳大于2M的文件";exit();}$file_type=$_FILES['myfile']['type'];echo $file_type;if($file_type!="image/jpeg" && $file_type!='image/pjpeg') {echo "文件類型只能為jpg格式";exit();}//判斷是否上傳成功(是否使用post方式上傳)if(is_uploaded_file($_FILES['myfile']['tmp_name'])) {//把文件轉存到你希望的目錄(不要使用copy函數)$uploaded_file=$_FILES['myfile']['tmp_name'];//我們給每個用戶動態的創建一個文件夾$user_path=$_SERVER['DOCUMENT_ROOT']."/studyphp/file/up/".$username;//判斷該用戶文件夾是否已經有這個文件夾if(!file_exists($user_path)) {mkdir($user_path);}//$move_to_file=$user_path."/".$_FILES['myfile']['name'];$file_true_name=$_FILES['myfile']['name'];$move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,"."));//echo "$uploaded_file $move_to_file";if(move_uploaded_file($uploaded_file,iconv("utf-8","gb2312",$move_to_file))) {echo $_FILES['myfile']['name']."上傳成功";} else {echo "上傳失敗";}} else {echo "上傳失敗";}?>? ? ? ?上傳文件需要考慮到如下細節:
(1)如何控制用戶上傳文件的大小 < 2M
//獲取文件的大小 $file_size=$_FILES['myfile']['size']; if($file_size>2*1024*1024) {echo "文件過大,不能上傳大于2M的文件";exit(); } (2)如何控制用戶上傳的文件類型 $file_type=$_FILES['myfile']['type']; echo $file_type; if($file_type!="image/jpeg" && $file_type!='image/pjpeg') {echo "文件類型只能為jpg格式";exit(); } (3)如何防止用戶圖片覆蓋問題 //把文件轉存到你希望的目錄(不要使用copy函數) $uploaded_file=$_FILES['myfile']['tmp_name'];//我們給每個用戶動態的創建一個文件夾 $user_path=$_SERVER['DOCUMENT_ROOT']."/studyphp/file/up/".$username; //判斷該用戶文件夾是否已經有這個文件夾 if(!file_exists($user_path)) {mkdir($user_path); } ? ? ? ?為了防止不同用戶上傳的圖片文件名相同導致圖片被覆蓋的問題,我們只要為不同用戶創建一個文件夾就行了,不同用戶上傳的文件存儲在不同文件夾中。(4)如何防止同一個用戶的文件名相同的問題
$file_true_name=$_FILES['myfile']['name']; $move_to_file=$user_path."/".time().rand(1,1000).substr($file_true_name,strrpos($file_true_name,".")); ? ? ? ?上面我們解決了不同用戶圖片覆蓋的問題,但是如果同一用戶上傳了同一文件名不同文件內容的圖片時,同樣也會發生文件覆蓋的問題,我們只需從C:\windows\Temp目錄中上傳的文件轉移到服務器真正要存儲的目錄時將原文件名進行修改即可,而修改后的名字跟其他文件重名的幾率很低,修改后的名字由上傳文件的時間秒數和隨機數組成。
總結
以上是生活随笔為你收集整理的使用PHP实现文件上传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天龙架设linux环境配置,《果子资源》
- 下一篇: rbac java框架_jCasbin: