Komputer, Jenis file
PHP: upload file ke server
Men-download file melalui PHP - kasus yang sangat menarik, yang harus didekati dengan sangat hati-hati. Di Internet Anda dapat menemukan banyak contoh pelaksanaan file upload, tetapi tidak semua dari mereka adalah baik dan memenuhi peraturan keselamatan.
hal tersebut perlu untuk membawa ke kesimpulan, bahkan jika itu membutuhkan waktu yang lama. Jika Anda meninggalkan celah dalam kode, maka seluruh server Anda dapat dikompromikan.
keselamatan
Dengan PHP upload file ke server dilakukan cukup mudah. Kode ini sangat singkat dan sederhana. Hanya beberapa baris. Namun, metode ini berbahaya. Lebih banyak waktu dan baris kode ke tempat aman.
Bahayanya adalah bahwa, jika Anda tidak melakukan inspeksi, setiap penyerang bisa meng-upload script mereka pada server Anda. Dalam hal ini, ia akan memiliki akses penuh. Dia bisa melakukan apapun yang dia inginkan:
- menghapus database;
- menghapus file situs;
- memodifikasi file situs;
- menambahkan iklan Anda ke situs web Anda;
- men-download virus;
- mengarahkan semua pengguna di situs mereka;
- dan banyak hal lain yang datang ke pikiran penyerang.
Anda harus selalu memeriksa yang mencoba untuk men-download file bagi pengguna. Misalnya, jika Anda meng-upload gambar saja, perlu untuk memverifikasi bahwa file tersebut adalah gambar akurat. Jika tidak, Anda akan men-download sesuatu.
Tepat bagaimana menerapkan verifikasi, akan ditampilkan, dengan script pemeriksaan langsung untuk meng-upload file.
Menciptakan bentuk PHP
bentuk file upload sangat sederhana. Hilang tombol browse dan meng-upload tombol.
Menjelaskan cara membuat bentuk-bentuk tidak akan, karena mudah. instruksi lebih lanjut berasumsi bahwa Anda sudah memiliki konsep dasar HTML (jika tidak, anda tidak akan mencari informasi tentang download di PHP).
Tetapi perhatikan bahwa data dalam bentuk Anda perlu menambahkan atribut enctype.
Jika tidak, data pada file handler tidak akan menular.
Bagaimana harus bekerja?
Setelah itu akan diminta untuk menerima path di mana file itu berada.
Jika jalan tidak muncul, melakukan aksi lagi.
Setelah mengklik pada handler file download dapat memberikan informasi apapun.
Misalnya, Anda dapat menulis garis yang menyatakan bahwa file tersebut "begitu dan begitu" nama telah berhasil diupload ke folder "ini dan itu". Tentu saja, nama file akan diberikan selalu berbeda.
Biasanya, informasi ini digunakan untuk kode debug. Jadi adalah mungkin untuk memverifikasi bahwa data yang ditransmisikan dan menulis terjadi pada direktori yang diinginkan. Artinya, bahkan nama file tidak diindikasikan. Sejak informasi tambahan ini bahwa pengguna tidak perlu.
Masuk akal untuk output nama hanya jika pengguna mendownload beberapa file. Seperti ini terjadi, mempertimbangkan sedikit lebih jauh. Mari kita tidak maju dari diri kita sendiri.
pengaturan
Dalam file PHP upload ke server memerlukan pengaturan tertentu, yang harus dilakukan dalam file php.ini. File ini berisi banyak pengaturan. Mereka semua kita tidak perlu. Kami tertarik pada tiga baris: file_uploads, upload_tmp_dir dan upload_max_filesize.
Harap dicatat bahwa pengaturan ini akan mempengaruhi semua situs Anda di server, bukan hanya salah satu. Oleh karena itu, untuk mengatur ukuran maksimum didasarkan pada kenyataan bahwa Anda harus memuat pengguna. Hal ini tidak dianjurkan untuk mengatur terlalu besar.
Setelah Anda mengubah nilai dalam parameter ini, Anda harus me-restart server. Jika pengaturan tidak akan berpengaruh, karena mereka membaca pada saat beban server.
Anda dapat melakukan ini di konsol dengan menghubungkan melalui SSH ke server. Cukup masukkan perintah layanan httpd restart, dan kemudian pengaturan akan berlaku.
Metode lain - restart melalui ISP-panel atau melalui penyedia panel penagihan.
File Array
Dalam PHP file upload dilakukan dengan array $ _FILES. Ini berisi semua informasi tentang file yang kita download.
Untuk melihat informasi apa yang terkandung dalam array, cukup untuk menulis dalam penangan berkas berikut.
Pilih file dan klik "Upload." Pada halaman handler akan menampilkan informasi yang disimpan dalam $ _FILES. variabel yang seluruhnya ditulis dengan huruf kapital. PHP - bahasa-sensitif.
Seperti yang Anda lihat, dalam array ini memiliki banyak bidang. Semua dari mereka adalah penting bagi kami. Field pertama berisi nama file dalam bentuk yang digunakan pada komputer Anda.
Jenis kolom yang ditentukan jenis file. bidang Tmp_name sesuai dengan nama file sementara. Setelah akhir script akan dihapus.
Bidang galat kode kesalahan. Ini adalah sedikit lebih jauh. Ukuran - ukuran dalam bytes.
kesalahan
Dilakukan melalui file upload PHP selalu disertai dengan kode kesalahan. Pesan kesalahan masuk dalam "kesalahan". Kesalahan screenshot adalah nol.
Mempertimbangkan nilai semua kesalahan:
Berikut ini adalah contoh formulir untuk men-download file, yang menunjukkan batas jumlah file upload.
PHP: upload file naskah
Karena semua dilakukan dalam praktek? Dalam PHP upload file terjadi copy perintah. Jika Anda tertarik pada pertanyaan tentang bagaimana untuk men-download file, jawabannya adalah cipta sederhana, yang menggunakan dua parameter - file sumber dan file tujuan.
Tapi, seperti disebutkan di atas, tidak dapat dibatasi untuk alasan keamanan. Misalnya, memeriksa apa jenis file yang kita kapal, Anda dapat menggunakan jenis lapangan di array $ _FILES. Pertama, mari kita berurusan dengan inspeksi, dan kemudian beralih ke script penuh
Katakanlah Anda ingin memungkinkan pengguna untuk meng-upload foto dengan resolusi hanya GIF, JPEG atau PNG. Menunjukkan itu bisa seperti ini.
if ($ _ FILES [ 'file_upload'] [ 'type']! = "image / gif") {
echo "Maaf, kami mendukung hanya mendownload Gif-Files";
exit;
}
Jika Anda ingin kapal semua 3 jenis, cukup menambahkan kondisi tambahan dengan jenis lain dari gambar.
Menyalin dilakukan seperti ini: copy (image 1, gambar 2).
Dalam kasus kami, ketika pekerjaan adalah men-download dari PC ke server, Anda dapat melakukannya
copy ($ _ FILES [ 'file_upload'] [ "tmp_name"], "1.jpg")
Artinya, file tersebut akan disalin dengan nama 1.jpg. Hal ini tidak sepenuhnya benar. Dalam hal ini, hanya sebuah contoh. Nama file selalu diperlukan untuk menentukan yang berbeda, dan menentukan ekstensi, tergantung pada file tersebut.
Menentukan ekstensi dapat cara yang berbeda. Itu semua tergantung pada pengembang pengetahuan. Salah satu cara tercepat untuk (perbedaan persepuluh detik) menentukan ekstensi - ini adalah kode berikutnya.
$ PATH_INFO = pathInfo ($ _ FILES [ 'photo1'] [ "nama"]);
$ Ext = $ PATH_INFO [ 'extension'];
Variabel $ ext kita akan menyimpan ekstensi yang diinginkan. Nama file dapat diatur secara acak menggunakan md5. Jika Anda berencana untuk men-download banyak file, lebih baik untuk kapal mereka ke folder yang berbeda. Sehingga akan lebih nyaman. Secara khusus, jika Anda ingin membersihkan.
untuk men-download kode akan sebagai berikut.
/// Dengan foto
if ($ _FILES [ 'photo1'] [ 'tmp_name'] == null)
{
echo ( "
file tidak dikenal. strong> p> Kembali ... p> "); exit; } ///. Katakanlah Anda untuk setiap proyek di server diperbolehkan untuk memuat file besar (video), tetapi hanya ada gambar, dan pengguna harus membatasi if (($ _FILES [ "photo1"] [ "size"]> 1024 * 1024 * 2) { ?> maksimum yang diizinkan ukuran 2 MB strong> Kembali ... p> exit; } // membuat folder // membuat folder dari bulan berjalan if (! file_exists ( "img /". date ( "M"))) { mkdir ( "img /" date ( "M").); } // membuat folder dari hari ini if (! file_exists ( "img /". date ( "M"). "/". date ( "d"))) { mkdir ( "img /" date ( "M") "/" date ( "d") ...); } /// ekstensi file $ PATH_INFO = pathInfo ($ _ FILES [ 'photo1'] [ "nama"]); $ Ext = $ PATH_INFO [ 'extension']; /// menghasilkan nama file $ Id = md5 (date ( "Ymd")); jika (copy ($ _ FILES [ 'photo1'] [ "tmp_name"], "img /". date ( "M"). "/". date ( "d"). "/". $ id. $ ext) ) { echo ( "File berhasil diupload"); } /// tindakan lebih lanjut (masuk dalam database, dan sebagainya. N.) } Meng-upload beberapa file (PHP) terjadi dengan cara bidang tambahan dalam bentuk. Metode ini sangat tidak baik, karena membatasi jumlah file untuk men-download. Selain itu, dianggap bentuk buruk dalam pemrograman. Cobalah untuk melakukan segala sesuatu yang dinamis. Pilihan ideal - itu adalah pilihan dari sejumlah besar file sekaligus dengan menekan satu tombol. Untuk melakukan hal ini, membuat bentuk seperti kode ini. beberapa file
P>
Form>
Perhatikan bahwa penambahan beberapa kata, dan nama yang diberikan sebagai array []. Dalam hal ini, $ _FILES array akan sedikit berbeda. Anda akan mendapatkan sebuah array dari array.
Untuk menguji lagi dapat menggunakan var_dump ($ _ FILES);
Semua file Anda akan ditempatkan dalam array seperti ini:
- $ _FILES [ "file1"] [ "nama"] [0]
- $ _FILES [ "file1"] [ "nama"] [1]
- Dan sebagainya.
Dalam kurung ditulis jumlah file dalam array. Menghitung dari nol. Kami memperlakukan mereka dengan cara yang sama, hanya meminta siklus dan dengan menghubungi kode diuraikan di atas pada akhir indeks menambahkan [$ i].
$ I = 0;
sementara ($ _FILES [ "file1"] [ "nama"] [$ i] <> '')
{
/// paste kode di atas
}
Dengan demikian, Anda akan harus terjadi melalui upload file PHP ke server dalam satu siklus tanpa pengulangan yang tidak perlu dari kode, seperti yang biasanya terjadi jika Anda menggunakan versi dengan sejumlah statis file (foto terakhir).
Similar articles
Trending Now