php中上傳文件必須知道幾個技巧,一個必須是由表單post過去的數據,然后由php move_uploaded_file進行接受了,再保存到服務器指定路徑即可。
1.form 標簽 enctype 屬性。
2.$_FILES 系統函數。 //將上傳內容轉換為數組。
3.move_uploaded_file 函數。 //移動存放在緩存文件夾里的上傳文件到指定文件夾。
4.is_uploaded_file 函數。 //判斷是否存在。
1.form 標簽
格式:<form enctype="multipart/form-data" ... ...>
<input name="upfile" type="file">
2.$_FILES 系統函數
$_FILES['name'] //客戶端上傳文件原文件名。
$_FILES['type'] //文件的MIME類型,如:“image/gif”
$_FILES['size'] //上傳文件大小,字節為單位。
$_FILES['tmp_name'] //臨時文件名,一般為默認。
$_FILES['error'] //上傳相關情況代碼(0:成功,1:超過php.ini設置大小。2:超過PHP文件代碼指定大小。3:文件只有部分被上傳。4:沒有文件被上傳。5:上傳文件大小為0。)
3.move_uploaded_file 函數
上傳后移動文件到目標位置的函數
move_uploaded_file(臨時文件,目標位置和文件名;)
4.is_uploaded_file 函數
判斷上傳MIME類型的文件函數
is_uploaded_file(MIME);
實例代碼如下:
- <form enctype="multipart/form-data" action="upload.php" method="post">
- <input type="hidden" name="max_file_size" value="100000">
- <input name="userfile" type="file">
- <input type="submit" value="上傳文件">
- </form>
注意:1、表單中enctype=”multipart/form-data”必須指定,以便讓服務器知道文件帶有常規的表單信息。
2、必須有一個可以設置上傳文件最大長度的表單區域,即允許上傳文件的最大值(按字節計算),它是隱藏值域,即max_file_size,通過設置其Value(值)可以限制上傳文件的大小,避免用戶在花時間等待上傳大文件之后才發現該文件太大了的麻煩。但是一般別人可以繞過這個值,所以安全起見,最好是在php.ini文件中配置upload_max_filesize選項,設定文件上傳的大小,默認是2M
實例代碼如下:
- function uploadfile($type,$name,$ext,$size,$error,$tmp_name,$targetname,$upload_dir)
- {
- $MAX_SIZE = 2000000;
- $FILE_MIMES = array('image/pjpeg','image/jpeg','image/jpg','image/gif','image/png');
- $FILE_EXTS = array('.jpg','.gif','.png','.JPG','.GIF','.PNG');
- $file_path = $upload_dir.$targetname;
- if(!is_dir($upload_dir))
- {
- if(!mkdir($upload_dir))
- die("文件上傳目錄不存在并且無法創建文件上傳目錄");
- if(!chmod($upload_dir,0755))
- die("文件上傳目錄的權限無法設定為可讀可寫");
- }
- if($size>$MAX_SIZE)
- die("上傳的文件大小超過了規定大小");
- if($size == 0)
- die("請選擇上傳的文件");
- if(!in_array($type,$FILE_MIMES) || !in_array($ext,$FILE_EXTS))
- die("請上傳符合要求的文件類型");
- if(!move_uploaded_file($tmp_name, $file_path))
- die("復制文件失敗,請重新上傳");
- switch($error)
- {
- case 0:
- return ;
- case 1:
- die("上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值");
- case 2:
- die("上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值");
- case 3:
- die("文件只有部分被上傳");
- case 4:
- die("沒有文件被上傳");
- }
- }
如何上傳多個文件?比如同時上傳3個文件,代碼如下:
只需將<input name="userfile" type="file"> 改成
<input name="userfile[]" type="file">
<input name="userfile[]" type="file">
<input name="userfile[]" type="file">
對應的在調用此函數時,$_FILES['userfile']['name'][0],代表第一個文件的相關文件信息,依此類推,其他也一樣。
一些關于php性能配置,有必須時我們也可以修改一下
max_execution_time = 30 ;每個PHP頁面運行的最大時間值(秒),默認30秒
max_input_time = 60 ;每個PHP頁面接收數據所需的最大時間,默認60秒
memory_limit = 128m ;每個PHP頁面所吃掉的最大內存,默認128M,如果覺得小了,可以設置大點,128夠用。
- max_execution_time = 600
- max_input_time = 600
- upload_max_filesize = 32m
- post_max_size = 32m
如果文件大小限制了我們可以如下解決,打開php.ini,首先找到
file_uploads = on ;是否允許通過HTTP上傳文件的開關。默認為ON即是開
upload_tmp_dir ;文件上傳至服務器上存儲臨時文件的地方,如果沒指定就會用系統默認的臨時文件夾
upload_max_filesize = 8m ;望文生意,即允許上傳文件大小的最大值。默認為2M
post_max_size = 8m ;指通過表單POST給PHP的所能接收的最大值,包括表單里的所有值。默認為8M
一般地,設置好上述四個參數后,上傳<=8M的文件是不成問題,在網絡正常的情況下,但如果要上傳>8M的大體積文件,只設置上述四項還一定能行的通,進一步配置以下的參數.
max_execution_time = 600 ;每個PHP頁面運行的最大時間值(秒),默認30秒
max_input_time = 600 ;每個PHP頁面接收數據所需的最大時間,默認60秒
memory_limit = 8m ;每個PHP頁面所吃掉的最大內存,默認8M
把上述參數修改后,在網絡所允許的正常情況下,就可以上傳大體積文件了
- max_execution_time = 600
- max_input_time = 600
- memory_limit = 32m
- file_uploads = on
- upload_tmp_dir = /tmp
- upload_max_filesize = 32m
- post_max_size = 32m
新聞熱點
疑難解答