PHP開發之檔案的上傳下載

投稿發表於2015-04-05

一、檔案的上傳

1、客戶端設定:
(1)、在標籤中將enctype和method兩個屬性指明相應的值。Enctype=”multipart/form-data”; Method=”POST”(2)、form表單中設定一個hidden型別的input框,其中name的值為MAX_FILE_SIZE的隱藏值2、伺服器端設定:

(1)、$_FILES多維陣列:用於儲存各種上傳檔案有關的資訊

(2)、檔案上傳與php配置檔案的設定,如以下php.ini檔案中的一些指令

指令 預設值 功能描述

file_uploads ON 確定伺服器上的PHP指令碼是否可以接受HTTP檔案上傳

memory_limit 8M 設定指令碼可以分配的最大記憶體量,防止失控的指令碼獨佔伺服器記憶體

upload_max_file 2M 限制PHP處理上傳檔案大小的最大值,此值必須小於POST_MAX_SIZE值

post_max_size 8M 限制通過POST方法可以接受資訊的最大值

upload_tmp_dir NULL 上傳檔案的臨時路徑,可以是一個絕對路徑

3、PHP的檔案上傳及資源指令

file_uploads(boolean)

是否開啟HTTP POST檔案上傳功能

max_execution_time(integer)

PHP指令碼最長執行時間

memory_limit(integer) 單位M

PHP指令碼執行的最大記憶體

upload_max_filesize(integer) 單位M

PHP上傳檔案的最大尺寸

upload_tmp_dir(string)

上傳檔案儲存的臨時位置

post_max_size(integer) 單位M

HTTP POST資料的最大尺寸

4、$_FILES陣列

$_FILES['userfile'][size]

獲取上傳檔案的位元組數

$_FILES['userfile']['type']

獲取上傳檔案的MIME型別,每種MIME型別都是由“/”分隔的主型別和子型別組成

$_FILES['userfile']['error']

獲取上傳檔案的錯誤程式碼,0:無任何錯誤,檔案上傳成功;1:上傳檔案大小超出了PHP配置檔案中upload_max_filesize選項限定的值;2:上傳檔案大小超出了HTML表單中MAX_FILE_SIZE指定的值;3:表示檔案只被部分上傳;4:表示沒有上傳任何檔案。

$_FILES['userfile']['name']

獲取上傳檔案的原始名稱,包含副檔名

$_FILES['userfile']['tmp_name']

獲取上傳檔案的臨時位置名稱,這是儲存在臨時目錄中所指定的檔名。

5、檔案上傳函式

is_upload_file

判斷指定的檔案是否是通過HTTP POST上傳

bool is_upload_file(string $filename)

move_upload_file

將上傳檔案移至新位置

bool move_upload_file(string $filename, string $destination)

注意:檔案上傳後,首先會儲存於伺服器的臨時目錄中,可以使用該函式將上傳檔案移動到新位置,與copy()和move()相比,它能檢測並確保第一個引數filename指定的檔案是否是合法上傳的檔案。

6、錯誤資訊描述

UPLOAD_ERR_OK{value=0}

UPLOAD_ERR_INI_SIZE{value=1}

UPLOAD_ERR_FORM_SIZE{value=2}

UPLOAD_ERR_PARTIAL{value=3}

UPLOAD_ERR_NO_FILE{value=4}

UPLOAD_ERR_NO_TMP_DIR{value=6}

UPLOAD_ERR_CANT_WRITE{value=7}

二、檔案下載

簡單檔案下載只需要使用HTML的連結標記,並將屬性href的URL值指定下載的檔案即可。這種方法只能處理一些瀏覽器不能識別的MIME型別檔案。

 為了提高安全性,不希望在a標籤中給出檔案連結,則必須向瀏覽器傳送必要的頭資訊,我們可以使用如下程式碼。


三、檔案函式庫

touch

設定檔案的訪問和修飾時間

bool touch(string $filename[, int $time[, int $time]])

copy

複製檔案

bool copy(string $source, string $dest)

注意:移動檔案請使用rename函式

file_put_contents

將一個字串寫入檔案

int file_put_contents(string $filename, string $data[, int $flag[, resource $content]])

file_get_contents

將整個檔案讀到字串

string file_get_contents(string $filename[, bool user_include_path [, resource $content[, int $offset[, int $maxlen]]]])

四、序列化與反序列化

serialize

序列化

string serialize(mixed $value)

注意:serialize()可處理除了resouce之外的任何型別。甚至可以serialize()那些包含了指向其自身引用的陣列。

unserialize

反序列化

mixed unserialize(string $str)


● date

格式化一個本地時間/日期

string date(string format[, int timestamp]);

● getdate

取得日期/時間資訊

array getdate([int timestamp]);


● microtime

返回當前Unix時間戳和微秒數

mixed microtime([bool get_as_float]);

● date_default_timezone_set

設定預設時區

bool date_default_timezone_set(string timezone_identifier);

● date_default_timezone_get

獲取預設時區

string date_default_timezone_get(void);
三、字元函式庫
strlen

獲取字串長度

int strlen(string $str);

strtolower

字串轉換為小寫

string strtolower(string $str);

strtoupper

字串轉換為大寫

string strtoupper(string $str);

ucfirst

首字母大寫

string ucfirst(string $str);

ucwords

將每個單詞的首字母轉換為大寫字母

string ucwords(string $str);

ltrim

從字串開始的位置刪除空格或其他字元

string ltrim(string $str [, string $charlist]);

rtrim

從字串結束的位置刪除空格或者其他字元

string rtrim(string $str[, string $chirlist]);

trim

從字串開始和結束的位置刪除空格或者其他字元

str_replace

字元替換

mixed str_ireplace(mixed $search, mixed $replace, mixed $subject, [int $count]);

str_ireplace

字元替換

mixed str_ireplace(mixed $search, mixed $replace, mixed $subject, [int $count]);

md5
計算字串的MD5雜湊

string md5(string $str[, bool $raw_output=false]);

strpos

返回一個字元在另一個字元第一次出現的位置

int strpos(string haystack, mixed needle[, int offset]);

相關文章