偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

  1. <abbr id="pqf90"><table id="pqf90"><nav id="pqf90"></nav></table></abbr>
    <big id="pqf90"><samp id="pqf90"></samp></big>

    使用Zend框架實(shí)現(xiàn)PHP文件上傳

    開發(fā) 后端
    本文將向讀者詳細(xì)介紹如何使用流行的Zend框架來創(chuàng)建我們自己的文件上傳機(jī)制,該機(jī)制能夠輕而易舉地接收、確認(rèn)和處理要上傳的文件。

    Zend Framework是流行的PHP開發(fā)框架,使用Zend框架,能夠方便快捷的實(shí)現(xiàn)各項(xiàng)常用功能。這里向你介紹使用Zend框架來創(chuàng)建文件上傳功能,該機(jī)制能夠輕而易舉地接收、確認(rèn)和處理要上傳的文件。

    一、簡介

    無論是管理YouTube上的視頻、在SlideShare上共享PowerPoint演示文稿,還是使用開源電子商務(wù)平臺Magento更新在線商店中的商品圖像,我們都有用到基于web的文件上傳功能。但是,這個(gè)功能到底是如何工作的呢?文件是如何從本地機(jī)器傳送到遠(yuǎn)程服務(wù)器的?本文將向讀者詳細(xì)介紹如何使用流行的Zend框架來創(chuàng)建我們自己的PHP文件上傳機(jī)制,該機(jī)制能夠輕而易舉地接收、確認(rèn)和處理要上傳的文件。

    二、配置處理文件上載的PHP

    PHP本身能夠通過Web表單來完成文件上載,不過無論使用標(biāo)準(zhǔn)PHP代碼還是使用Zend框架來管理文件上傳,都有必要花一些時(shí)間來檢測直接影響PHP的有關(guān)功能的配置偽指令,這些指令包括:

    ◆file_uploads:這個(gè)偽指令啟用PHP的文件上載功能。在默認(rèn)情形下,這個(gè)偽指令會被啟用。
    ◆upload_max_filesize:這個(gè)偽指令定義了要上載的文件的最大尺寸。在默認(rèn)情形下,這個(gè)偽指令被設(shè)置為2M。
    ◆upload_tmp_dir:這個(gè)偽指令定義了PHP臨時(shí)存儲要上傳的文件的目錄,文件在傳入最終目的地之前將臨時(shí)存放于此,該目錄是由開發(fā)人員指定的。在默認(rèn)情形下,這個(gè)偽指令不會賦值,這意味著PHP將使用系統(tǒng)的默認(rèn)值,舉例來說,許多l(xiāng)inux發(fā)行版中的臨時(shí)目錄為/tmp。
    ◆post_max_size:設(shè)定POST 數(shù)據(jù)所允許的最大大小。php默認(rèn)的post_max_size 為2M。
    ◆max_execution_time:雖然與文件上載的關(guān)系不是非常密切,但是這個(gè)偽指令在PHP的文件上載功能中卻扮演了一個(gè)重要角色,因?yàn)樗x了PHP腳本的執(zhí)行時(shí)間。對于尺寸特別大的文件來說,可能需要很長的時(shí)間才能傳輸?shù)轿募?wù)器,所以可以考慮將這個(gè)偽指令的默認(rèn)值即30秒改為60乃至90秒。

    三、創(chuàng)建文件上載表單

    下面我們將創(chuàng)建一個(gè)Web表單示例,它能夠用來瀏覽本地計(jì)算機(jī)的文件系統(tǒng)以及確定要上傳的文件。我們將盡力使該示例保持簡單,創(chuàng)建的文件上載表單的外觀如圖1所示。

    PHP文件上傳表單

    這個(gè)表單的創(chuàng)建方式跟我們之前創(chuàng)建的其他表單大同小異,只是有一些輕微的區(qū)別。用于創(chuàng)建這個(gè)表單的HTML代碼如清單1所示。按照Zend框架的慣例,我們將這個(gè)表單放入名為upload.phtml的視圖中,它是名為admin的控制器中動作upload的一部分。

    1. <form enctype="multipart/form-data" method="post" action="/admin/upload"> 
    2.     
    3.     <p> 
    4.       What file would you like to upload?<br /> 
    5.       <input type="file" name="video-upload" size="40" /> 
    6.     p> 
    7.     
    8.     <p> 
    9.       <input type="submit" name="submit" class="submit" value="Upload Video" /> 
    10.     p> 
    11.     
    12.   form> 

    在這個(gè)表單中,有兩處代碼需要格外注意:

    enctype="multipart/form-data":當(dāng)我們使用Web表單發(fā)送大量的二進(jìn)制數(shù)據(jù)的時(shí)候,就應(yīng)該使用這個(gè)表單屬性。因?yàn)橹T如電子表格以及視頻等文件中含有大量的二進(jìn)制數(shù)據(jù),所以創(chuàng)建文件上載表單時(shí)應(yīng)該包含這個(gè)屬性。

    1. <input type="file" name="video-upload" size="40" /> 

    #T#上面這個(gè)表單元素會創(chuàng)建允許用戶在本地文件系統(tǒng)搜索要上傳的文件的表單機(jī)制。當(dāng)提交按鈕被按下的時(shí)候,這個(gè)文件將被上傳,并將其發(fā)送給表單動作所標(biāo)識的腳本(本例中,為upload.php)做進(jìn)一步的處理。

    如上所述,文件將被上傳給表單的動作屬性所標(biāo)識的腳本。然而,除非該腳本對該文件做實(shí)際的處理,否則數(shù)據(jù)會被丟失。在下一節(jié)中,我們將介紹如何使用Zend框架的Zend_File_Transfer組件來處理上傳的文件。#p#

    四、關(guān)于Zend_File_Transfer組件

    如同Zend框架的其他強(qiáng)大組件旨在簡化我們的開發(fā)任務(wù)那樣,Zend_File_Transfer組件旨在簡化從用戶的計(jì)算機(jī)向web服務(wù)器上傳文件的工作。實(shí)際上,這個(gè)組件在處理文件上傳方面非常靈活,它可以使用諸如FTP和WebDAV協(xié)議來傳送文件,不過我們這里只討論它的最初設(shè)計(jì)意圖。讓我們首先創(chuàng)建最簡單上載動作處理,不過它仍能接收和處理一個(gè)上載的文件,如下所示:

    1. public function uploadAction()  
    2.    {  
    3.      
    4.      if ($this->getRequest()->isPost()) {  
    5.       
    6.        $upload = new Zend_File_Transfer_Adapter_Http();  
    7.         
    8.        $upload->setDestination($this->config->uploads->product->supplements);  
    9.             
    10.        if ($upload->receive()) {   
    11.          echo "The file has been uploaded!";  
    12.        }  
    13.             
    14.      }  
    15.        
    16.    } 

    為了在下面的描述中輕松引用代碼,我們這里為動作代碼添加了相應(yīng)的行號。

    04行的代碼確定POST請求是否已經(jīng)提交給了該動作。這對于創(chuàng)建為用戶呈現(xiàn)表單以及通過表單提交數(shù)據(jù)的動作來說都非常有用。

    06行的代碼調(diào)用Zend_File_Transfer類組件,并使用了能夠處理通過Web表單提交的數(shù)據(jù)的HTTP適配器。

    08行的代碼用于設(shè)置文件上傳的最終目的地。雖然可以直接向該方法傳遞一個(gè)路徑,不過我發(fā)現(xiàn)將路徑存放到application.ini文件中然后根據(jù)需要檢索配置參數(shù)會更加方便一些。 這允許我們依照要求輕松更改目的地路徑,當(dāng)我們的代碼從開發(fā)工作站遷移到生產(chǎn)服務(wù)器時(shí)這一點(diǎn)格外有用。

    10行的代碼負(fù)責(zé)接收文件,并將其移動到要求的目的地。

    或許您覺得這難以置信,但是這短短的十六行代碼的確能夠接收并將上傳來的文件移動到服務(wù)器的預(yù)定位置! 然而,現(xiàn)在還不要高興得太早,因?yàn)樵撃_本缺少接收用戶輸入時(shí)應(yīng)具備的一個(gè)關(guān)鍵步驟,因?yàn)檫@個(gè)腳本允許用戶上傳任意文件,這是萬萬不可的! 幸運(yùn)的是,Zend_File_Transfer組件帶有檢查文件上傳處理方面能夠想到的所有方面的數(shù)據(jù)驗(yàn)證方法。

    五、對上載的文件進(jìn)行檢驗(yàn)

    我們至少希望檢查被上傳文件的一個(gè)或者幾個(gè)關(guān)鍵特性,如文件的大小,或者M(jìn)IME類型等。實(shí)際上,有多種方法可以用來檢索這些特性。舉例來說,為了檢索文件的MIME類型,我們可在接收文件之后調(diào)用getMimeType()方法,具體代碼如下所示:

    1. if ($upload->receive()) {  
    2.     echo "The file type is {$upload->getMimeType()}";   
    3.   } 

    如果我們向服務(wù)器上傳了一個(gè)PDF文件,并調(diào)用了getMimeType方法,那么將會返回application/x-pdf。當(dāng)用戶只應(yīng)上傳特定類型的文件時(shí),這個(gè)方法非常有用。下面是一個(gè)例子:

    1. if ($upload->getMimeType() == "application/x-pdf") {  
    2.     $upload->receive();  
    3.     echo "File received";  
    4.   } else {  
    5.     echo "Please upload a PDF";  
    6.   } 

    當(dāng)然,檢查文件大小或者類型只是證實(shí)過程的一小部分而已。為了簡化驗(yàn)證工作,您可能希望在接收被上傳的文件之前來進(jìn)行這些工作,實(shí)際上Zend_File_Transfer組件已經(jīng)為我們提供了18個(gè)驗(yàn)證方法。Zend框架文檔提供了這些驗(yàn)證函數(shù)的完整說明。我們可能用到的驗(yàn)證函數(shù)之一便是ImageSize,它能檢查一個(gè)被上載圖像的大小,以便確保其大小介于給定的最大和最小尺寸之間。在某些情況下,這可能非常有用,例如在需要保持縮略圖尺寸保持一致的時(shí)候。下面的例子將確保所有上傳的圖像都為PNG類型,同時(shí)其大小符合160×160像素的要求:

    1. if ($this->getRequest()->isPost()) {  
    2.     
    3.     $upload = new Zend_File_Transfer_Adapter_Http();  
    4.     
    5.     $upload->setDestination($this->config->uploads->product->supplements);  
    6.     
    7.     $upload->addValidator('MimeType', false, 'image/png');  
    8.      
    9.     $upload->addValidator('ImageSize', false,  
    10.       array('minwidth' => 160,  
    11.         'maxwidth' => 160,  
    12.         'minheight' => 160,  
    13.         'maxheight' => 160)  
    14.       );  
    15.      
    16.     if ($upload->isValid()) {  
    17.      
    18.       $upload->receive();  
    19.       echo "File received";  
    20.     
    21.     } else {  
    22.      
    23.       echo "Please upload a file of type PNG and dimensions 160x160 pixels.";  
    24.       
    25.     }  
    26.     
    27.   } 

    六、進(jìn)一步閱讀

    如今,用戶驅(qū)動的內(nèi)容已經(jīng)成為Web的關(guān)鍵組成部分,所以項(xiàng)目的成功可能會取決于數(shù)據(jù)從用戶到web服務(wù)器的傳送效率。在為用戶提供數(shù)據(jù)上傳功能的時(shí)候,Zend框架的Zend_File_Transfer組件可以極大的降低開發(fā)工作的復(fù)雜性!

    如果您想進(jìn)一步了解Zend_File_Transfer組件,請參考Zend框架的Zend_File組件文檔;另外,PHP手冊的文檔也有文件上載方面的介紹;此外,Zend_ProgressBar組件的進(jìn)一步信息請參考Zend框架的Zend_ProgressBar文檔。

    責(zé)任編輯:佚名 來源: IT168
    相關(guān)推薦

    2009-12-09 13:41:50

    PHP Zend框架

    2009-12-09 13:47:49

    PHP Zend框架模

    2009-05-06 16:36:00

    Zend FramewZend框架PHP

    2009-11-16 10:40:02

    PHP上傳文件代碼

    2009-12-09 13:54:42

    PHP Zend加密文

    2009-11-16 10:25:40

    PHP上傳文件

    2009-11-16 10:16:24

    PHP文件上傳

    2009-11-16 12:17:46

    PHP上傳文件類型

    2009-05-18 10:23:43

    文件上傳PHPFILE函數(shù)

    2009-11-16 14:15:51

    PHP上傳多個(gè)文件

    2009-11-16 13:57:21

    PHP上傳文件

    2013-05-27 10:14:21

    PHPZend FramewPHP編碼

    2009-11-16 14:09:30

    PHP上傳類

    2009-11-16 13:04:04

    PHP上傳文件代碼

    2009-11-24 15:23:50

    PHP文件上傳進(jìn)度條

    2009-11-16 09:35:42

    PHP上傳

    2009-11-16 10:49:43

    PHP上傳文件代碼

    2009-11-16 11:41:19

    PHP上傳大文件

    2017-03-01 20:08:36

    PHP內(nèi)核分析

    2015-03-06 15:44:22

    點(diǎn)贊
    收藏

    51CTO技術(shù)棧公眾號