Php Move Uploaded File to Tmp File
Indonesian (Bahasa Indonesia) translation by Febri Ardian Sanjoyo (you can also view the original English article)
Dalam artikel ini, saya akan menjelaskan basic upload file dalam PHP. Pertama, kita akan membahas opsi konfigurasi PHP yang harus ada untuk pengunggahan file yang sukses. Setelah itu, kita akan mengembangkan contoh dunia nyata tentang cara upload file.
Konfigurasikan Pengaturan PHP
Ada beberapa pengaturan konfigurasi PHP yang Anda ingin periksa terlebih dahulu untuk pengunggahan file yang sukses. Di bagian ini, kita akan membahas setiap opsi yang penting terkait pengunggahan file PHP. Opsi-opsi ini dapat dikonfigurasi dalam file php.ini.
Jika Anda tidak yakin di mana menemukan file php.ini Anda, Anda dapat menggunakan php_ini_loaded_file()
untuk menemukannya. Cukup buat file PHP di server Anda dengan baris berikut, dan buka dari browser.
<?php repeat php_ini_loaded_file(); ?>
Berikut adalah kutipan dari file setup dengan beberapa default yang berguna.
; Whether to let HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files. ; Will use organization default if not set. ;upload_tmp_dir = ; Maximum immune size for uploaded files. upload_max_filesize = 16M ; Maximum number of files that tin be uploaded via a single request max_file_uploads = 20 ; Maximum size of Post data that PHP volition accept. post_max_size = 20M max_input_time = threescore memory_limit = 128M max_execution_time = 30
Pengaturan kunci
file_uploads
Value darifile_uploads
directive harus disetel ke On
untuk memungkinkan pengunggahan file. Nilai default dari direktif ini adalah On
.
upload_max_filesize
Upload_max_filesize
direktive memungkinkan Anda untuk mengkonfigurasi ukuran maksimum yang diupload. Secara default, ini diatur ke 2M
(dua megabyte), dan Anda dapat mengganti pengaturan ini menggunakan file .htaccess juga. Dua megabyte tidak terlalu banyak menurut standar sekarang, jadi Anda mungkin harus meningkatkan ini. Jika Anda mendapatkan kesalahan bahwa file melebihi upload_max_filesize
ketika Anda mencoba mengunggah file, Anda perlu meningkatkan nilai ini. Jika Anda melakukannya, pastikan juga untuk meningkatkan post_max_size
(lihat di bawah).
upload_tmp_dir
Menetapkan direktori sementara yang akan digunakan untuk menyimpan file yang diunggah. Dalam banyak kasus, Anda tidak perlu khawatir tentang pengaturan ini. Jika Anda tidak mengaturnya, sistem default temp directory akan digunakan.
post_max_size
Direktif post_max_size
memungkinkan Anda untuk mengkonfigurasi ukuran maksimum data Mail. Karena file diunggah dengan permintaan Postal service, nilai ini harus lebih besar dari yang Anda tetapkan untuk perintah upload_max_filesize
. Misalnya, jika upload_max_filesize
Anda 16M
(16 megabyte), Anda mungkin ingin menetapkan post_max_size
menjadi 20M
.
max_file_uploads
Ini memungkinkan Anda untuk mengatur jumlah maksimum file yang dapat diunggah pada suatu waktu. Standarnya adalah 20
, jumlah yang masuk akal.
max_input_time
Ini adalah jumlah maksimum 2d script diizinkan untuk mengurai input data. Anda harus menetapkannya ke value yang wajar jika Anda berurusan dengan upload file besar. 60
(sixty detik) adalah nilai yang bagus untuk sebagian besar aplikasi.
memory_limit
Directivf memory_limit
menunjukkan jumlah maksimum memori yang dapat dikonsumsi script. Jika Anda menghadapi masalah saat mengunggah file besar, Anda harus memastikan bahwa nilai dari direktif ini lebih besar dari yang Anda tetapkan untuk direktif post_max_size
. Nilai default adalah 128M
(128 megabyte), jadi kecuali Anda memiliki post_max_size
yang sangat besar dan upload_max_filesize
, Anda tidak perlu khawatir tentang hal ini.
max_execution_time
Jumlah maksimum detik script diizinkan untuk dijalankan. Jika Anda menghadapi masalah saat mengunggah file besar, Anda dapat mempertimbangkan untuk meningkatkan nilai ini. thirty
(xxx detik) seharusnya berfungsi dengan baik untuk sebagian besar aplikasi.
Sekarang mari kita membangun contoh nyata untuk mendemonstrasikan pengunggahan file dalam PHP.
Membuat Form HTML
Setelah Anda mengonfigurasi pengaturan PHP, Anda siap untuk mencoba kemampuan mengunggah file PHP.
Repositori GitHub kami memiliki beberapa kode contoh yang akan saya bahas di seluruh artikel ini. Jadi, jika Anda ingin ikut, lanjutkan dan unduh dari GitHub.
Kita akan membuat dua file PHP: index.php dan upload.php. File index.php berisi kode yang bertanggung jawab untuk menampilkan class upload file. Di sisi lain, file upload.php bertanggung jawab untuk mengunggah file ke server.
Juga, file akan diunggah di direktori upload_files, jadi Anda perlu memastikan bahwa binder ini ada dan dapat ditulis oleh pengguna web-server
.
Di bagian ini, kita akan membahas bagian-bagian kunci dari file index.php.
Mari kita lihat di file index.php pada GitHub:
<?php session_start(); ?> <!DOCTYPE html> <html> <caput> <title>PHP File Upload</title> </head> <body> <?php if (isset($_SESSION['message']) && $_SESSION['message']) { printf('<b>%south</b>', $_SESSION['message']); unset($_SESSION['message']); } ?> <form method="Mail" action="upload.php" enctype="multipart/form-data"> <div> <span>Upload a File:</span> <input blazon="file" proper noun="uploadedFile" /> </div> <input type="submit" proper name="uploadBtn" value="Upload" /> </form> </body> </html>
Meskipun mungkin terlihat seperti bentuk PHP yang khas, ada perbedaan penting dalam nilai atribut enctype
dari tag <form>
. Ini perlu diatur ke multipart/form-information
karena form berisi file field.
Atribut enctype
menentukan jenis pengkodean yang harus digunakan ketika formulir dikirimkan, dan dibutuhkan salah satu dari tiga value berikut:
-
awarding/x-www-form-urlencoded
: ini adalah nilai default ketika Anda tidak menetapkan nilai dari atributenctype
secara eksplisit. Dalam hal ini, karakter dikodekan sebelum dikirim ke server. Jika Anda tidak memiliki file field dalam formulir Anda, Anda harus menggunakan value ini untuk atributenctype
. -
multipart/course-data
: Ketika Anda menggunakan nilaimultipart/form-data
untuk atributenctype
, ini memungkinkan Anda untuk mengunggah file menggunakan metode POST. Juga, memastikan bahwa karakter tidak dikodekan ketika formulir dikirimkan. -
text/plainly
: Ini umumnya tidak digunakan. Dengan pengaturan ini, data dikirim tanpa dikodekan.
Selanjutnya, kita menampilkan file field, yang memungkinkan Anda memilih file dari komputer Anda.
<input type="file" name="uploadedFile" />
Selain itu, kita telah menampilkan pesan di bagian atas formulir. Pesan ini menunjukkan status unggahan file, dan itu akan di fix dalam variabel session dengan script upload.php. Kita akan melihat lebih lanjut tentang ini di bagian selanjutnya.
<?php if (isset($_SESSION['message']) && $_SESSION['message']) { printf('<b>%s</b>', $_SESSION['message']); unset($_SESSION['message']); } ?>
Jadi itu meringkas file index.php. Di bagian selanjutnya, kita akan melihat cara menangani file yang diunggah di sisi server.
Membuat Logika Upload
Di bagian sebelumnya, kita membuat formulir HTML yang ditampilkan di sisi klien dan memungkinkan Anda untuk mengunggah file dari komputer Anda. Di bagian ini, kita akan melihat mitra sisi server yang memungkinkan Anda menangani file yang diunggah.
Tarik kode dari file upload.php di GitHub. Kita akan membahas bagian penting dari file itu.
Di file upload.php, kita telah memeriksa apakah itu permintaan Postal service yang valid di tempat pertama.
if (isset($_POST['uploadBtn']) && $_POST['uploadBtn'] == 'Upload') { ... }
Di PHP, ketika file diunggah, variabel superglobal $_FILES
diisi dengan semua informasi tentang file yang diunggah. Ini diinisialisasi sebagai assortment dan dapat berisi informasi berikut untuk unggahan file yang sukses.
-
tmp_name
: Jalur sementara tempat file diunggah disimpan dalam variabel ini. -
name
: Nama sebenarnya dari file disimpan dalam variabel ini. - size: menunjukkan ukuran file upload dalam bytes.
-
type
: berisi jenis mime file upload. -
error
: Jika ada kesalahan saat unggahan file, variabel ini diisi dengan pesan error yang sesuai. Dalam kasus pengunggahan file yang berhasil, ini berisi 0, yang dapat Anda bandingkan dengan menggunakan konstantaUPLOAD_ERR_OK
.
Setelah memvalidasi permintaan Post, kita memeriksa bahwa unggahan file berhasil.
if (isset($_FILES['uploadedFile']) && $_FILES['uploadedFile']['error'] === UPLOAD_ERR_OK) { ... }
Anda dapat melihat bahwa variabel $_FILES
adalah array multi-dimensi, elemen pertama adalah nama file field, dan elemen kedua memiliki informasi tentang file yang diunggah, seperti yang baru saja kita bahas di atas.
Jika unggahan file berhasil, kita menginisialisasi beberapa variabel dengan informasi tentang file yang diunggah.
// get details of the uploaded file $fileTmpPath = $_FILES['uploadedFile']['tmp_name']; $fileName = $_FILES['uploadedFile']['proper name']; $fileSize = $_FILES['uploadedFile']['size']; $fileType = $_FILES['uploadedFile']['type']; $fileNameCmps = explode(".", $fileName); $fileExtension = strtolower(end($fileNameCmps));
Dalam cuplikan di atas, kita juga menemukan ekstensi file yang diunggah dan menyimpannya dalam variabel $fileExtension
.
Karena file yang diunggah mungkin berisi spasi dan karakter khusus lainnya, lebih baik untuk membersihkan nama file, dan itu persis yang telah kita lakukan di cuplikan berikut.
$newFileName = md5(time() . $fileName) . '.' . $fileExtension;
Sangat penting bahwa Anda membatasi jenis file yang dapat diunggah ke ekstensi tertentu dan tidak mengizinkan semuanya menggunakan form unggahan. Kita telah melakukannya dengan memeriksa ekstensi file yang diunggah dengan serangkaian ekstensi yang ingin kita izinkan untuk mengunggah.
$allowedfileExtensions = array('jpg', 'gif', 'png', 'zip', 'txt', 'xls', 'dr.'); if (in_array($fileExtension, $allowedfileExtensions)) { ... }
Terakhir, kita menggunakan fungsi move_uploaded_file
untuk memindahkan file yang diunggah ke lokasi spesifik pilihan kita.
// directory in which the uploaded file will be moved $uploadFileDir = './uploaded_files/'; $dest_path = $uploadFileDir . $newFileName; if(move_uploaded_file($fileTmpPath, $dest_path)) { $message ='File is successfully uploaded.'; } else { $message = 'There was some fault moving the file to upload directory. Please make sure the upload directory is writable by web server.'; }
Fungsi move_uploaded_file
membutuhkan dua argumen. Argumen pertama adalah nama file dari file yang diunggah, dan argumen kedua adalah jalur tujuan di mana Anda ingin memindahkan file.
Terakhir, kita mengarahkan pengguna ke file index.php. Juga, kita mengatur pesan yang sesuai dalam variabel session, yang akan ditampilkan kepada pengguna setelah pengalihan dalam file index.php.
Bagaimana Semua Ini Bekerja Bersama
Jangan lupa untuk membuat direktori upload_files dan membuatnya dapat ditulis oleh pengguna spider web-server. Selanjutnya, lanjutkan dan jalankan file alphabetize.php, yang seharusnya menampilkan form pengunggahan file yang terlihat seperti ini:
Klik pada tombol Browse - yang akan membuka kotak dialog yang memungkinkan Anda untuk memilih file dari komputer Anda. Pilih file dengan salah satu ekstensi yang diizinkan di script kita, dan klik tombol Unggah.
Itu harus mengirimkan form, dan jika semuanya berjalan dengan baik, Anda akan melihat file yang diunggah di direktori upload_files. Anda juga dapat mencoba mengunggah file lain dengan ekstensi yang tidak diizinkan, dan memeriksa apakah script kita mencegah upload tersebut.
Kesimpulan
Hari ini, kita membahas dasar-dasar upload file dalam PHP. Di paruh pertama artikel, kita membahas berbagai opsi konfigurasi yang harus ada agar pengunggahan file berfungsi. Kemudian kita melihat contoh dunia nyata yang menunjukkan bagaimana file upload berfungsi di PHP.
Saya harap Anda menikmati artikel ini, dan jangan ragu untuk memposting pertanyaan dan saran Anda di bawah ini!
Source: https://code.tutsplus.com/id/tutorials/how-to-upload-a-file-in-php-with-example--cms-31763
Publicar un comentario for "Php Move Uploaded File to Tmp File"