PHP.MVC官方網站上介紹的是使用PEAR::HTTP_Upload 包來處理上傳,而我只是用原始的方式來進行上傳的處理,主要是為了說明在MVC的架構中怎樣上傳檔案.以後我可能會使用PEAR::HTTP_Upload 包來做.
1.開啟phpmvc-config.xml,在<phpmvc-config>標籤中加上:
<controller maxFileSize="1048576" tempDir="C:/www/upload/">
</controller>
其中maxFileSize為上傳檔案大小的最大值,單位是位元組,上傳的檔案會用一個臨時的名字存放在php.ini所
配置的位置,我們當然要把這些檔案另存到我們自己的目錄中,tempDir就是這個目錄.
2.儲存檔案.現在寫一個php頁,裡面寫一個上傳檔案的表單:
<form enctype='multipart/form-data' method='POST' action='Main.php?do=upload'>
<input type='file' name='file'><br/>
<input name='submit_files' value='上傳' type='submit'>
</form>
其中enctype一定要設定為multipart/form-data
3.寫一個ActionForm類,比如叫UploadForm,這個類和普通的ActionForm大同小異,但我們要在其中的
validate方法中實現操作上傳的檔案.首先要得到xml設定檔中的值:
$appConfig =& $this->actionServer->getApplicationConfig($request);
$controllerConfig =& $appConfig->getControllerConfig();
$tmpFileDir = $controllerConfig->getTempDir();
$maxFileSize= intval($controllerConfig->getMaxFileSize(),10);
一定要把檔案大小那個用intval函數轉換成整形資料.
接著得到我們上傳的檔案資訊:
$upload_file=$_FILES['file']['tmp_name'];
$upload_file_name=$_FILES['file']['name'];
$upload_file_size=intval($_FILES['file']['size'],10);
['file']是上傳表單的名字.tmp_name,name和size分別是這個檔案的臨時檔案地址(包括檔案名稱),源檔案
名和大小.同樣大小也需要轉換為整形
下面判斷上傳的檔案是否達到我們的大小要求:
if($upload_file_size > $maxFileSize)
{
//這裡做錯誤處理
}
最後拷貝我們的檔案到目的目錄:
if (!copy($upload_file,$tmpFileDir.$upload_file_name))
{
//這裡做複製失敗處理
}
4.下面是Action類,這個類就和普通的Action一樣,裡面可以做一些檔案上傳後的處理,也可以直接重新導向
到上傳成功的頁面.
5.將你的ActionForm和Action配置到phpmvc-config.xml中去,運行一下試試吧!