php檔案上傳的應用和原理詳解_PHP教程

來源:互聯網
上載者:User
php中上傳檔案必須知道幾個技巧,一個必須是由表單post過去的資料,然後由php move_uploaded_file進行接受了,再儲存到伺服器指定路徑即可。

1.form 標籤 enctype 屬性。

2.$_FILES 系統函數。 //將上傳內容轉換為數組。

3.move_uploaded_file 函數。 //移動存放在快取檔案夾裡的上傳檔案到指定檔案夾。

4.is_uploaded_file 函數。 //判斷是否存在。

---------------------------------------

1.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個檔案

代碼如下 複製代碼

只需將


改成



對應的在調用此函數時,$_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

http://www.bkjia.com/PHPjc/632639.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632639.htmlTechArticlephp中上傳檔案必須知道幾個技巧,一個必須是由表單post過去的資料,然後由php move_uploaded_file進行接受了,再儲存到伺服器指定路徑即可。...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.