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">注意
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