Upload files
<?php
$html = <<< HEREDOC
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>檔案上傳</title>
</head>
<body>
<h1>檔案上傳</h1>
<form name="form1" method="post" action="upload_save.php" enctype="multipart/form-data">
upload_input.php
Upload files
<input type="hidden" name="MAX_FILE_SIZE" value="500000">
檔案:<input type="file" name="file"><br>
<input type="submit" value="上傳">
</form>
</body>
</html>
HEREDOC;
echo $html;
?>
限制上傳檔案大小
需要設定檔案大小,及格式(為了安全)
Upload files
<?php
$a_file = $_FILES["file"]; // 上傳的檔案內容
// 系統設定的錯誤訊息
$upload_errors = array(
UPLOAD_ERR_INI_SIZE => '上傳檔案大小超過系統限制。',
UPLOAD_ERR_FORM_SIZE => '上傳檔案大小超過HTML表單限制。',
UPLOAD_ERR_PARTIAL => '檔案上傳不完整。',
UPLOAD_ERR_NO_FILE => '沒有選擇檔案上傳。',
UPLOAD_ERR_NO_TMP_DIR => '沒有暫存資料夾,請通知管理員。',
UPLOAD_ERR_CANT_WRITE => '檔案無法寫入磁碟,請通知管理員。',
UPLOAD_ERR_EXTENSION => '因副檔名限制無法上傳,請通知管理員。',
);
upload_save.php
Upload files
// 管理者自訂的上傳規則
$allow_ext = array("jpg", "gif"); // 設定可接受上傳的檔案類型
$allow_size = 500 * 1024; // 限制接受的檔案大小 (此處設定為 500K)
$allow_overwrite = false; // 限制不能覆蓋相同檔名 (若接受,則相同檔名時會覆蓋舊檔)
$path = "file/"; // 指定存檔的資料夾
// 判斷能否存入,若無則建立新的資料夾
if(!is_dir($path))
{
mkdir($path);
}
upload_save.php
Upload files
// 實際上傳的檔案資料
$file_name = $a_file["name"];
$tmp=explode(".", $a_file["name"]);
$file_ext = end($tmp); // 最後一個小數點後的文字為副檔名
$file_size = $a_file["size"]; // 檔案大小
$file_type = $a_file["type"];
$file_tmp = $a_file["tmp_name"];
$file_error = $a_file["error"];
upload_save.php
Upload files
// 指定儲存的檔名
$save_filename = $path . $file_name;
$save_filename = iconv("utf-8", "big5", $save_filename); // 處理中文檔名時需轉換
// 上傳檔案處理
$msg = '';
$check_ok = true;
if($file_error==UPLOAD_ERR_OK && $file_size>0) // 先確認有檔案傳上來後再做處理
{
// 檢查副檔案是否可以接受
if(!in_array(strtolower($file_ext), $allow_ext))
{
$check_ok = false;
$msg .= '不允許為此類型的檔案。<BR>';
}
upload_save.php
Upload files
// 檢查是否已有相同檔案存在
if (!$allow_overwrite)
{ if(file_exists($save_filename))
{ $check_ok = false;
$msg .= $file_name . ' 檔案已存在,無法儲存。<BR>'; }
}
// 檢查檔案大小是否在限制之內
if($file_size > $allow_size)
{ $check_ok = false;
$msg .= '檔案大小超過限制。<BR>'; }
upload_save.php
Upload files
// 檢查檔案是真地透過HTTP POST上傳
if(!is_uploaded_file($file_tmp))
{
$check_ok = false;
$msg .= '非此次上傳之檔案,無法處理。<BR>';
}
// 檢查完畢,上傳的最後處理
if( $check_ok )
{
if (@move_uploaded_file($file_tmp, $save_filename))
{
$msg .= '檔案上傳成功:' . $file_name;
upload_save.php
Upload files
}
else
{
$msg .= '不明的原因,檔案上傳失敗。<BR>';
}
}
}
else
{
$msg .= '錯誤……' . $file_error . "=>" . $upload_errors[$file_error] . '<BR>';
}
upload_save.php
Upload files
$html = <<< HEREDOC
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>檔案上傳</title>
</head>
<body>
<p><a href="upload_input.php">回前頁</a></p>
<h2>檔案上傳結果</h2>
<p>{$msg}</p>
</body>
</html>
HEREDOC;
echo $html;
?>
upload_save.php