使用PHP上傳檔案是個再基礎不過的功能了,而且相當常用。 此外,在php.ini設定檔中,還可以使用upload_max_filesize以及post_max_size兩個參數來設定上傳檔案的大小限制。
上傳檔案簡介
以下先簡單介紹如何使用PHP上傳檔案:
首先,當然是寫個簡單的上傳用網頁:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>
而PHP程式則如下:
<?php
if ($_FILES["file"]["error"] == UPLOAD_ERR_OK) {
$html = "Upload(name): " . $_FILES["file"]["name"] . "<br />";
$html .= "Type: " . $_FILES["file"]["type"] . "<br />";
$html .= "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
$html .= "Stored in: " . $_FILES["file"]["tmp_name"] . "<br />";
//將上傳成功的檔案放到指定路徑下
$moveRes = move_uploaded_file($_FILES["file"]["tmp_name"],
"/path_for_uploaded_file");
$html .= "Uploaded file is moved to /path_for_uploaded_file". "<br />";
echo $html;
}
else {
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}
?>
程式第一行即檢查檔案是否上傳成功。 UPLOAD_ERR_OK表示上傳成功,而其他錯誤代碼可以參考:http://php.net/manual/en/features.file-upload.errors.php
在php.ini限制上傳檔案的大小
在php.ini設定可以限制上傳檔案的大小: 以下範例設定檔案上傳大小最大不得超過120M。
; Maximum allowed size for uploaded files.
upload_max_filesize = 120M
設定完畢之後,重開httpd伺服器即可生效。
然而,還有另一個地方需要注意的,那就是設定HTTP POST資料量的大小。
; Maximum size of POST data that PHP will accept.
post_max_size = 120M
upload_max_filesize與post_max_size有什麼不同呢? upload_max_filesize是限制一個檔案的大小,而post_max_size是限制一次HTTP POST資料量的大小。
因此,一般來說post_max_size至少要大於等於upload_max_filesize;否則,上傳檔案大小的限制會小於預期。
筆者第一次上傳檔案時,只改了upload_max_filesize(改為120M),卻不知道post_max_size預設只有8M,因此一直遇到「檔案小於120M卻無法正確上傳」的狀況。最後是看了PHP log, 發現PHP警告POST資料超過8M, 上網查詢了一下資料才得以解決。
運用upload_max_filesize與post_max_size兩個參數,還可以設定一些特殊的情況,像是要限制上傳的單一檔案大小10M,不過最多可以一次上傳10個檔案的話,可以這樣設定:
; Maximum allowed size for uploaded files.
upload_max_filesize = 10M
;...
; Maximum size of POST data that PHP will accept.
post_max_size = 100M
即設定post_max_size為100M,而upload_max_filesize為10M就可以了,非常簡單卻實用。
沒有留言:
張貼留言