Presentation is loading. Please wait.

Presentation is loading. Please wait.

檔案上傳 所謂檔案上傳,就是將檔案由客戶端的主機,藉 由瀏覽器傳送到伺服器的資料夾上。

Similar presentations


Presentation on theme: "檔案上傳 所謂檔案上傳,就是將檔案由客戶端的主機,藉 由瀏覽器傳送到伺服器的資料夾上。"— Presentation transcript:

1 檔案上傳 所謂檔案上傳,就是將檔案由客戶端的主機,藉 由瀏覽器傳送到伺服器的資料夾上。
在網頁中將檔案由客戶端上傳到伺服器中,其中要經歷的 過程如下: 在表單檔案欄位選取要上傳的檔案。 表單送出,將檔案傳送到伺服器。 伺服器在接收的過程中,先將接收到的檔案放置在暫存資料 夾中。 傳送完畢後將完整的檔案搬移到指定的網頁資料夾中。

2 檔案上傳 參數調整 在使用檔案上傳的功能前,對於 PHP 的執行環境要進行以 下的檢查及調整。 是否允許上傳 file_uploads=On
請開啟允許網頁伺服器允許上傳的設定: 暫存檔資料夾 upload_temp_dir=“C:\Windows\Temp” 在檔案上傳到網頁伺服器時會先放在暫存資料夾,完成 後才搬到指定資料夾。若沒有設定暫存資料夾會造成上 傳失敗,若在 Windows 系統中您可以參考以下設定: 可接受上傳檔案大小 upload_max_filesize= 8M 在 <php.ini> 中預設的大小為 2MB,建議您可以調整為 8MB 到 10MB 之間,適用於大部份的需求。

3 檔案上傳 表單 上傳檔案的表單,有幾個重要的注意事項:
在 <form> 標籤中「action」屬性必須設定要接收檔案的 PHP 程式檔。 在 <form> 標籤中,傳送方式屬性必須要設定為「method="post"」,因為檔案上傳的表單的傳送一定要使用 POST 的方法。 在 <form> 標籤中,因為傳送檔案所以要設定傳遞時資料的編碼方式,這裡要加上「enctype="multipart/form-data"」的屬性,才能正確地讓檔案欄位送出。 上傳的檔案欄位為 <input> 標籤,屬性必須設定「type="file"」,如此即可在使用時出現 瀏覽 鈕,讓使用者選取要上傳的檔案。

4 接收上傳檔案 在程式端接收到檔案,並不是馬上將檔案放置 到指定的資料夾中,而是先將檔案儲存成暫存 檔,在完成檔案傳輸後再將檔案搬移到指定資 料夾。 取得暫存檔資訊 您可以使用 $_FILES 取得暫存檔的資訊,參 考次頁:

5

6 上傳檔案範例 upload.html <form action="upload.php" method="post" enctype="multipart/form-data"> 請選取要上傳的檔案:<br /> <input type="file" name="fileUpload" /><br /> <input type=“submit” value=“上傳檔案” /> <input type=“reset” value=“重設”/> </form>

7 上傳檔案範例 upload.php <?php if($_FILES[" fileUpload "]["error"]==0) {
$tmpName = $_FILES[" fileUpload "]["tmp_name"]; $fileName = "./" . $_FILES[" fileUpload "]["name"]; if(move_uploaded_file($tmpName, $fileName)) { echo "上傳成功<br />"; echo "檔案名稱:" . $_FILES[" fileUpload "]["name"] . "<br />"; echo "檔案類型:" . $_FILES[" fileUpload "]["type"] . "<br />"; echo "檔案大小:" . $_FILES[" fileUpload "]["size"] . "<br />"; } else { echo "上傳失敗! "; echo "<a href='javascript:window.history.back();'>回上一頁</a>"; } ?>

8 move_uploaded_file( )
$tmpName = $_FILES[" fileUpload "]["tmp_name"]; $fileName = "./files/" . $_FILES[" fileUpload "]["name"]; if(move_uploaded_file($tmpName, $fileName)) { }

9 上傳檔名中文問題 中文版的伺服器若使用 Big5 編碼,但網 頁送過來資料卻是以 UTF8 編碼,將導致 編碼錯誤,檔案上傳失敗。
解決之道: iconv("UTF-8" , "big5" , $utf8FileName) $tmpName = $_FILES["fileUpload"]["tmp_name"]; $fileName = "./files/" . iconv("UTF-8" , "big5" , $_FILES["fileUpload"]["name"]); if(move_uploaded_file($tmpName, $fileName)) { }

10 Restrictions on Upload
$arrTypes =array ("image/gif", "image/png", "image/jpeg", "image/pjpeg"); if (in_array($_FILES["pic"]["type"], $arrTypes) && ($_FILES["pic"]["size"] < )) { if ($_FILES["pic"]["error"] > 0) { echo "Error: " . $_FILES["pic"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["pic"]["name"] . "<br />"; echo "Type: " . $_FILES["pic"]["type"] . "<br />"; echo "Size: " . ($_FILES["pic"]["size"] / 1024) . " Kb<br />"; echo "Stored in: " . $_FILES["pic"]["tmp_name"]; // Move file … else { echo "Invalid file"; ?>

11 檢查檔案是否已存在 if (file_exists("files/" . $_FILES["pic"]["name"])) {
echo $_FILES["pic"]["name"] . " already exists. <br/>"; } else { move_uploaded_file($_FILES["pic"]["tmp_name"], "files/" . $_FILES["pic"]["name"]); echo "Stored in: " . "files/" . $_FILES["pic"]["name"];

12 $arrTypes =array ("image/gif", "image/png", "image/jpeg", "image/pjpeg");
if (in_array($_FILES["pic"]["type"], $arrTypes) && ($_FILES["pic"]["size"] < )) { if ($_FILES["pic"]["error"] > 0) { echo "Error: " . $_FILES["pic"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["pic"]["name"] . "<br />"; echo "Type: " . $_FILES["pic"]["type"] . "<br />"; echo "Size: " . round(($_FILES["pic"]["size"] / 1024),2) . " Kb<br />"; echo "Stored in: " . $_FILES["pic"]["tmp_name"] . "<br/>"; if (file_exists("files/" . $_FILES["pic"]["name"])) { echo $_FILES["pic"]["name"] . " already exists. "; move_uploaded_file($_FILES["pic"]["tmp_name"], "files/" . $_FILES["pic"]["name"]); echo "Stored in: " . "files/" . $_FILES["pic"]["name"]; echo "Invalid file";

13 imgUpload.html imgUpload.php

14 多檔上傳 若您有上傳多個檔案的需求,在表單欄位佈置上也必 須在表單名稱後加上[]左右括號,讓表單欄位以陣列 方式傳送。
在接收時以 $_FILES 陣列方式接收即可完成。但是要 注意的是這個陣列是二維陣列 例如 第一個檔案: 暫存檔名稱:$_FILES[欄位名稱] ["tmp_name"][0] 原始名稱:$_FILES[欄位名稱]["name"][0] 第二個檔案: 暫存檔名稱:$_FILES[欄位名稱]["tmp_name"][1] 原始名稱:$_FILES[欄位名稱]["name"][1]

15 多檔上傳範例 <form action="php_file10.php" method="post" enctype="multipart/form-data"> 請選取要上傳的檔案:<br /> 檔案一:<input type="file" name="fileUpload[]" /><br /> 檔案二:<input type="file" name="fileUpload[]" /><br /> 檔案三:<input type="file" name="fileUpload[]" /><br /> <input type="submit" value="送出資料" />

16 多檔上傳範例 <?php $cnt=count($_FILES["fileUpload"]["name"]);
for ($i=0;$j<$cnt;$i++) { if ($_FILES["fileUpload"]["error"][$i]==0) { if (move_uploaded_file($_FILES["fileUpload"]["tmp_name"][$i], "./files/".$_FILES["fileUpload"]["name"][$i])) { echo $_FILES["fileUpload"]["name"][$i]."上傳成功!<br />"; } else { echo $_FILES["fileUpload"]["name"][$i]."上傳失敗!<br />"; } ?>


Download ppt "檔案上傳 所謂檔案上傳,就是將檔案由客戶端的主機,藉 由瀏覽器傳送到伺服器的資料夾上。"

Similar presentations


Ads by Google