PHP : File Upload

Uploading File dengan PHP

Dalam tutorial ini kita akan belajar cara mengunggah file di server jauh menggunakan form HTML dan PHP sederhana. Kalian dapat mengunggah segala jenis file seperti gambar, video, file ZIP, dokumen Microsoft Office, PDF, serta file yang dapat dieksekusi dan berbagai jenis file lainnya.

Langkah 1: Membuat formulir HTML untuk mengunggah file

Contoh berikut akan membuat formulir HTML sederhana yang dapat digunakan untuk mengunggah file.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>File Upload Form</title>
</head>
<body>
    <form action="upload-manager.php" method="post" enctype="multipart/form-data">
        <h2>Upload File</h2>
        <label for="fileSelect">Filename:</label>
        <input type="file" name="photo" id="fileSelect">
        <input type="submit" name="submit" value="Upload">
        <p><strong>Note:</strong> Only .jpg, .jpeg, .gif, .png formats allowed to a max size of 5 MB.</p>
    </form>
</body>
</html>
Langkah 2: Memproses file yang diunggah

Berikut kode lengkap file kita “upload-manager.php”. Ini akan menyimpan file yang diunggah dalam folder “upload” secara permanen serta menerapkan beberapa pemeriksaan keamanan dasar seperti jenis file dan ukuran file untuk memastikan bahwa pengguna meng-upload jenis file yang benar dan dalam batas yang diizinkan.

<?php
// Check if the form was submitted
if($_SERVER["REQUEST_METHOD"] == "POST"){
    // Check if file was uploaded without errors
    if(isset($_FILES["photo"]) &amp;&amp; $_FILES["photo"]["error"] == 0){
        $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
        $filename = $_FILES["photo"]["name"];
        $filetype = $_FILES["photo"]["type"];
        $filesize = $_FILES["photo"]["size"];
    
        // Verify file extension
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if(!array_key_exists($ext, $allowed)) die("Error: Please select a valid file format.");
    
        // Verify file size - 5MB maximum
        $maxsize = 5 * 1024 * 1024;
        if($filesize > $maxsize) die("Error: File size is larger than the allowed limit.");
    
        // Verify MYME type of the file
        if(in_array($filetype, $allowed)){
            // Check whether file exists before uploading it
            if(file_exists("upload/" . $filename)){
                echo $filename . " is already exists.";
            } else{
                move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $filename);
                echo "Your file was uploaded successfully.";
            } 
        } else{
            echo "Error: There was a problem uploading your file. Please try again."; 
        }
    } else{
        echo "Error: " . $_FILES["photo"]["error"];
    }
}
?>

Kalian mungkin bertanya-tanya tentang apa kode ini. Baiklah, mari kita lihat setiap bagian dari contoh kode ini satu per satu untuk memahami proses ini dengan lebih baik.

Penjelasan Kode

Setelah formulir informasi dikirimkan tentang file yang diunggah dapat diakses melalui array superglobal PHP yang disebut $_FILES. Misalnya, formulir unggahan kita berisi bidang pilih file yang disebut foto (yaitu name=”photo”),jika ada pengguna yang mengunggah file menggunakan cara ini, kita dapat memperoleh detailnya seperti nama, jenis, ukuran, nama sementara atau kesalahan apa pun yang terjadi ketika mencoba mengunggah melalui array asosiatif $_FILES[“photo”], seperti ini:

  • $_FILES[“photo”][“name”] – Nilai array ini menentukan nama asli file, termasuk ekstensi file. Itu tidak termasuk file path.
  • $_FILES[“photo”][“type”] – Nilai array ini menentukan tipe MIME dari file.
  • $_FILES[“photo”][“size”] – Nilai array ini menentukan ukuran file, dalam bytes.
  • $_FILES[“photo”][“tmp_name”] – Nilai array ini menentukan nama sementara termasuk full path yang ditugaskan ke file setelah diunggah ke server.
  • $_FILES[“photo”][“error”] – Nilai array ini menentukan kesalahan atau kode status yang terkait dengan unggahan file, mis. itu akan menjadi 0, jika tidak ada error.

Kode PHP dalam contoh berikut hanya akan menampilkan detail file yang diunggah dan menyimpannya dalam direktori sementara di server web.

<?php
if($_FILES["photo"]["error"] > 0){
    echo "Error: " . $_FILES["photo"]["error"] . "<br>";
} else{
    echo "File Name: " . $_FILES["photo"]["name"] . "<br>";
    echo "File Type: " . $_FILES["photo"]["type"] . "<br>";
    echo "File Size: " . ($_FILES["photo"]["size"] / 1024) . " KB<br>";
    echo "Stored in: " . $_FILES["photo"]["tmp_name"];
}
?>