本文將向讀者詳細介紹如何使用流行的Zend框架來創建我們自己的文件上傳機制,該機制能夠輕而易舉地接收、確認和處理要上傳的文件。
一、簡介
無論是管理YouTube上的視頻、在SlideShare上共享PowerPoint演示文稿,還是使用開源電子商務平台Magento更新在線商店中的商品圖像,我們都有用到基於web的文件上傳功能。但是,這個功能到底是如何工作的呢?文件是如何從本地機器傳送到遠程服務器的?本文將向讀者詳細介紹如何使用流行的Zend框架來創建我們自己的文件上傳機制,該機制能夠輕而易舉地接收、確認和處理要上傳的文件。
二、配置處理文件上載的PHP
PHP本身能夠通過Web表單來完成文件上載,不過無論使用標准PHP代碼還是使用Zend框架來管理文件上傳,都有必要花一些時間來檢測直接影響PHP的有關功能的配置偽指令,這些指令包括:
- file_uploads:這個偽指令啟用PHP的文件上載功能。在默認情形下,這個偽指令會被啟用。
- upload_max_filesize:這個偽指令定義了要上載的文件的最大尺寸。在默認情形下,這個偽指令被設置為2M。
- upload_tmp_dir:這個偽指令定義了PHP臨時存儲要上傳的文件的目錄,文件在傳入最終目的地之前將臨時存放於此,該目錄是由開發人員指定的。在默認情形下,這個偽指令不會賦值,這意味著PHP將使用系統的默認值,舉例來說,許多linux發行版中的臨時目錄為/tmp。
- post_max_size:設定POST 數據所允許的最大大小。php默認的post_max_size 為2M。
- max_execution_time:雖然與文件上載的關系不是非常密切,但是這個偽指令在PHP的文件上載功能中卻扮演了一個重要角色,因為它定義了PHP腳本的執行時間。對於尺寸特別大的文件來說,可能需要很長的時間才能傳輸到文件服務器,所以可以考慮將這個偽指令的默認值即30秒改為60乃至90秒。
三、創建文件上載表單
下面我們將創建一個Web表單示例,它能夠用來浏覽本地計算機的文件系統以及確定要上傳的文件。我們將盡力使該示例保持簡單,創建的文件上載表單的外觀如圖1所示。
圖1 一個簡單的文件上載表單
這個表單的創建方式跟我們之前創建的其他表單大同小異,只是有一些輕微的區別。用於創建這個表單的HTML代碼如清單1所示。按照Zend框架的慣例,我們將這個表單放入名為upload.phtml的視圖中,它是名為admin的控制器中動作upload的一部分。
<form enctype="multipart/form-data" method="post" action="/admin/upload">
<p>
What file would you like to upload?<br />
<input type="file" name="video-upload" size="40" />
</p>
<p>
<input type="submit" name="submit" class="submit" value="Upload Video" />
</p>
</form>
清單1 文件上載表單的HTML代碼
在這個表單中,有兩處代碼需要格外注意:
- enctype="multipart/form-data":當我們使用Web表單發送大量的二進制數據的時候,就應該使用這個表單屬性。因為諸如電子表格以及視頻等文件中含有大量的二進制數據,所以創建文件上載表單時應該包含這個屬性。
-
<input type="file" name="video-upload