Muat Naik Fail PHP

Dengan PHP, fail boleh dimuat naik ke pelayar.

Buat borang muat naik fail

Membenarkan pengguna untuk muat naik fail dari borang adalah sangat berguna.

Lihat borang HTML untuk muat naik fail di bawah ini:

<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Nama Fail:</label>
<input type="file" name="file" id="file" /> 
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>

Perhatikan maklumat berikut tentang borang ini:

Properti enctype bagi label <form> menentukan jenis jenis kandungan yang digunakan semasa menghantar borang. Apabila borang memerlukan data binari, seperti kandungan fail, gunakan "multipart/form-data".

Properti type="file" bagi label <input> menentukan bahawa masukan sepatutnya diproses sebagai fail. Sebagai contoh, semasa di preview di pelayar, akan lihat butang pilih di sebelah kotak input.

Komen:Membenarkan pengguna untuk muat naik fail adalah risiko keselamatan yang besar. Hanya membenarkan pengguna yang dipercayai untuk melaksanakan operasi muat naik fail.

Buat skrip muat naik fail

Failah "upload_file.php" mengandungi kod untuk muat naik fail:

<?php
if ($_FILES["file"]["error"] > 0)
  {
  echo "Ralat: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Unggah: " . $_FILES["file"]["name"] . "<br />";
  echo "Jenis: " . $_FILES["file"]["type"] . "<br />";
  echo "Saiz: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Di simpan di: " . $_FILES["file"]["tmp_name"];
  }
?>

Dengan menggunakan array global PHP $_FILES, anda boleh muat naik fail dari komputer pelanggan ke pelayan jauh.

Parameter pertama adalah input name untuk borang, parameter kedua boleh adalah "name", "type", "size", "tmp_name" atau "error". seperti ini:

  • $_FILES["file"]["name"] - Nama fail yang diupload
  • $_FILES["file"]["type"] - Jenis fail yang diupload
  • $_FILES["file"]["size"] - Saiz fail yang diupload, diukur dalam byte
  • $_FILES["file"]["tmp_name"] - Nama salinan sementara fail yang disimpan di pelayan
  • $_FILES["file"]["error"] - Kod ralat yang disebabkan oleh muat naik fail

Ini adalah cara muat naik fail yang sangat mudah. Berikutan pertimbangan keselamatan, anda seharusnya menambahkan had untuk apa pengguna yang berhak untuk muat naik fail.

Had muat naik

Dalam skrip ini, kami menambahkan had untuk muat naik fail. Pengguna hanya boleh muat naik fail .gif atau .jpeg, saiz fail mesti kurang daripada 20 kb:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Ralat: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Unggah: " . $_FILES["file"]["name"] . "<br />";
    echo "Jenis: " . $_FILES["file"]["type"] . "<br />";
    echo "Saiz: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Di simpan di: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Fail Tidak Sah";
  }
?>

Komen:Untuk IE, jenis fail jpg mesti adalah pjpeg, untuk FireFox mesti adalah jpeg.

Simpan fail diupload

Contoh di atas membuat salinan sementara fail yang diupload didalam folder sementara PHP pelayan.

Failskrip sementara yang di salin ini akan hilang selepas script selesai. Untuk menyimpan fail yang diupload, kami perlu menyalinnya ke lokasi lain:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Kod Kembalian: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Unggah: " . $_FILES["file"]["name"] . "<br />";
    echo "Jenis: " . $_FILES["file"]["type"] . "<br />";
    echo "Saiz: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Fail Sementara: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " sudah wujud. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Di simpan di: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Fail Tidak Sah";
  }
?>

Skrip di atas mengesan sama ada fail ini sudah wujud atau bukan, jika tiada, fail akan disalin ke folder yang ditentukan.

Komen:Contoh ini menyimpan fail ke dalam folder baru yang dinamakan "upload".