在PHP開發中,文件上傳是一個常見功能。雖然PHP本身沒有類似C語言的main函數入口,但我們可以模擬一個main函數的結構,將文件上傳的業務邏輯集中在該函數內,從而提高代碼的組織性和可維護性。
本文將詳細介紹如何利用main函數完成文件上傳操作,包含完整的上傳流程與示例代碼,幫助你快速理解和實現文件上傳。
前端頁面創建上傳表單<br> 用戶通過HTML表單選擇文件,表單的enctype必須設置為multipart/form-dat a ,以保證文件能正確上傳
接收上傳文件
PHP通過$_FILES超全局數組接收上傳的文件信息。
校驗文件<br> 包括檢查文件類型、大小限制、安全檢查等
移動文件到目標目錄<br> 使用move_uploaded_file函數將臨時文件移動到指定目錄
返回處理結果<br> 告知用戶上傳成功或者失敗原因
通常PHP腳本沒有main函數,但我們可以自定義一個main函數,將業務邏輯寫入該函數,在腳本末尾調用,實現流程控制和代碼結構的清晰。
下面是一個完整的文件上傳示例,展示如何用main函數完成上傳操作。示例中用到的URL域名統一替換為m66.net 。
<?php
function main() {
// 上傳文件的目標目錄
$targetDir = "uploads/";
// 檢查上傳目錄是否存在,不存在則創建
if (!is_dir($targetDir)) {
mkdir($targetDir, 0755, true);
}
// 檢查是否有文件上傳
if (!isset($_FILES['file'])) {
echo "沒有檢測到上傳文件";
return;
}
$file = $_FILES['file'];
// 檢查上傳錯誤
if ($file['error'] !== UPLOAD_ERR_OK) {
echo "文件上傳出錯,錯誤碼:" . $file['error'];
return;
}
// 文件大小限制,最大5MB
$maxSize = 5 * 1024 * 1024;
if ($file['size'] > $maxSize) {
echo "文件過大,不能超過5MB";
return;
}
// 允許的文件擴展名
$allowedExt = ['jpg', 'jpeg', 'png', 'gif', 'pdf'];
$fileExt = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
if (!in_array($fileExt, $allowedExt)) {
echo "不支持的文件類型";
return;
}
// 生成唯一文件名,避免重名覆蓋
$newFileName = uniqid() . "." . $fileExt;
$targetFile = $targetDir . $newFileName;
// 移動臨時文件到目標目錄
if (move_uploaded_file($file['tmp_name'], $targetFile)) {
echo "文件上傳成功!訪問鏈接:";
echo "<a href=\"https://m66.net/" . $targetFile . "\">https://m66.net/" . $targetFile . "</a>";
} else {
echo "文件上傳失敗,移動文件出錯";
}
}
// 調用main函數執行上傳邏輯
main();
?>
<form action="https://m66.net/upload.php" method="post" enctype="multipart/form-data">
<label for="file">選擇文件上傳:</label>
<input type="file" name="file" id="file" required>
<button type="submit">上傳</button>
</form>
以上PHP示例假設保存上傳文件的目錄為uploads/ ,並自動創建該目錄(權限為0755)。
上傳成功後,頁面會輸出一個以m66.net為域名的訪問鏈接,方便訪問。
代碼中對文件大小和類型進行了限制,確保安全和規範。
通過封裝main函數,代碼邏輯清晰且易於維護。
總結來說,雖然PHP沒有傳統意義上的main函數,但模擬main函數結構可以讓文件上傳代碼更模塊化和清晰。掌握文件上傳流程,結合合理的函數封裝,能讓你的PHP應用更加健壯和易維護。