在php中,通常通過表單來實現文件上傳,這個時候就需要用到
<form method="POST" enctype="multipart/form-data" action="upload.php"> <input type="file" name="file"/> <input type="submit" value="上傳"/> </form>
當表單被提交后,服務器端的upload.php文件中就可以使用
<?php if (isset($_FILES['file']) && $_FILES['file']['error'] == 0) { // 文件上傳成功 } else { // 文件上傳失敗 } ?>
可以看到,
除了直接上傳文件,我們還可以通過編寫php代碼來實現文件上傳。比如下面這個例子,我們可以用
<?php if(isset($_POST['submit'])){ $file_name = $_FILES['file']['name']; $file_tmp =$_FILES['file']['tmp_name']; $file_size = $_FILES['file']['size']; $file_ext=strtolower(end(explode('.',$_FILES['file']['name']))); $extensions= array("jpeg","jpg","png"); if(in_array($file_ext,$extensions)=== false){ echo "擴展名不支持,請上傳 JPEG 或 PNG 文件。"; } if($file_size >2097152){ echo '文件大小不能超過2MB'; } $new_file_name = time().".".$file_ext; move_uploaded_file($file_tmp,"uploads/".$new_file_name); echo "文件已上傳到uploads目錄下。"; } ?>
可以看到,在上述代碼中,
再舉一個例子,假設我們有一個數據庫表,用于存儲用戶上傳的頭像照片,每個用戶只能上傳一張照片。那么我們可以通過
<?php // 連接數據庫 $db = mysqli_connect('localhost', 'root', 'password', 'test'); // 判斷文件是否上傳成功 if (isset($_FILES['avatar']) && $_FILES['avatar']['error'] == 0) { // 判斷文件類型是否合法 $allowed_types = array('jpeg', 'png'); $file_ext = strtolower(pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION)); if (in_array($file_ext, $allowed_types)) { // 讀取文件內容 $avatar = file_get_contents($_FILES['avatar']['tmp_name']); // 查詢該用戶是否已上傳頭像 $user_id = $_POST['user_id']; $query = "SELECT * FROM users WHERE id = $user_id"; $result = mysqli_query($db, $query); $user = mysqli_fetch_assoc($result); if ($user['avatar']) { // 更新已有頭像 $query = "UPDATE users SET avatar = '$avatar' WHERE id = $user_id"; } else { // 插入新頭像 $query = "INSERT INTO users (id, avatar) VALUES ($user_id, '$avatar')"; } mysqli_query($db, $query); } else { echo '僅支持上傳 JPEG 或 PNG 文件。'; } } else { echo '文件上傳失敗。'; } ?>
在以上代碼中,我們首先連接數據庫,判斷文件是否上傳成功,如果上傳成功則讀取文件內容,并查詢該用戶是否已上傳頭像。如果用戶已上傳頭像,則更新已有頭像;如果用戶未上傳頭像,則插入新頭像。同時,代碼中還對文件類型進行了校驗,以保證上傳的文件符合規范。
總之,