Upload File dengan PHP


PHP dapat digunakan meng-upload file ke server.

Buat Form Upload-File

Untuk memberikan kesempatan user dapat  meng- upload files dari suatu form dapat sangat bermanfaat

/Perhatikan form HTML berikit  :

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

Catatan berikut tentang form HTML di atas:

  • enctype attribute dari  tag <form>  spesifikasi bagaimana  type komponen yang digunakan  bila  mengirimkan form. “multipart/form-data”  digunakan bila form memerlukan data binary, seperti komponen file, yang akan di upload
  • type=”file” attribute dari tag <input>  spesifikasi dimana  input akan diproses sebagai sebuah file. Contoh, bila ditampilkan di browser, akan ada suatu browse-button di sebelah kanan  field input

Note: Memberikan  izin kepada sembarang user untuk meng- upload file mempunyai resiko yang besar. Hanya mengijinkan para pemakai dipercayai untuk melaksanakan file uploads.

Buat Script Upload

file “upload_file.php” berisi code untuk upload  file:

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

Dengan menggunakan global PHP $_FILES array anda dapat  upload files dari client computer ke remote server.

Parameter pertama dari form masukan nama dan yang kedua index dapat juga “nama”, “type”, “size”, “tmp_name” atau “error”. seperti berikut:

  • $_FILES[“file”][“name”] – nama file yang di upload
  • $_FILES[“file”][“type”] – type file yang di upload
  • $_FILES[“file”][“size”] – ukuran dalam bytes file yang di upload
  • $_FILES[“file”][“tmp_name”] – nama copy file sementara  dari file yang akan disimpan diserver
  • $_FILES[“file”][“error”] – kode error yang dihasikan dari file upload

Ini cara sangat sederhana untuk  meng upload files. Untuk menjamin keamanan , anda harus tambahkan pembatasan  apa dan siap yang diizinkan untuk meng- upload.
 

Pembatasan pada Upload

Pada script ini kita menambahlan beberapa pembatasan ke file upload. User hanya boleh meng-upload  file .gif atau .jpeg dan ukuran file harus dibawah  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 "Error: " . $_FILES["file"]["error"] . "<br />";     }   else     {     echo "Upload: " . $_FILES["file"]["name"] . "<br />";     echo "Type: " . $_FILES["file"]["type"] . "<br />";     echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";     echo "Stored in: " . $_FILES["file"]["tmp_name"];     }   } else   {   echo "Invalid file";   }
?>

Note: untuk IE untuk recognize file jpg , type harus  pjpeg, untuk FireFox harus  jpeg.

Menyimpan File Upload

Contoh diatas membuat salinan sebuah file sementara  dari file yang di upload. pada PHP folder temp berada pada server.

copy file sementara  akan dihapus ketika script berakhir. Untuk menyimpan file yang di upload kita harus mengcopynya persis sama ke lokasi yang berbeda:

<?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 "Return Code: " . $_FILES["file"]["error"] . "<br />";
     }
else     {     echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
    if (file_exists("upload/" . $_FILES["file"]["name"]))
   {       echo $_FILES["file"]["name"] . " already exists. ";       }
     else       {       move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
       echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
       }     }   } else   {   echo "Invalid file";   } ?>

script di atas memeriksa apakan file sudak ada, Jika tidak, akan menyalin file ke folder yang ditentukan.

Note: Simpan Contoh ini  dengan nama “upload”

46 Tanggapan

  1. thanks yah kebetulan lagi butuh banget nih

  2. thank yawh , tapi masih kurang niwh !!!
    gw butuh yang lebih detail !!

  3. bagus ni tutor-nya tapi mirip dgn manualnya php

  4. Mas, trus gimana caranya klo kilta mo pake metode uplod ini ke webhosting? Disana ntar kan ada FTP akses dan lain sebagainya.. ?

    Zulidamel:
    Fasilitas cpanel dll adalah untuk admin. password untuk ini sangat rahasia jangan sekali kali diketahui olh orang lain. Bagaimana kalau kita menginginkan user dapat mengirimkan data ke web kita dalam bentuk file, tentunya user tersebut tidak akan kita beri izin untuk mengakses cpanel. skrip upload inilah yang kita sisipkan pada halaman web kita agar user dapat mengirim file yang kita inginkan.

  5. mau nanya :
    biar upload file-nya aman gmn?
    kan kl cnth di atas…file d masukin k folder “IMAGE”
    berarti kan bs d akses langsung dari address browser

    trz biar aman gimana???
    bs gak kl d masukin k dbase MySql ???

    plisss…help bth bgt neh 😀 tengkyu

  6. thanx mas…
    kebetulan aku lagi nyari cara upload file ne…

  7. wah.. thanks berat nih infonya… berguna buangettt

  8. ini versi bahasa inggrisnya dari http://www.w3schools.com/php/php_file_upload.asp bisa anda buka

  9. Salam…

    Saya juga pakai mekanisme upload yg seperti ini nih! tapi bermasalah ketika saya juga meng-include-kan variable global : $_SESSION[‘name’].

    Saya mengupload file dengan sintax : move_uploaded_file($_FILES[‘uploadedFile’][‘tmp_name’], $target_path), dengan $target_path =”upload/”; tapi gagal melulu!!!

    Ketika saya echo $_FILES[‘file’][‘name’], dia tidak keluar. Tapi apabila saya tidak menginclude-kan variable global $_SESSION[‘name’] nama file yg saya echo melalui echo $_FILES[‘file’][‘name’] keluar. Apakah ada crash antara variable global $_SESSION[‘name’] dengan $_FILES[‘file’][‘name’]??

    Mohon pencerahannya.
    Terima kasih

    Zb:
    Kalau hal ini terjadi pada web hosting tentunya anda harus konsultasi dengan provider anda. Kemunggkinan sengaja tidak diaktifkan mengingat faktor keamanan.
    Kalau pada intranet anda, periksa setting variable global, Session pada php.ini dan juga hak akses user yang anda gunakan untuk login ke web server terhadap folder tempat anda menyimpan file upload dan Temp folder untuk menuliskan file sementara.

    • gungz gimana kalo script nya di ganti menjadi seperti ini

      move_uploaded_file($_FILES[‘uploadedFile’][‘tmp_name’], $target_path.$_FILES[“file”][“name”]);

      oia saya mw tanya,, gmina cara nya filie yg di upload di simpan di server dengan nama yg berbeda dari sebelumnya di komputer client?
      misal:
      di client namanya : word.doc
      stelah di upload, tersimpan di server dengan nama : 1.doc

      ZB:
      Saya tidak punya script seperti yang anda maksudkan namun itu dapat saja dilakukan dengan menggunakan suatu word generator yang akan membuat suatu nama berdasarkan kondisi tertentu.

      • Dalam kasus tertentu memang diperlukan upload file kemudian file tersebut di ganti/rename.
        Misalkan pada web page profile user sudah ada file image nya, kemudian user tsb di beri hak akses untuk ganti foto tersebut, maka file yg di upload oleh user tersebut harus langsung diganti nama filenya, sehingga terbaca lagi oleh web page profile user.
        Contoh :
        Menampilkan image pada profile user : <img src="photo/.jpg” alt=”” width=”155″ height=”162″>

        Nama file image ditentukan berdasarkan no induk user yg diambil dari data base. maka jika user ingin mengganti file image nya, harus langsung diganti dengan nama file yg sesuai dgn no. induk user. Untuk itu setelahnya dilakukan upload file langsung diganti nama filenya.
        Script proses upload bisa seperti ini :

        $move = move_uploaded_file($_FILES[‘file’][‘tmp_name’], ‘photo/’.$fileName); //Proses upload diarahkan ke folder photo

        if($move){

        $fileName = $_FILES[‘file’][‘name’]; //Mengetahui nama file
        $fileSize = $_FILES[‘file’][‘size’]; //Meengetahui Ukuran file
        $fileError = $_FILES[‘file’][‘error’]; // Result : Sukses : error ‘0’, Gagal : Error ‘1’
        $file2=$_POST[‘nik’]; // Ambil No induk user yg di Post dari form awal
        $eks=$_FILES[‘type’]; // ambil ekstensi file
        $Awal = “photo/$fileName”; // nama awal file di save di folder photo
        $Baru = “photo/$file2.$eks”; // perubahan nama file diambil dari no induk user di save di folder photo

        $ren=rename($Awal, $Baru); // Proses rename / ganti nama file setelah file berada di server

        Dalam implementasinya tentunya sangat kondisional, tergantung hak akses di server. Script di atas lebih terfokus bgmana file yg di upload bertujuan untuk di baca oleh web page profile user. Saya yakin para SUHU di sini bisa memberikan solusi terbaik.

        Mudah-mudahan bermanfaat

        Wassalam

  10. salam…
    mas, saya mau nanya, cara ngebaca file yang sudah di upload gimana caranya, saya udah pernah coba untuk nampilan isi file document dengan fungsi fread, ko ga bisa ngebaca isi file documentnya ya hasilnya cuma resourceid#7 gitu ,…. tolong pencerahannya…trims

    Zb:
    Untuk membaca file di internet menggunakan browser dengan menunjukan alamat file tersebut secara lengkap. Bila browser tidak support dengan type file misalnya .doc .zip . rar dll maka browser akan mengaktifkan aplikasi yang dibutuhkan dari komputer anda seperti Word untuk .doc, winzip untuk .zip, winrar untuk .rar dll. Ada yang langsung bisa dibaca dan ada pula yang harus di download terlebih dahulu.

    Kasus yang kamu temui adalah masalah fungsi PHP untuk membaca isi suatu file. Saya tidak tahu bagaimana bentuk script PHP yang kamu tulis sehingga tidak dapat mengetahui kesalahan terjadi dimana. Bila kamu yakin bahwa script yang kamu tulis sudah benar dan type file yang akan dibaca support dengan fungsi php, kemungkinan upload yang telah dilakukan gagal. sehingga script yang anda tugaskan untuk membaca suatu file tidak dapat menemukan file yang anda maksudkan.

  11. kemarin aku coba upload di server.. kok klietan warning gini :

    Warning: move_uploaded_file(../images/Winter.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/nanoni01/public_html/nano/nn-admin/save_image.php on line 27

    klo mau ngeliat permissionnya dimana ya mas ? sorry neh. gak kebiasa pake linux

  12. untuk melihat permisson lakukan perntah pada konsole :
    root>ls -l
    untuk kasus herbiyu, untuk merubah permisson lakukan perintah :
    root> chmod 777 /home/nanoni01/public_html/nano/nn-admin

    • mas icun, gmana ya cara nya agar setiap file yg kita upload ke server linux langsung mempunya permission 777,, jd ga ush di set set satu2 dengan menggunakan chmod

      ZB:
      Itu dapat diatur pada script upload namun karena sudah lama tidak menggunakan saat ini tidak dapat kasih tahu anda…

  13. makasih pas bgd ma tgsQ

  14. mau tanya dunk, kan kiki mau upload file nih, filenya sih cuma 1 MB gitu. tapi kalo upload pake program yang kiki bikin, selalu gagal untuk upload ke server nya.

    Tapi kalo kiki coba upload dilocalhost kiki sendiri bisa. itu yang jadi masalah apa yach. Maksimal File Upload di server kiki dah digedein jadi 10 MB. tapi tetep ngga’ mau… tolong donk

  15. saya mau nanya nih..
    misalanya folder tempat kita meng-upload file itu mau dibatasain ukuran isi nya caranya gmn ya??
    misalnya folder uploadnya hanya bisa menerima total 10MB jika besar dari ukuran folder tersebut lbh dari 10MB maka proses upload akan di tolak…
    tolong bantuan nya…

    NB: ini utk besar ukuran folder bukan besar ukuran file…

    THX
    ZB:
    Mohon ma’af saya tidak dapat menjelaskannya pada anda, namun yang pasti fasilitas ini terdapat pada aplikasi server. umumnya digunakan oleh provider. Kalau dalam PHP saya belum menemukannya.

  16. kalo upload file doc or pdf bisa nggak?

    Zb:
    Bisa ?.. Namun ternyata untuk doc bukanlah type data yang dikenal PHP. ada namanya sendiri kebetulan saya lupa. Mudahnya jangan kamu beri pembatasan.

  17. Stored in: C:\wamp\tmp\php6F.tmp Invalid file Invalid file
    itu kenapa ya??? tolong dibantuuu

  18. makasih bget mas atas sharing nyaa

  19. Mas, saya juga butuh script upload, tp buat image. sy sudah donlut beberapa skrip, tp klo saya coba g bs jalan. saya ingin buat buku tamu, tp pakai upload foto, dan tersimpan di database mysql. ada referensi???

    ZB:
    Permasalahan upload bukan hanya script untuk itu namun beberapa hal menyangkut internet security. Masalah foto adalah pembatasan jenis data. bisa ditentukan oleh scripnya dan bisa juga pembatasan oleh provider. Biasanya tidak disimpan dalam database melainkan pada lokasi tertentu dan alamat tersebut yang disimpan dalam database.

    Saya belum punya referensi untuk menyimpan foto dalam database mysql?…

  20. thanx a lot…

    this is very-very useful…

    thank you

  21. Kalo boleh tahu, Berapa sih ukuran maximal files yang bisa diupload? Cos, q pernah nyoba if ($_FILES[‘file’][‘size’] > 3000000)
    {

    }

    File berukuran 2,7 MB gak bisa keupload.

    Mohon pencerahan and jika bisa lebih besar dari 20 MB, gimana caranya…??

    ZB:
    Hal itu ditentukan pada setting Website bisa jadi itu dilakukan dengan software tertentu, namun PHP sendiri juga punya fasilitas untuk menentukan ukuran file yang dapat di upload yang ditempatkan pada php.ini

  22. Itu masih offline lho…
    Trus size limit yang dikasih PHP brapa…?
    Blum sempat liat, dah keburu liburan. kalo mang ada softwarenya, apa namanya…?? masangnya di web gimana..??

    Sory banyak nanya..!! Cos pengen bisa.. PHP nih…

    Thanx……

    ZB:
    Cari sendiri dong dalam file PHP.INI. Ngak bisa inggris ya? saya juga ngak namun kalau sekedar membaca buku panduan dalam bahasa inggrise bisa dong!

  23. mas
    saya ngak pake linuxe…

    saya pake windows, terus saya sudah hosting di 000webhost.com

    fread() dan fclose() scriptnya eror, seting di bagian mana neh, mohon masukan nya, kirim ke email saya, saya ucapkan terima kasih…

    ZB:
    Setting pada hak accsess forder yang anda gunakan untuk Upload file melalui control panel yang digunakan profider anda?….

  24. Wah hebat… isi nya sama persis dengan yang W3Schools tapi dibuat penjelasan bahasa indonesia 😀

    Thanks buat penjelasan nya 🙂

  25. maz thanks ya..
    aq lagi butuh neh..
    bisa dicoba neh..

  26. Tanks y………ane butuh banget nih

  27. Ni yg versi bahasa inggrisnya : http://www.w3schools.com/PHP/php_file_upload.asp . wkwkwkk….

  28. klo pake php oracle/oci gmn..??
    saya tuh dah bisa upload file tpi downloadx gagal mulu nie..
    tolongin y..penting bgt nie.

    ZB:
    Ma’af saya belum dapat identifikasi penyebab kegagalan kamu…, mungkin yang lain bisa bantu silahkan!..

  29. mas mo nanya neh aku udah ubah settingan di php.ini tentang maksimum file post ku tambahin sampe 40mega tapi tetep aja file 3,4 mega gak bisa ke upload. solusinya dunk
    aku localhost pake zend core

    ZB:
    Sulit sekali menentukannya, karena terlalu banyak permasalahannya yang dapat menyebabkan hal-hal seperti itu. Ma’af saya tidak dapat bantu secara online

  30. mas kl mau dioverwrite gmana caranya ya?????????

  31. Scriptnya Percis sama yang di w3school baik urutan dan nama2 variablenya

    ZB:
    Sebagian besar Memamg terjemahan bebas dari website tsb.

  32. TUTORIAR ini Hasil COPY PASTE dari sini

    http://www.w3schools.com/PHP/php_file_upload.asp

    ZB:
    Mas Klenix!… terimakasih anda telah membantu saya untuk memberitahukan teman anda yang sama telminya dengan anda. Coba anda lihat Jawaban saya pada cooment di atas dan daftar tutorial di kiri bawah serta coba pula anda baca abautme tujuan saya menulis blog ini. Bila anda masih tidak ngerti juga yang saya maksud maka otak anda perlu di Kir

  33. Trims bos…. 🙂

  34. To: Master/Suhu. Gimana cara upload file yang menggunakan chmod. Misal ketika script di jalankan maka chmod folder di rubah menjadi 777. Dan ketika upload berhasil chmod folder menjadi 755. Thanks-Demi keamanan data hosting!!!.

    ZB:
    Mohon maaf saya belum mempunyai reference untuk hal ini. Namun kayaknya aneh juga, bila uploader bisa merubah status chmod berarti status tersebut sudah tidak ada fungsinya.

  35. Wahhh,, mantaps nih, sebenarnya aku lagi nyari function upload untuk framework cakephp tapi gak dapet,, jadi ya oake function upload php standar deh, he

  36. saya sudah coba
    tapi kok tombol bwosenya kalau di klik ga ada respons apa apa ya???

    ZB:
    Perhatikan apahakah ada tanda baca yang tertinggal. mungkin tanda titik koma.

  37. trima ksih ats bantuannya mas bro,,,

  38. mas saya mau nanya klau ngupload script php ke html biar mudah di gunakan caranya gmn? soale saya punya script php bingung cara menjalankanya. tolong kirim k email saya
    d134_joker@yahoo.com thank banget…….
    ZB:
    Ma’af saya tidak tahu script html untuk upload. Menurut saya tidak ada karena kita tahu bahwa html menciptakan web statis.

  39. Kalau cara memasukkan ke web, gimana ya? saya membuatnya pakai xampp ?

    Untuk Web local tinggal dicopy ke folder yang anda tunjuk sebagai folder web sedangkan bila anda menggunakan web hosting sebaiknya anda gunakan aplikasi Http misalnya Fezilla atau upload menggunakan cpanel.

  40. Terimakasih kebetulan lagi butuh, tapi masih ada yang kurang. Gimana caranya supaya fotonya bisa ditampilkan ?

    Terimakasih

    ilham

  41. mantep banget mas 🙂
    saya lagi nyari-nyari tutorial ini.
    makasi mas.

  42. mas cara integrasikan modul tersebut menjadi satu gimana caranya?

  43. mas tolong di bantu.. saya mengalami kesulitan saat move_uploaded_file
    pemindahan data dengan ext .pdf dari direktori file dimana file itu diambil dari folder asal untuk di pindahkan ke folder yang telah di targetkan.
    file tersebut tidak bisa pindah ke folder target mas.

Tinggalkan Balasan ke syafi Batalkan balasan