国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 > php教程 > php手冊 > 正文

php文件上傳之多文件上傳,

php中文網(wǎng)
發(fā)布: 2016-06-13 08:57:23
原創(chuàng)
986人瀏覽過

php文件上傳之多文件上傳,

   在胡說之前,首先聲明,本文是建立在掌握php單文件上傳的基礎(chǔ)上,所以這里就不贅述文件上傳服務(wù)器配置,表單設(shè)置該注意的地方了。

   話不多少,直入主題,在請求頁面方面有兩種寫法(只呈現(xiàn)表單部分,以上傳三個文件為例。)

    

<span><</span><span>form </span><span>action</span><span>="doAction.php"</span><span> method</span><span>="post"</span><span> enctype</span><span>="multipart/form-data"</span><span>></span><span>
        請選擇我的上傳文件
        </span><span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myfile[]"</span><span>/></span>
        <span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myfile[]"</span> <span>/></span>
        <span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myfile[]"</span> <span>/></span>
        <span><</span><span>input </span><span>type</span><span>="submit"</span><span> value</span><span>="上傳"</span> <span>/></span>
<span></</span><span>form</span><span>></span>
登錄后復(fù)制
<span><</span><span>form </span><span>action</span><span>="doAction.php"</span><span> method</span><span>="post"</span><span> enctype</span><span>="multipart/form-data"</span><span>></span><span>
        請選擇我的上傳文件
        </span><span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myfil1"</span><span>/></span>
        <span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myfil2"</span><span>/></span>
        <span><</span><span>input </span><span>type</span><span>="file"</span><span> name</span><span>="myfil3"</span><span>/></span>
        <span><</span><span>input </span><span>type</span><span>="submit"</span><span> value</span><span>="上傳"</span> <span>/></span>
    <span></</span><span>form</span><span>></span>
登錄后復(fù)制

  兩個對比,發(fā)現(xiàn)僅僅是name的不同,第一個將name設(shè)置成數(shù)組的形式,而第二個則是我們通常設(shè)置也很容易想到的一種方法。

  雖然表面上顯示的僅僅有一點(diǎn)點(diǎn)不同,但真正提交到doAction.php頁面的$_FILES則有很大不同。

立即學(xué)習(xí)PHP免費(fèi)學(xué)習(xí)筆記(深入)”;

  第一種的$_FILES是一個三維數(shù)組,而第二種是二維數(shù)組,如下:

  function getFiles(){ foreach($_FILES as $file){ $fileNum=count($file['name']); if ($fileNum==1) { $files=$file; }else{ for ($i=0; $i $fileNum; $i++) { $files[$i]['name']=$file['name'][$i]; $files[$i]['type']=$file['type'][$i]; $files[$i]['tmp_name']=$file['tmp_name'][$i]; $files[$i]['error']=$file['error'][$i]; $files[$i]['size']=$file['size'][$i]; } } } return $files; }

?

? ? ? 通過這個函數(shù),將$_FILES轉(zhuǎn)化為下面格式:

  

  此刻,兩種上傳方式已經(jīng)處在同一起跑線了,下面的工作便是編寫uploadFile()函數(shù)對每個文件進(jìn)行上傳,這也是本文的重點(diǎn)。

  文件上傳函數(shù):

<span>function</span> uploadFile(<span>$file</span>,<span>$path</span>='./uploads',<span>$max_size</span>,<span>$allowExt</span><span>){
  </span><span>$filename</span>=<span>$file</span>['name'<span>];
    </span><span>$type</span>=<span>$file</span>['type'<span>];
    </span><span>$temp_name</span>=<span>$file</span>['tmp_name'<span>];
    </span><span>$error</span>=<span>$file</span>['error'<span>];
    </span><span>$size</span>=<span>$file</span>['size'<span>];


    </span><span>if</span> (<span>$error</span>==<span>UPLOAD_ERR_OK) {
        </span><span>if</span> (<span>$size</span>><span>$max_size</span><span>) {
            </span><span>$res</span>['mes']=<span>$filename</span>."文件超過規(guī)定上傳大小"<span>;
        }
        </span><span>$ext</span>=getExt(<span>$filename</span><span>);
        </span><span>if</span> (!<span>in_array</span>(<span>$ext</span>, <span>$allowExt</span><span>)) {
            </span><span>$res</span>['mes']=<span>$filename</span>.'文件名不合乎規(guī)范'<span>;
        }
        </span><span>if</span> (!<span>is_uploaded_file</span>(<span>$temp_name</span><span>)) {
            </span><span>$res</span>['mes']=<span>$filename</span>."文件不是通過HTTP POST 方法上傳上傳過來的"<span>;
        }


        </span><span>if</span> (@<span>$res</span><span>) {
            </span><span>return</span>  <span>$res</span><span>;
        }


        </span><span>if</span> (!<span>file_exists</span>(<span>$path</span><span>)) {
            </span><span>mkdir</span>(<span>$path</span>,0777,<span>true</span><span>);
      </span><span>chmod</span>(<span>$path</span>, 0777<span>);
        }
        </span><span>$fname</span>=<span>getUniName();


        </span><span>$destination</span>=<span>$path</span>.'/'.<span>$fname</span>.'.'.<span>$ext</span><span>;
        </span><span>if</span> (<span>move_uploaded_file</span>(<span>$temp_name</span>, <span>$destination</span><span>)) {
            </span><span>$res</span>['mes']=<span>$filename</span>.'上傳成功'<span>;
            </span><span>$res</span>['dest']=<span>$destination</span><span>;
        }</span><span>else</span><span>{
            </span><span>$res</span>['mes']=<span>$filename</span>."文件上傳失敗"<span>;
        }
    }</span><span>else</span><span>{
        </span><span>switch</span> (<span>$error</span><span>) {
            </span><span>case</span> '1':
            <span>$res</span>['mes']="超過了配置文件上傳文件的大小"<span>;
            </span><span>break</span><span>;
            </span><span>case</span> '2':
            <span>$res</span>['mes']="超過表單設(shè)置上傳文件文件的大小"<span>;
            </span><span>break</span><span>;
            </span><span>case</span> '3':
            <span>$res</span>['mes']="文件部分被上傳"<span>;
            </span><span>break</span><span>;
            </span><span>case</span> '4':
            <span>$res</span>['mes']="沒有文件被上傳"<span>;

            </span><span>break</span><span>;
            </span><span>case</span> '6':
            <span>$res</span>['mes']="沒有找到臨時目錄"<span>;
            </span><span>break</span><span>;
            </span><span>case</span> '7':
            <span>$res</span>['mes']="文件不可寫"<span>;

            </span><span>break</span><span>;
            </span><span>default</span>:
            <span>$res</span>['mes']="上傳文件失敗"<span>;
            </span><span>break</span><span>;
        }
    }

    </span><span>return</span> <span>$res</span><span>;

}</span>
登錄后復(fù)制

其中還涉及了兩個小函數(shù):

<span>/*</span><span>*
 * 獲得文件擴(kuò)展名
 * @param  string $filename 上傳文件名
 * @return string           返回擴(kuò)展名
 </span><span>*/</span>
<span>function</span> getExt(<span>$filename</span><span>){
    </span><span>$arr</span>=<span>explode</span>('.', <span>basename</span>(<span>$filename</span><span>));

    </span><span>return</span> <span>end</span>(<span>$arr</span><span>);
}
</span><span>/*</span><span>*
 * 獲得文件唯一擴(kuò)展名
 * @return string 經(jīng)過md5后生成32位唯一的上傳文件名
 </span><span>*/</span>
<span>function</span><span> getUniName(){

    </span><span>return</span> <span>md5</span>(<span>uniqid</span>(<span>microtime</span>(<span>true</span>),<span>true</span><span>)); 
}</span>
登錄后復(fù)制

?

感受:

  很久前接觸過php文件上傳,當(dāng)時感覺一團(tuán)亂麻?,F(xiàn)在看來只要掌握$_FILES里面包含什么信息,利用自己寫過的知識處理一些小技巧,系統(tǒng)有邏輯的加以考慮,適時地封裝函數(shù),以后文件上傳就可以很快地展開。這次我展現(xiàn)的代碼必然不是能滿足任何需要,所以可以適當(dāng)改造,成為自己的代碼。比如如果要求上傳文件是圖片內(nèi)容的話,單靠擴(kuò)展名是絕對不能判斷的,還需要利用圖片的特性加以驗(yàn)證。

?

  

?

PHP速學(xué)教程(入門到精通)
PHP速學(xué)教程(入門到精通)

PHP怎么學(xué)習(xí)?PHP怎么入門?PHP在哪學(xué)?PHP怎么學(xué)才快?不用擔(dān)心,這里為大家提供了PHP速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號