Unggah file ke folder php. Kirim file secara efisien menggunakan PHP. Tahapan upload file ke server

Bagaimana cara mengunggah file ke server menggunakan PHP? Pada artikel ini kita akan melihat masalah ini secara rinci dengan contoh.

Formulir HTML untuk mengirimkan file

Hal pertama yang perlu Anda ketahui untuk mengunggah file ke server adalah fitur formulir HTML yang mengirimkan file.

Berikut adalah contoh kode HTML untuk formulir ini:

Formulir unggah file



Yang unik dari formulir ini:

  1. Tag formulir harus berisi atribut enctype="multipart/form-data. Atribut ini menunjukkan bahwa formulir akan mengirimkan file. Secara default, atribut enctype diatur ke application/x-www-form-urlencoded .
  2. Form harus berisi atribut tersembunyi (type='hidden') dengan nama MAX_FILE_SIZE yang nilainya (value) menunjukkan ukuran file. Secara teori, browser harus melaporkan ketika file berukuran terlalu besar, namun dalam praktiknya browser tidak mendukung hal ini. Saya pikir atribut ini dapat dihilangkan.
  3. Untuk memilih file yang akan ditransfer, gunakan tag input yang memiliki atribut type="file" .

Setelah server menerima permintaan HTTP dari formulir tersebut, server menulis file ke folder sementara di server.

Jika Anda ingin file disimpan ke direktori lain pada tahap ini, tentukan di direktif upload_tmp_dir pada file php.ini.

Untuk memindahkan file yang diunggah ke lokasi baru, gunakan fungsi move_uploaded_file.

Namun sebelum kita mulai bekerja dengan fungsi ini, kita harus memeriksa array dua dimensi $_FILES, yang melaluinya kita mengakses karakteristik file yang diunggah.

Jadi, setelah skrip menerima data formulir dengan file yang ditransfer, skrip tersebut menulis file tersebut ke dalam folder khusus, dan menulis data tentang file tersebut ke dalam array dua dimensi $_FILES .

Mari kita lihat contoh yang menampilkan isi array $_FILES di layar.

Formulir unggah file


"; ) lain ( gema "
", print_r($_FILES), "
"; } ?>

Inilah yang kami dapatkan dari skrip ini:

Gambar.1. susunan $_FILES.

Sekarang mari kita lihat apa yang terkandung dalam array ini.

Array $_FILES dua dimensi kita memiliki satu elemen, filename . Ini adalah nilai bidang nama dari elemen formulir:

Data untuk file ini:

  • $_FILES["nama file"]["nama"] - nama file;
  • $_FILES["nama file"]["tipe"] - jenis file;
  • $_FILES["filename"]["tmp_name"] - path lengkap ke direktori sementara pada disk;
  • $_FILES["filename"]["error"] - berisi kode kesalahan, yaitu 0 jika operasi berhasil;
  • $_FILES["nama file"]["ukuran"] - ukuran file.

Dimungkinkan untuk menentukan dua bidang untuk file dalam formulir, misalnya seperti ini:


Dalam hal ini, array kita akan terlihat seperti ini:


Gambar.2. susunan $_FILES.

Jadi, sekarang kita tahu bagaimana struktur array $_FILES dan langkah selanjutnya adalah meletakkan file yang dihasilkan di lokasi yang kita butuhkan.

fungsi move_uploaded_file

Seperti yang sudah saya tulis, fungsi move_uploaded_file digunakan untuk memindahkan file yang diupload ke lokasi baru.

Sintaks dari fungsi move_uploaded_file adalah:

move_uploaded_file (dari mana transfer, kemana transfer)

Fungsi move_uploaded_file mengembalikan nilai boolean:

  • BENAR - jika berhasil,
  • SALAH - jika argumen pertama adalah file yang dimuat, tetapi karena alasan tertentu tidak dapat dipindahkan ke lokasi yang ditentukan, maka tidak ada tindakan yang diambil.

Mari gunakan fungsi ini sebagai contoh:

Formulir unggah file


"; ) else ( move_uploaded_file ($_FILES["nama file"]["tmp_name"], __DIR__ . DIRECTORY_SEPARATOR . $_FILES["nama file"]["nama"]); ) ?>

Skrip ini memindahkan gambar ke folder yang sama dengan tempatnya. Untuk melakukan ini, kami menggunakan konstanta bawaan PHP untuk menentukan jalur:

  • __DIR__ - salah satu konstanta "ajaib", berisi direktori file.
  • DIRECTORY_SEPARATOR adalah konstanta standar yang berisi pemisah jalur. Untuk OS Windows adalah “\”, untuk OS Linux dan lainnya adalah “/”.

Catatan: Jika file yang dihasilkan sudah ada, maka akan ditimpa.

fungsi is_uploaded_file

Ada satu fungsi lagi yang harus digunakan saat bekerja dengan mengupload file ke server. Ini adalah fungsi is_uploaded_file dan digunakan untuk alasan keamanan.

is_uploaded_file - Menentukan apakah file diunggah menggunakan HTTP POST dan mengembalikan TRUE jika demikian.

Penggunaan fungsi ini berguna untuk memastikan bahwa pengguna jahat tidak mencoba mengelabui skrip agar bekerja dengan file yang tidak seharusnya - misalnya /etc/passwd.

Harap dicatat: agar fungsi is_uploaded_file berfungsi dengan benar, Anda harus meneruskan jalur ke file pada penyimpanan sementara di server, yaitu argumen seperti $_FILES["filename"]["tmp_name"] , tetapi nama file yang diunggah di mesin klien ($_FILES[" nama file"]["nama"]) tidak berlaku di sini.

Contoh skrip terakhir kami yang menangani formulir pengiriman file akan terlihat seperti ini:

Formulir unggah file


"; ) else ( // Periksa apakah file sudah diunggah if(is_uploaded_file($_FILES["nama file"]["tmp_name"])) ( // Jika file berhasil diunggah, pindahkan // dari direktori sementara ke yang terakhir move_uploaded_file ($_FILES ["nama file"]["tmp_name"], __DIR__ .DIRECTORY_SEPARATOR .$_FILES["nama file"]["nama"] else ( echo("Kesalahan memuat file"); ) ) ? >

Membatasi ukuran file

Dalam beberapa kasus, Anda perlu membatasi ukuran file yang dapat diunggah ke server. Misalnya, untuk mengizinkan hanya file berukuran tidak lebih dari 3 MB yang dapat diunggah ke server, skrip di atas berisi kode:

1024*3*1024) ( echo("Ukuran file melebihi tiga megabyte"); keluar; ) ... ?>

Ukuran maksimum file unggahan juga dapat diatur menggunakan direktif upload_max_filesize di file php.ini. Nilai default arahan ini adalah 2 MB:

$upload_max_filesize) ... ?>

Pengaturan PHP.ini untuk mengupload file ke server

Jadi, kita belajar tentang direktif upload_max_filesize dari file php.ini, yang menetapkan ukuran maksimum file yang diunggah. Apa arahan lain dalam file php.ini yang bertanggung jawab untuk mengunggah file ke server?

Omong-omong, jika Anda ingin mengetahui di mana file php.ini Anda berada, jalankan skrip:

Nah, daftar directive pada file php.ini:

  • file_uploads - kemampuan untuk melarang atau mengizinkan pengunggahan file ke server secara keseluruhan, diaktifkan secara default (nilai Aktif).
  • post_max_size - batas atas umum pada ukuran data yang dikirimkan dalam permintaan POST. Jika Anda perlu mentransfer beberapa file secara bersamaan, atau bekerja dengan file besar, ubah nilai arahan ini. Nilai defaultnya adalah 8MB.
  • upload_max_filesize adalah arahan yang telah kita diskusikan. Jangan lupa ubah juga post_max_size bila perlu.
  • upload_tmp_dir - direktori sementara di server tempat semua file yang diunggah akan ditempatkan.

Itu saja yang ingin saya sampaikan kepada Anda tentang topik "Mengunggah file ke server dalam PHP".

Pasti Anda sering mengunggah berbagai file ke situs web. Misalnya, mengunggah avatar di forum, foto di jejaring sosial, berbagai video di situs hosting video, hanya file di layanan file hosting. Dan di artikel ini Anda akan mengetahuinya cara mengunggah file ke server di PHP. Itu sudah selesai PHP dalam banyak kasus inilah yang diterapkan.

Hal pertama yang perlu Anda pahami adalah diri Anda sendiri bentuk HTML, tempat file dimasukkan tidak boleh biasa-biasa saja, berikut ini contohnya kode HTML formulir ini:





Poin kuncinya di sini adalah atribut " enctype"dengan makna" multipart/formulir-data". Tanpanya, tidak ada yang akan berhasil.

", di mana kami belum akan mengunduh file tersebut, tetapi akan membahas sedikit berbagai poin penting yang harus diperhatikan, jika tidak, keamanan dapat terganggu:

print_r($_FILES);
?>

Hasilnya, Anda akan melihat isinya array dua dimensi global $_FILES:

  • nama- nama file yang diunduh.
  • jenis - Tipe MIME file yang diunduh. Ini mungkin parameter paling penting untuk memastikan keamanan. Dan selalu saat menerima file Anda perlu memeriksanya Tipe MIME, jika tidak, Anda tidak akan mendapat masalah. Pada artikel selanjutnya kita akan membicarakan hal ini lebih detail.
  • tmp_nama- jalur fisik ke file sementara. Di tempat inilah file ditempatkan, dan baru kemudian kami mentransfernya ke lokasi lain. Sebenarnya file tersebut sudah terdownload dan kita tinggal memindahkannya ke folder yang diinginkan di server.
  • kesalahan- kode kesalahan. Jika 0 , maka tidak ada kesalahan.
  • ukuran- ukuran file yang diunduh. Ini juga merupakan opsi yang sering digunakan, dan juga perlu dicentang batasi ukuran file yang diunggah. Tentu saja, ukuran ini dibatasi oleh server itu sendiri, namun untuk semua jenis gambar, ukuran ini jelas terlalu tinggi (biasanya 10 MB).

Dan semua parameter ini ada untuk setiap file yang dimuat (masing-masing merupakan array dalam array dua dimensi $_FILES).

Sekarang mari kita selesaikan dengan mengunggah file ke server dalam PHP, dan untuk ini kita akan menulis kode berikut (""):

$uploadfile = "gambar/".$_FILES["nama tertentu"]["nama"];
move_uploaded_file($_FILES["nama_some"]["tmp_name"], $uploadfile);
?>

Artinya, pertama-tama kita atur path ke file yang diunduh di server. Di sini kita ingin menempatkan file di direktori " gambar" dengan nama yang sama dengan file sebelumnya. Dan fungsinya pindahkan_upload_file() kami memindahkan file ke direktori pilihan kami dari penyimpanan sementara.

Namun perlu diingat, ini sangat penting! Dalam situasi apa pun Anda tidak boleh menggunakan kode dengan cara ini, jika tidak, situs Anda akan melakukannya Akan ada bahaya yang serius! Faktanya, saat ini apa pun dapat diunduh: file apa pun yang dapat dieksekusi, skrip, halaman HTML dan hal-hal lain yang sangat berbahaya. Oleh karena itu, Anda harus memeriksa file yang diunggah ke server dengan sangat hati-hati. Dan inilah yang akan kita lakukan di artikel berikutnya. Karena topiknya sangat penting, saya menyarankan Anda untuk berlangganan pembaruan agar tidak ketinggalan artikel ini.

Saya senang melihat Anda di halaman situs saya. Hari ini kita akan berbicara tentang implementasi pengunggahan file ke server. Topiknya cukup menarik karena... Banyak pemula yang tertarik dengan pertanyaan ini.

Mengunggah file ke server menggunakan PHP akan sangat memudahkan pekerjaan Anda dalam mengisi galeri foto atau mendesain halaman website menggunakan editor (misalnya KecilMCE). Anda juga dapat mengunggah semua jenis file ke server berdasarkan tugas Anda.

Untuk mengunggah file ke server, Anda perlu membuat formulir untuk mengunggah file. Pada prinsipnya form ini tidak jauh berbeda dengan form biasa dengan kolom teks, kecuali itu jenis tidak akan ada teks, A mengajukan(karena kami mengunggah file) dan atribut akan ditambahkan ke formulir itu sendiri enctype="multibagian/form-data". Ketik menentukan jenis pengkodean yang diterapkan browser ke parameter formulir.

PHP - Mengunggah file ke server sendiri

Demo: Mengunggah file ke server

Unggah foto Anda ke server

Kami telah membuat formulir unggah file; sekarang saatnya menulis penangan sederhana untuk mengunggah file ke server. Mari kita tentukan segera bahwa kita hanya akan memuat file grafik dengan tipe jpeg, png, gif. Setelah kita menentukan jenis file yang akan diunggah ke server, kita perlu membuat folder di server itu sendiri tempat kita akan meletakkan file kita. Dalam contoh saya, ini adalah folder gambar, kita akan meletakkan file kita di dalamnya.

"Tidak ada kesalahan yang terjadi, file berhasil diunggah ke server.", 1 => "Ukuran file yang diterima melebihi ukuran maksimum yang diperbolehkan, yang ditentukan oleh direktif upload_max_filesize dari file konfigurasi php.ini.", 2 => "Ukuran file yang diunggah melebihi nilai MAX_FILE_SIZE yang ditentukan dalam bentuk HTML.", 3 => "File yang diunduh hanya diterima sebagian.", 4 => "File tidak diunduh.", 6 => " Folder sementara tidak ada. Ditambahkan di PHP 4.3.10 dan PHP 5.0.3 "); //Mendefinisikan jenis file yang akan diunggah $fileTypes = array("jpg" => "image/jpeg", "png" => "image/png", "gif" => "image/gif");//Jika tombol upload ditekan if(isset($_POST["upload"])) ( //Periksa apakah data kosong atau tidak if(!empty($_FILES)) ( //Periksa kesalahan if($ _FILES["files" ]["error"] > 0) $err = $errUpload[$_FILES["files"]["error"]]; //Periksa jenis file yang akan diunggah if(!in_array($_FILES ["files"][" type"], $fileTypes)) $err = "Jenis file ini
", $err); ) ) //Pesan tentang keberhasilan pengunggahan file ke server if(isset($_GET["nama"])) echo "

Mengajukan ".htmlentities($_GET["nama"]) ." berhasil dimuat!

"; //Menampilkan gambar dari direktori $imgDir = array_values(array_diff(scandir($uploadDir), array("..", "."))); for($i = 0; $i< count($imgDir); $i++) { if($i % 2 == 0) echo "
"."\n"; gema " "."\n"; ) gema "

"."\n"; gema " http://".$_SERVER["HTTP_HOST"] ." "; ?>

Setelah kami menulis kode dan memeriksa apakah semuanya berfungsi, seorang pemula mungkin mengalami masalah saat mengunduh file besar. Untuk melakukan ini, Anda perlu menyesuaikan pengaturan PHP.INI

; Waktu eksekusi maksimum untuk setiap skrip dalam hitungan detik max_execution_time = 3000 ; Jumlah waktu maksimum yang dapat dihabiskan setiap skrip untuk menguraikan permintaan data max_input_time = 400 ; Jumlah maksimum memori yang dapat digunakan skrip (8 MB) memory_limit = 500M ; Ukuran maksimum data POST yang akan diterima PHP. post_max_size = 500 juta; Ukuran maksimum yang diperbolehkan untuk file yang diunggah. unggah_max_ukuran file = 200 juta


Apa kesamaan foto dalam album foto online, yang dilampirkan ke email, atau file yang dikirimkan ke aplikasi pemrosesan batch online? Semuanya harus diunggah ke server melalui Internet dari browser web. Memang benar, pengunggahan file merupakan fitur penting di banyak situs dan aplikasi web yang kita gunakan sehari-hari. Pada artikel ini Anda akan mempelajari cara menambahkan dukungan pengunggahan file ke situs web Anda menggunakan PHP.

Persyaratan sebelum mengunggah file

Memproses file yang diunduh adalah proses standar, namun ada beberapa hal kecil yang perlu Anda perhatikan sebelum memulai. Hal pertama yang perlu Anda pastikan adalah PHP telah dikonfigurasi dan memungkinkan Anda mengunggah file. Untuk melakukan ini, Anda harus memeriksa direktif file_uploads di php.ini, dan jika dinonaktifkan, aktifkan.

File_uploads = Aktif

File yang diupload disimpan terlebih dahulu di direktori sementara (tapi jangan khawatir... script PHP Anda nanti bisa memindahkan file tersebut ke lokasi yang lebih sesuai). Lokasi sumber adalah direktori sementara default untuk sistem. Anda dapat menentukan direktori lain menggunakan direktif upload_tmp_dir di php.ini. Apapun itu, ada baiknya untuk memeriksa apakah proses PHP memiliki izin menulis yang benar tergantung pada direktori yang digunakan.

Upload_tmp_dir = "/tmp" tboronczyk@zarkov:~$ ls -l / | grep tmp drwxrwxrwt 13 akar akar 40960 31-08-2011 00:50 tmp

Setelah Anda yakin bahwa konfigurasi memungkinkan server menerima file yang diunggah, Anda dapat fokus pada detailnya dan menambahkan formulir HTML. Sangat penting bahwa elemen Anda

menggunakan metode POST dan menyetel atribut enctype ke multipart/form-data .

Tahapan upload file ke server

Kemungkinan besar, Anda sudah bisa membayangkan bagaimana file diunggah ke server, berdasarkan pengalaman Anda sendiri dan persyaratan yang saya sebutkan di atas.

  • Pengunjung melihat halaman HTML dengan formulir yang ditulis khusus untuk mendukung pengunggahan file;
  • Selanjutnya, dia memberikan file yang ingin dia unduh dan mengklik tombol kirim;
  • Browser mengkodekan file dan mengirimkannya sebagai bagian dari permintaan POST;
  • PHP menerima formulir pengiriman, menerjemahkan file dan menyimpannya di lokasi sementara di server;
  • Skrip PHP tertulis yang bertanggung jawab untuk memproses pesan formulir memeriksa file dan memprosesnya dengan cara tertentu, sering kali memindahkannya dari lokasi sementara ke lokasi permanen di mana file akan disimpan.

Untuk menambahkan dukungan upload file Anda perlu membuat form HTML yang akan disajikan kepada pengguna dan script PHP yang akan menangani file yang diupload di server.

Menambahkan formulir HTML untuk mengunggah file

Formulir HTML menyediakan antarmuka yang melaluinya pengguna memulai pengunggahan file. Harus diingat bahwa unsurnya atribut metodenya harus disetel ke publikasikan dan atribut enctype-nya disetel ke multipart/form-data . Elemen file menyediakan bidang yang digunakan untuk menentukan file yang akan dimuat. Seperti elemen formulir lainnya, penting untuk menyediakan atribut nama sehingga Anda bisa mereferensikannya dalam skrip PHP yang memproses formulir.

Berikut tampilan tata letak formulir unggah file pada umumnya:


Perlu diperhatikan bahwa browser yang berbeda akan merender bidang unggah file secara berbeda. IE, Firefox dan Opera menampilkannya sebagai kotak teks dengan tombol di sebelahnya bertuliskan "Jelajahi" atau "Pilih". Safari menampilkannya seperti tombol yang bertuliskan “Pilih File.” Secara umum, hal ini tidak menjadi masalah karena pengguna telah terbiasa dengan cara bidang tersebut ditampilkan di browser mereka dan mengetahui cara menggunakannya. Namun terkadang, Anda akan menjumpai klien atau desainer yang bersikeras menyajikannya dengan cara tertentu. Jumlah CSS dan JavaScript yang dapat diterapkan pada bidang file sangat terbatas karena pertimbangan keamanan yang diterapkan oleh browser. Mengetik file bisa jadi sulit. Jika penampilan sangat penting bagi Anda, saya sarankan Anda membaca salah satu artikelnya Jenis masukan "Peter-Paul Koch" = "file".

Pergi ke server dan bekerja dengan PHP

Informasi pengunduhan file disediakan menggunakan array multidimensi $_FILES. Array ini memiliki strukturnya sendiri, memberikan nama untuk kolom file dalam bentuk HTML, sama seperti saat bekerja dengan $_GET dan $_POST. Setiap array file kemudian berisi elemen-elemen berikut:

  • $_FILES["myFile"]["name"] - menyimpan nama file asli;
  • $_FILES["myFile"]["type"] - menyimpan tipe mime file;
  • $_FILES["myFile"]["size"] - menyimpan ukuran file (dalam byte);
  • $_FILES["myFile"]["tmp_name"] - menyimpan nama file sementara;
  • $_FILES["myFile"]["error"] - menyimpan kode kesalahan yang diterima sebagai hasil transfer.

Dengan menggunakan fungsi move_uploaded_file(), kita dapat memindahkan file dari direktori sementara ke lokasi permanen. Ini juga merupakan praktik yang baik untuk menggunakannya daripada copy() dan rename() untuk tujuan ini, karena ia melakukan pemeriksaan tambahan untuk memastikan bahwa file tersebut benar-benar diunduh oleh permintaan HTTP POST.

Jika Anda akan menyimpan file dengan nama asli yang diberikan oleh pengguna, Anda disarankan untuk memastikan bahwa file tersebut aman. Nama file tidak boleh mengandung karakter yang mungkin mempengaruhi jalur tujuan, seperti garis miring. Nama file harus unik untuk menghindari menimpa file yang sudah ada dengan nama yang sama (jika aplikasi Anda tidak menyediakannya). Anda dapat memastikan hal ini dengan mengganti karakter apa pun dengan garis bawah, yang bukan huruf, lalu menambahkan angka tambahan jika file dengan nama tersebut sudah ada.

Berikut tampilan menerima dan memproses upload file menggunakan PHP:

Define("UPLOAD_DIR", "/srv/www/uploads/"); if (!empty($_FILES["myFile"])) ( $myFile = $_FILES["myFile"]; if ($myFile["error"] !== UPLOAD_ERR_OK) ( echo "

Telah terjadi kesalahan.

"; exit; ) // pastikan nama file aman $name = preg_replace("/[^A-Z0-9._-]/i", "_", $myFile["name"]); // lakukan tidak menimpa file yang ada $i = 0; $parts = pathinfo($name); while (file_exists(UPLOAD_DIR . $name)) ( $i++; $name = $parts["filename"] . "-" . $i . ". " . $parts["extension"]; ) // simpan file dari direktori sementara $success = move_uploaded_file($myFile["tmp_name"], UPLOAD_DIR .$name); "; keluar; ) // atur izin yang benar untuk file baru chmod(UPLOAD_DIR . $name, 0644 )

Pertama kita pastikan upload file PHP ke server berjalan tanpa kesalahan. Kami kemudian menentukan nama file yang aman seperti yang baru saja saya jelaskan di atas dan kemudian memindahkan file ke direktori tujuannya menggunakan move_uploaded_file() . Terakhir, kita melakukan panggilan chmod() untuk memastikan bahwa file baru memiliki izin yang diperlukan.

Masalah Keamanan

Salah satunya adalah memeriksa jenis file yang diupload, apa yang seharusnya. Mengandalkan nilai $_FILES["myFile"]["type"] atau ekstensi nama file tidak aman karena keduanya dapat dengan mudah dipalsukan. Sebaliknya, gunakan fungsi exik_imagetype() untuk memeriksa konten file dan menentukan apakah file tersebut benar-benar GIF, JPEG, atau salah satu dari beberapa format gambar lain yang didukung. Jika exif_imagetype() tidak tersedia (fungsi ini memerlukan ekstensi Exif untuk diaktifkan), Anda dapat menggunakan getimagesize() . Array yang dikembalikan padanya akan berisi tipe gambar, jika ada yang dikenali.

// periksa file GIF, JPEG atau PNG $fileType = exif_imagetype($_FILES["myFile"]["tmp_name"]); $diizinkan = larik(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG); if (!in_array($fileType, $allowed)) ( // jenis file tidak diperbolehkan...

Untuk file non-gambar, Anda dapat menggunakan exec() untuk memanggil utilitas file unix. itu menentukan jenis file dengan mencari tanda tangan biner yang diketahui di lokasi yang diharapkan.

// periksa file PDF $mime = "application/pdf; charset=binary"; exec("file -bi " .$_FILES["file saya"]["tmp_name"], $out); if ($out != $mime) ( // file bukan PDF ...

Langkah lain yang dapat Anda ambil adalah memberikan batasan ketat pada ukuran keseluruhan permintaan POST dan jumlah file yang dapat diunggah. Untuk melakukannya, tentukan nilai yang sesuai untuk direktif upload_max_size , post_max_size dan max_file_uploads di php.ini. Arahan upload_max_size menentukan ukuran unggahan file maksimum. Selain ukuran unggahan, Anda dapat membatasi ukuran seluruh permintaan POST dengan direktif post_max_size. max_file_uploads adalah arahan baru (ditambahkan di versi 5.2.12) yang membatasi jumlah unggahan file. Ketiga arahan ini membantu melindungi situs Anda dari serangan yang mencoba mengganggu ketersediaannya dengan menyebabkan lalu lintas jaringan atau beban sistem yang padat.

Post_max_size = 8M upload_max_size = 2M max_file_uploads = 20

Langkah ketiga yang dapat Anda lakukan untuk meminimalkan risiko adalah dengan memindai file unduhan Anda dengan pemindai virus. Hal ini penting untuk perlindungan terhadap virus dan malware umum, terutama jika situs Anda bertukar file antara orang yang berbeda, seperti lampiran ke klien email web atau situs berbagi file (legal). Ada ekstensi PHP yang menyediakan akses ke ClamAV, tapi tentu saja Anda dapat memanggil utilitas baris perintah ClamAV dengan cara yang sama seperti yang saya tunjukkan untuk file tersebut.

Exec("clamscan --stdout " .$_FILES["filesaya"]["tmp_name"], $out, $return); if ($return) ( // file terinfeksi...

Menyimpulkan dan menarik kesimpulan

Hari ini Anda mempelajari cara mengkonfigurasi dan mengimplementasikan proses PHP dalam mengunggah file ke server dari situs web atau aplikasi web Anda. Agar pengunggahan berhasil, formulir HTML harus dikirimkan melalui permintaan POST dengan beberapa format data, dan PHP harus mengizinkan pengunggahan seperti yang ditentukan menggunakan direktif file_uploads. Setelah file ditransfer, skrip yang bertanggung jawab untuk memproses unggahan menggunakan informasi yang ditemukan dalam array $_FILES untuk memindahkan file dari direktori sementara ke lokasi yang diinginkan. Saya juga telah membagikan beberapa tindakan pencegahan tambahan yang dapat Anda ambil untuk melindungi diri Anda dan pengguna Anda dari beberapa risiko yang terkait dengan pengunduhan file. Untuk memastikan keamanan Anda, periksa jenis file, terapkan pembatasan ketat pada pemuatan lalu lintas, dan gunakan pemindaian virus.

Bagi yang mungkin tertarik, kode tambahan untuk artikel ini tersedia di GitHub. Anda dapat menelusuri, mengunduh, atau mengkloning repositori dan bermain-main dengan kodenya untuk lebih memahami cara kerja proses pengunggahan file.

Dari penulis: Halo teman teman. Dalam artikel singkat ini Anda akan mempelajari cara membuat formulir unggah file di situs web Anda. Ini akan memungkinkan Anda untuk melampirkan gambar dan file lain ke formulir dan mengirim file ke server, tempat file tersebut akan diproses. Mari kita mulai.

Anda dapat mengunduh file sumber artikel ini dari .

Mari kita mulai dengan membuat formulir yang memiliki kolom untuk mengunggah file. Apa yang harus Anda perhatikan di sini? Pertama, bidang untuk mengirim file harus memiliki tipe khusus - type="file". Kedua, file hanya dapat dikirim dalam isi permintaan, sehingga metode GET untuk mengirim formulir tidak akan berfungsi; Anda hanya perlu menggunakan metode POST - metode = "post". Dan ketiga, formulir memerlukan atribut enctype khusus dengan nilai tertentu - enctype="multipart/form-data". Tanpa atribut ini, file tidak akan terkirim.

Berdasarkan penjelasan di atas, kode kita akan menjadi seperti ini:

< form class = "form-horizontal" method = "post" enctype = "multipart/form-data" action = "file.php" >

< div class = "form-group" >

< label for = "name" class = "col-sm-2 control-label" >Nama berkas< / label >

< div class = "col-sm-8" >

< input type = "text" id = "name" class = "form-control" name = "name" placeholder = "Nama berkas" >

< / div >

< / div >

< div class = "form-group" >

< label for = "file" class = "col-sm-2 control-label" >Mengajukan< / label >

< div class = "col-sm-8" >

< input type = "file" name = "file" id = "file" >

< / div >

< / div >

< div class = "form-group" >

< div class = "col-sm-offset-2 col-sm-8" >

< button type = "submit" id = "submit" class = "btn btn-primary" >Mengirim< / button >

< div > < / div >

< / div >

< / div >

< / form >

Hasilnya, kita akan mendapatkan sesuatu seperti ini:

Bidang untuk mengunggah file tidak terlihat terlalu menarik, namun demikian, ia akan mengatasi tugasnya tanpa masalah: file dapat dilampirkan dan dikirim ke server. Pada artikel selanjutnya kita akan mencoba mendesain kolom unggah file dengan indah, tetapi untuk saat ini mari kita periksa apakah file sedang diunggah. Seperti yang Anda lihat, formulir akan dikirim ke file.php, yang ditentukan dalam atribut tindakan. Mari kita buat file ini.

  • Sergei Savenkov

    semacam ulasan "pendek"... seolah-olah mereka sedang terburu-buru di suatu tempat