執行個體說明
上傳圖片到伺服器,是程式開發過程中必不可少的一個功能。它不但可以達到圖片共用的目的,而且可以提高網站的訪問量,豐富網站的內容。在本執行個體中,講解如何通過POST方式實現多圖片上傳。
關鍵技術
多檔案上傳的關鍵是如何定義上傳檔案元素的名稱及如何判斷上傳檔案的數量。在本執行個體中,以數組的形式定義上傳檔案的名稱(上傳檔案的名稱是“files[]”)。為了達到可以上傳任意數量圖片(4個圖片以內)的目的,在對上傳檔案進行處理的過程中應用array_filter()函數和回呼函數去除數組中的空元素。
array_filter()函數,用回呼函數過濾數組中的單元,文法如下:
array array_filter(array input[,callback callback])
array_filter()函數依次將input數組中的每個值傳遞到callback函數。如果callback函數返回TRUE,則input數組的當前值會被包含在返回的結果數組中,並且數組的鍵名保留不變。
說明:在回呼函數中不要對數組進行修改操作,例如,增加或者刪除數組中的元素,如果一旦數組改變,那麼此函數的運用也就沒有意義了。如果沒有提供callback()函數,array_filter()將刪除input中所有等值為FALSE的元素。
本執行個體中定義的回呼函數是check(),用於驗證數組中的元素值是否為空白,其文法如下:
代碼如下 |
複製代碼 |
function check($var){//驗證數組的傳回值是否為空白 return($var!=""); }
|
說明:通過POST方法實現多圖片上傳,在建立form表單時,必須指定enctype="multipart/form-data"屬性。如果要通過隱藏欄位MAX_FILE_SIZE的值對上傳檔案的大小進行控制,那麼必須將隱藏放置在上傳檔案的檔案域之前,否則是不會起作用的。
設計過程
(1)建立index.php檔案。添加表單,設定檔案域、提交按鈕,使用POST方法,設定enctype="multipart/form-data",將資料提交到index_ok.php頁,完成多個檔案的上傳操作,其關鍵代碼如下:
代碼如下 |
複製代碼 |
<table width="750"border="0"cellspacing="0"cellpadding="0"> <form action="index_ok.html"method="post"enctype="multipart/form-data"name="form1"> <tr> <td width="100"height="25"align="right"class="STYLE1">內容1:</td> <td width="150"align="center"><input name="files[]"type="text"id="files[]"size="15"></td> <td align="left"><input name="picture[]"type="file"id="pcture[]"size>="30"></td> </tr> <tr> <td height="25"align="right"class="STYLE1">內容2:</td> <td width="center"><input name="files[]"type="text"id="files[]"size="15"></td> <td align="left"><input name="picture[]"type="file"id="pcture[]"size>="30"></td> </tr> <tr> <td colspan="3"align="center"> <input type="image"name="imageField"src="images/bg_09.jpg"> <input type="image"name="imgeField2"src="images/bg_11.jpg"></td> </tr> </form> </table>
|
(2)在index.php檔案中,串連資料庫,讀取資料庫中儲存的資料,實現上傳檔案的分頁輸出。代碼請參考光碟片中的相關內容。
(3)建立index.php檔案擷取表單中提交的資料,將多個檔案儲存體到伺服器中,將檔案的名稱和儲存路徑儲存到資料庫中,其代碼如下:
代碼如下 |
複製代碼 |
<?php header("Content-type:text/html;charset=UTF-8"); //設定檔案編碼格式 include"conn/conn.php"; //包含資料庫連結檔案 if($_POST[files]!=""){ if(! is_dir("./upfile")){ mkdir("./upfile");//建立上傳檔案儲存體檔案夾 } $data=date("Y-m-d H:m:s");//定義時間 function check($var){ //驗證數組的傳回值是否為空白 return($var!="");//如果不為空白則返回數組元素 } $files=array_filter($_POST["files"],"check");//去除數組中空值 $array=array_filter($_FILES["picture"]["name"],"check"); //去除數組中空值 foreach=($aarray as $key=>value){ //迴圈讀取數組中資料 $path='upfile/'.time().$key.strtolower(strstr($value,".")); //定義上傳檔案儲存體位置 move_uploaded_file($_FILES["picture"]["tmp_name"][$key],$path);//執行上傳操作 $query="insert into tb_up_file(file_test,data,file_name)values('$path','$data''$files[$key]')"; $result=mysql_query($query); } echo"<script> alert('圖片上傳成功');window.location.href='index.html';</script>"; } >?
|
秘笈心法
通過偽靜態技術隱藏PHP檔案尾碼。
首先,修改Apache伺服器的設定檔httpd.conf。開啟httpd.conf檔案,定位到如下位置:
代碼如下 |
複製代碼 |
#LoadModule rewrite_module modules/mod_rewrite.so
|
將該項前面的“#”去掉後啟動該項。
然後,尋找httpd.conf檔案,找到其中的AllowOverride項,將它的值都修改為All。儲存並重新啟動Apache伺服器,使修改生效。
最後,在執行個體根目錄下建立.htaccess檔案,實現對PHP檔案尾碼的隱藏操作。.htaccess檔案的代碼如下:
代碼如下 |
複製代碼 |
RewriteEngine On#啟動項 RewriteRule^index.html$ index.php RewriteRule^ndex_ok.html$ index_ok.php RewriteRule^index-([0-9]+)-([0-9]+)-([0-9]+)\.html$ index.php?vv=$1&ljjl=$2&page=$3[L]
|
通過Regex對檔案的尾碼和傳遞的參數進行匹配,完成對PHP檔案尾碼的隱藏操作。