PHP實(shí)現(xiàn)上傳文件的方法
1.表單上傳文件,用file字段
允許用戶上傳文件,在HTML表單的聲明中要加上一個(gè)上傳的屬性:
enctype = 'multipart/form-data'
表單的method必須是POST
表單選項(xiàng)MAX_FILE_SIZE隱藏域用于限制上傳文件大小,它必須放在文件表單元素前面,單位為字節(jié)。
上傳時(shí),PHP收到關(guān)于該文件的信息數(shù)組,這些信息可以在$_FILES這個(gè)超級(jí)全局?jǐn)?shù)組中找到。
如:上傳了一個(gè)“wenhui.jpg”的圖片數(shù)組值如下:
name "wenhui.jpg" 上傳時(shí)文件的名字
type “image/jpeg" 文件類型
tmp_name "/tmp/wenhui" 服務(wù)器端的臨時(shí)文件名
error 上傳錯(cuò)誤的返回值
size 2045 文件實(shí)際大小
3.把臨時(shí)文件存儲(chǔ)到指定路徑,上傳文件就成功了,現(xiàn)在解決的就是如果存到指定路徑,如果路徑中文件夾不存在如何創(chuàng)建的方法;
bool mkdir ( string pathname [, int mode [, bool recursive [, resource context]]] )
嘗試新建一個(gè)由 pathname 指定的目錄。
注意也許想用八進(jìn)制數(shù)指定模式,也就是說該數(shù)應(yīng)以零打頭。模式也會(huì)被當(dāng)前的 umask 修改,可以用 umask() 來改變。
注意: mode 在 Windows 下被忽略。自 PHP 4.2.0 起成為可選項(xiàng)。
默認(rèn)的 mode 是 0777,意味著最大可能的訪問權(quán)。有關(guān) mode 的更多信息請(qǐng)閱讀 chmod() 頁面。
1.首先 簡(jiǎn)單說一下mkdir()與mkdirs()的區(qū)別,以及,is_dir和dirname():
mkdir() 只能在已經(jīng)存在的目錄中創(chuàng)建創(chuàng)建文件夾(即父級(jí)必須有才行)。
mkdirs() 可以在不存在的目錄中創(chuàng)建文件夾。諸如:a\b,既可以創(chuàng)建多級(jí)目錄。
dirname() 是返回路徑中的目錄部分。
is_dir() 用于判斷給出的文件名是否是一個(gè)有效的目錄
2.大致流程為:
(1) 先用is_dir判斷是否已是一個(gè)文件夾,如果是則返回TRUE。如沒有(或者不是文件夾),則試著創(chuàng)建它,當(dāng)然有可以父級(jí)不存在,那mkdir直接就創(chuàng)不成功,但也為不報(bào)錯(cuò),所以就用@來抑止報(bào)非致命錯(cuò)誤。
(2)如果傳參數(shù)都不滿足條件,那么就進(jìn)入第二個(gè)if語句,先是取得路徑中的目錄部分,當(dāng)然有可能是不存在的多級(jí)父級(jí),所以用了mkdirs()來先創(chuàng)建父級(jí),如果成功(不成功返回FALSE),那么再用mkdir來創(chuàng)建最終的目錄了。
好了,以上就是第一種方案。
第二種
(說明:此方案代碼精簡(jiǎn),推薦使用)
function create_folders($dir) { return is_dir($dir) or (create_folders(dirname($dir)) and mkdir($dir, 0777)); }