在PHP中,$_FILES
是一個預定義的全局數組,用于處理通過HTTP文件上傳表單提交的文件。在使用$_FILES
之前,你需要對其進行驗證以確保上傳的文件符合你的要求。以下是一些建議的驗證步驟:
if (isset($_FILES['file'])) {
// 文件已上傳
} else {
// 文件未上傳
}
if ($_FILES['file']['size'] > 500000) {
// 文件大小超過限制(500KB)
}
$allowedTypes = array('image/jpeg', 'image/png', 'application/pdf');
if (!in_array($_FILES['file']['type'], $allowedTypes)) {
// 文件類型不允許
}
if (!move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name'])) {
// 文件移動失敗
}
$filename = basename($_FILES['file']['name']);
$cleanFilename = preg_replace('/[^a-zA-Z0-9._-]/', '', $filename);
if ($cleanFilename != $filename) {
// 文件名包含非法字符,重命名
$newFilename = uniqid('', true) . '_' . $cleanFilename;
rename($_FILES['file']['tmp_name'], 'uploads/' . $newFilename);
}
if (file_exists('uploads/' . $_FILES['file']['name'])) {
// 文件已存在
}
結合以上步驟,你可以對$_FILES
進行驗證。以下是一個完整的示例:
if (isset($_FILES['file'])) {
$allowedTypes = array('image/jpeg', 'image/png', 'application/pdf');
if ($_FILES['file']['size'] > 500000) {
echo "文件大小超過限制(500KB)";
} else if (!in_array($_FILES['file']['type'], $allowedTypes)) {
echo "文件類型不允許";
} else {
$filename = basename($_FILES['file']['name']);
$cleanFilename = preg_replace('/[^a-zA-Z0-9._-]/', '', $filename);
if ($cleanFilename != $filename) {
$newFilename = uniqid('', true) . '_' . $cleanFilename;
rename($_FILES['file']['tmp_name'], 'uploads/' . $newFilename);
}
if (!move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name'])) {
echo "文件移動失敗";
} else {
echo "文件上傳成功";
}
}
} else {
echo "文件未上傳";
}
請注意,這只是一個簡單的示例,你可能需要根據你的需求進行調整。在生產環境中,建議使用更嚴格的驗證方法,例如使用第三方庫(例如Fileinfo)來檢查文件的實際類型,以及使用更安全的文件名處理方法。