標籤:off ipa 檔案寫入 osi 代碼 cas filename 沒有 思維
=====================
檔案上傳和下載
=====================
一、php.ini的配置資訊
file_uploads = On /Off 是否允許檔案上傳
upload_max_filesize=2M 上傳的檔案的最大大小
post_max_size = 8M POST資料所允許的最大大小
upload_tmp_dir 上傳檔案放置的臨時目錄
二、用戶端上傳設定
1、 表單必須是POST提交
2、 上傳的類型:enctype="multipart/form-data"
3、上傳使用的表單項
<input type="file" name=".." >
4、(可選)上傳大小限制的表單隱藏欄位:MAX_FILE_SIZE,
<input type="hidden" name="MAX_FILE_SIZE" value="大小位元組"/>
注意:此欄位必須在檔案輸入欄位之前(常放在form標籤後面)
<html><head><title>檔案上傳</title></head><body> <form action=‘upload.php‘ method=‘POST‘ enctype=‘multipart/form-data‘> <input type=‘hidden‘ name=‘MAX_FILE_SIZE‘ value=‘1000000‘> 選擇檔案:<input type=‘file‘ name=‘myfile‘> <input type=‘submit‘ value=‘上傳檔案‘> </form></body></html>
三、在伺服器端通過PHP處理上傳
1、 使用$_FILES全域數組來接收上傳資訊
在每個上傳的檔案裡,$_FILES中都會有5個屬性:
error:上傳的錯誤號碼:0--4
0:表示沒有發生任何錯誤。
1:上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值。
2:表示上傳檔案大小超出了HTML表單隱藏欄位屬性的MAX_FILE_SIZE元素所指定的最大值。
3:表示檔案只被部分上傳。
4:表示沒有上傳任何檔案。
6:找不到臨時檔案夾
7:檔案寫入失敗
name:上傳的檔案名稱
size:檔案的大小
type:檔案類型
tmp_name: 臨時檔案
2、判斷是否為上傳檔案 is_uploaded_file()
1 <?php 2 //判斷檔案是否可以上傳到伺服器 3 //$_FILE[‘myfile‘][‘error‘]為0表示上傳成功 4 if($_FILES[‘myfile‘][‘error‘] > 0){ 5 echo ‘上傳錯誤‘; 6 switch ($_FILES[‘myfile‘][‘error‘]){ 7 case 1: die(‘上傳檔案大小超過PHP設定檔中的約定值:upload_max_filesize‘); 8 case 2: die(‘上傳大小超出了表單中的約定值:MAX_FILE_SIZE‘); 9 case 3: die(‘檔案只被部分上傳‘);10 case 4: die(‘沒有上傳任何檔案‘);11 default:die(‘未知錯誤‘);12 }13 }14 ?>
3、將上傳的檔案移動到新位置 move_uploaded_file()
1 <?php2 $path = ‘./uploads‘3 if(is_uploaded_file($_FILES[‘myfile‘][‘tmp_name‘])){4 if(!move_uploaded_file($_FILES[‘myfile‘][‘tmp_name‘],$path . ‘/‘ . $filename)){5 die(‘不能將檔案移動到指定目錄‘);6 }7 }8 ?>
4、判斷是否為可以上傳的類型
1 <?php 2 //設定允許的上傳類型 3 $allowtype = array(‘gif‘,‘jpg‘,‘png‘); 4 //拆分數組,並刪除尾碼名 5 $cs = array_pop(explode(‘.‘,$FILES[‘myfile‘][‘name‘])); 6 //通過判斷檔案的副檔名來決定是否是允許上傳的類型 7 if(!in_array($cs,$allowtype)){ 8 die("這個尾碼名是{$cs},不是允許上傳的檔案類型"); 9 }10 ?>
5、判斷允許上傳檔案大小
1 <?php2 $size = 100000;3 if($FILES[‘myfile‘][‘size‘] > $size){4 die(‘超過了允許{$size}位元組大小‘):5 }6 ?>
6、上傳後系統定義檔案名稱
1 <?php2 //為了系統安全,也為了同名檔案不會被覆蓋,上傳後將檔案名稱使用系統定義3 $cs = array_pop(explode(‘.‘,$FILES[‘myfile‘][‘name‘]));4 $filename = date(‘YmdHis‘).rand(100,999) . ‘.‘ . $cs;5 }6 ?>
四、多個檔案上傳
只要在用戶端多提供幾個類型為file的輸入表單,並設定不同的name屬性值
1 <html> 2 <head><title>檔案上傳</title></head> 3 <body> 4 <form action=‘upload.php‘ method=‘POST‘ enctype=‘multipart/form-data‘> 5 <input type=‘hidden‘ name=‘MAX_FILE_SIZE‘ value=‘1000000‘> 6 選擇檔案1:<input type=‘file‘ name=‘myfile[]‘><br> 7 選擇檔案2:<input type=‘file‘ name=‘myfile[]‘><br> 8 選擇檔案3:<input type=‘file‘ name=‘myfile[]‘><br> 9 <input type=‘submit‘ value=‘上傳檔案‘>10 </form>11 </body>12 </html>
五、檔案下載
1 <?php2 header("Content-Type:類型"); //指定下載的檔案類型3 header("Content-Disposition:attachment;filename=檔案名稱"); //指定下載的檔案描述4 header("Content-Length:檔案大小"); //指定下載的檔案大小5 readfile("./uploads/".$picname); //讀取並輸出圖片內容6 ?>
六、思維導圖
【代碼學習】PHP檔案的上傳和下載