Memuat file ke server menggunakan PHP. Contoh mengunduh file ke server (unggah) di PHP cara mengunduh file PHP

Tentunya Anda sering unduh berbagai file di situs. Sebagai contoh, avatar yang diunggah di forum, Foto di jejaring sosial, berbagai video di host video, hanya file pada berbagi file. Dan di sini di artikel ini Anda akan belajar cara mengunggah file ke server di PHP. Itu adalah melalui PHP. Dalam kebanyakan kasus, ini diimplementasikan.

Pertama-tama, apa yang harus dipelajari adalah dirinya sendiri Bentuk HTMLdi mana file diganti harus tidak cukup normal, berikut adalah contohnya Kode HTML. Bentuk seperti itu:





Titik kunci di sini adalah atribut " enctipe."Dengan makna" multipart / Form-Data". Tidak akan bekerja tanpa itu.

"Di mana kami masih belum mengunduh file, dan kami akan melewati sedikit pada berbagai titik penting yang harus diperhitungkan, jika tidak, keamanan dapat memengaruhi:

Print_r ($ _ file);
?>

Akibatnya, Anda akan melihat isinya. array Dua Dimensi Global $ _files:

  • nama. - Nama file yang diunduh.
  • tipe - MIME-TYPE. File yang dapat diunduh. Ini mungkin parameter paling penting untuk keamanan. Dan selalu ketika menerima file harus diperiksa MIME-TYPE.Kalau tidak, tidak ada masalah. Pada artikel selanjutnya kita akan membicarakannya secara lebih rinci.
  • tmp_name. - Jalur fisik ke file sementara. Di tempat ini file ditempatkan, dan hanya kemudian kita membawanya ke tempat lain. Bahkan, file sudah dimuat, dan kami hanya perlu memindahkannya ke folder yang diinginkan di server.
  • kesalahan - Kode kesalahan. Jika sebuah 0 , Tidak ada kesalahan.
  • ukuran - Ukuran file yang diunduh. Ini juga merupakan opsi yang sering digunakan, dan juga harus diperiksa batasi ukuran file yang diunduh. Tentu saja, ukuran ini sendiri terbatas, namun, untuk gambar apa pun, ukuran ini jelas melebih-lebihkan (sebagai aturan, dia 10 MB).

Dan semua parameter ini hadir untuk setiap file yang dapat diunduh (masing-masing adalah array dalam array dua dimensi. $ _Files.).

Sekarang mari kita selesaikan unduh file ke server di PHPDan untuk ini kita akan menulis kode seperti itu (""):

$ UploadFile \u003d "Gambar /".$_ file [" Somename "] [" Nama "];
Pindahkan_uploaded_file ($ _ file ["somename"] ["tmp_name"], $ upunggal);
?>

Artinya, pada awalnya kami akan menentukan jalur ke file yang dapat diunduh di server. Di sini kami ingin meletakkan file di direktori " gambar-gambar"Dengan nama yang sama yang ada sebelum file. Dan fungsinya pindahkan_uploaded_file () Kami memindahkan file ke direktori direktori yang dipilih dari penyimpanan sementara.

Namun, perhatikan, itu sangat penting! Jadi gunakan kode tanpa kasus, jika tidak situs Anda akan mengancam bahaya serius! Bahkan, pada saat ini dapat diunduh sepenuhnya apa pun: file yang dapat dieksekusi, skrip, Html panci Dan hal-hal lain yang sangat berbahaya. Oleh karena itu, perlu untuk memeriksa file yang dapat diunduh ke server dengan sangat hati-hati. Jadi kita akan berurusan dengan artikel selanjutnya. Karena topiknya sangat penting, maka saya menyarankan Anda untuk berlangganan pembaruan, agar tidak melewatkan artikel ini.

Anda memiliki javascript diblokir di browser Anda. Izinkan JavaScript untuk pekerjaan situs!

Memuat file ke server

Exours pendek dalam unggah

Apa itu unggah file, atau mengapa tidak berfungsi
salin ("c: \\ images \\ sample.jpg", "http://mysite.ru/uploads/sample.jpg")

Bahkan jika Anda hanya memiliki satu komputer yang Anda inginkan, di mana server dan workstation diselaraskan, jangan lupa bahwa PHP menggunakan teknologi klien / server. File yang ingin kami unggah biasanya terletak di mobil klien, I.E. Pengguna, pengunjung situs biasa. Tujuan adalah server. Untuk membuat proses transfer file, kami memerlukan formulir berikut:

Kirim file ini:

Dalam hal ini, URL skrip PHP Anda harus ditentukan dalam bidang Tindakan, yang akan terus memproses file yang diunduh. Bidang Hidden Max_File_Size harus mendahului bidang pemilihan file, dan berisi ukuran file maksimum yang diijinkan dalam byte. Tugasnya adalah untuk memeriksa ukuran file bahkan sampai file dikirim ke server. Ini harus menghemat pengguna dari pengunduhan file yang panjang dan tidak berhasil ke server dan pembentukan lalu lintas berlebih, tetapi tidak boleh secara khusus mengandalkan pembatasan ini, karena mudah untuk mengatasinya.

Apa yang terjadi ketika pengguna memilih file pada disknya, dan menekan tombol "Kirim File"? Browser mengirim file ke server di mana penerjemah PHP menempatkannya di direktori sementara dengan menetapkannya nama acak dan mengeksekusi skrip yang ditentukan dalam bidang aksi.

Bagaimana seharusnya upload.php terlihat seperti?

$ uploaddir \u003d "/ var / www / uploads /"; if (move_uploaded_file ($ _ file ["userfile"] ["tmp_name"], $ up unggah. $ _files ["userfile"] ["nama"]))) (cetak "file valid, dan berhasil diunggah.";) Lain (cetak "ada beberapa kesalahan!";)

Saat menulis skrip, muncul pertanyaan alami: bagaimana cara mendapatkan informasi tentang file yang diunduh dan mencapai file itu sendiri. Jika Anda menggunakan PHP versi 4.1.0 dan lebih tua, akan lebih baik untuk merujuk ke array Global $ _Files. Untuk setiap file yang diunduh, berisi array hash, dengan data berikut:

  • $ _Files ["userfile"] ["Nama"] - Nama file asli, seperti pengguna melihatnya, memilih file;
  • $ _FILES ["userfile"] ["ketik"] - File MIME / TYPE, misalnya, dapat menjadi gambar / gif; Bidang ini berguna untuk menyimpan jika Anda ingin menyediakan antarmuka untuk mengunduh file yang diunduh;
  • $ _Files ["userfile"] ["Ukuran"] - ukuran file yang diunduh;
  • $ _Files ["userfile"] ["tmp_name"] - Jalur penuh ke file sementara pada disk;
  • $ _FILES ["userfile"] ["Kesalahan"] - Memulai dengan versi 4.2.0, berisi kode kesalahan yaitu 0 jika operasi berhasil berlalu.

Untuk versi PHP di bawah 4.1.0, array ini disebut $ http_post_files. Jangan lupa bahwa, tidak seperti $ _Files, array ini bukan superglobal dan ketika mengaksesnya, misalnya, dari suatu fungsi, perlu untuk secara eksplisit menentukan global $ http_post_files;

Jika variabel tambahan dari $ userfile_name, $ userfile_type, $ userfile_size, $ userfile_type, $ userfile_size, akan dibuat dalam pengaturan register_globals Anda \u003d pada ... mempertimbangkan bahwa, mulai dengan versi 4.2.0, register_globals \u003d Off penggunaan variabel-variabel ini tidak disarankan, bahkan jika mereka didefinisikan. Cara terbaik untuk mendapatkan informasi tentang file yang diunduh adalah menggunakan array $ _FILES.

Untuk bekerja dengan file yang diunduh, yang terbaik adalah menggunakan fungsi bawaan is_uploaded_file () dan move_uploaded_file (), yang memeriksa apakah file dimuat, dan menempatkannya di folder yang ditentukan, masing-masing. Anda dapat menemukan informasi lebih detail pada halaman manual. Tidak perlu menemukan sepeda dan bekerja dengan file sementara sendiri, salin, hapus. Itu sudah dilakukan untuk Anda dan untuk Anda.

Server Tuning.

Saya melakukan segalanya dengan benar, tetapi sesuatu tidak berhasil untuk saya. Mungkin saya memiliki server yang tidak dikonfigurasi?

Jika Anda "melakukan segalanya dengan benar", tetapi kode Anda tidak berfungsi, atau berfungsi dengan tidak benar, jangan terburu-buru putus asa. Mungkin masalahnya bukan di tangan Anda, tetapi di pengaturan server yang salah. Berikut adalah daftar arahan yang terkait dengan mengunduh file:

Dalam file php.ini:

  • Jika Anda ingin tahu di mana php.ini Anda berada, lakukan
  • file_uploads. - Kemampuan untuk melarang atau memungkinkan mengunduh file secara keseluruhan. Default pada.
  • upload_max_filesize. - Ukuran file maksimum yang dapat diunduh. Jika Anda perlu bekerja dengan file besar, ubah pengaturan ini. Secara default, 2m Jangan lupa untuk mengubah post_max_size.
  • post_max_size. - Batas umum di bagian atas data yang ditransmisikan dalam permintaan POST. Jika Anda perlu bekerja dengan file besar, atau mengirim banyak file secara bersamaan, ubah pengaturan ini. Nilai default adalah 8m.
  • upload_tmp_dir. - Direktori sementara di server yang semua file yang dapat diunduh akan ditempatkan. Periksa hak mana yang ditetapkan di atasnya (jika Anda mengalami kesulitan pada tahap ini, lihat penjelasan di akhir artikel). Direktori semacam itu juga harus memiliki pengguna di mana Apache dilakukan, harus ada hak untuk menulis ke direktori ini. Jika Anda bekerja dengan pembatasan Open_Basedir diaktifkan - maka direktori sementara harus ada di dalam. Anda tidak perlu mengurus pembersihannya atau nama unik, PHP memecahkan masalah ini untuk Anda.

Dalam file httpd.conf.:

  • Pertama-tama, pastikan Anda menggunakan server Web Apache 1.3 (versi terbaru pada saat penulisan artikel - 1.3.27). Jika Anda menggunakan Apache 2.0, Anda harus membaca kutipan berikut dari dokumentasi:

    Jangan gunakan Apache 2.0 dan PHP di lingkungan produksi baik di Unix atau pada Windows.

  • Jika Anda menerima pesan "Metode POST tidak menyala", itu berarti Anda perlu mencari sesuatu yang mirip dengan arahan berikut, dan menggunakan kata kunci izin: Pesanan memungkinkan, deny memungkinkan dari semua
  • Masalah dengan mengunduh file biner - pertanyaan klasik "Mengapa file bertarung di unggahan". Berikut adalah solusi untuk keputusan yang diusulkan oleh Dima Borodin (http://php.spb.ru): Di direktori tempat skrip terletak, buat file .htaccess, di mana kita menulis: charsetdisable on to file httpd.conf. Tambahkan baris: Charsetrecodemultiparts off.

Penjelasan kecil, untuk resep ini: Masalah di atas ketika arsip yang dimuat ke server tidak dibayar dan gambar tidak ditampilkan, itu dapat terjadi karena fakta bahwa server Web Apache Rusia digunakan. Arahan CharsetDisable menonaktifkan modul modul pemrosesan charset, I.E. Tidak ada transcoding saat mengunduh file yang terletak di folder ini tidak akan terjadi. Arahan CharsetrecodemultipartForms mematikan transcoding data yang ditransmisikan oleh metode pos dengan tipe konten: multipart / formulir-data header. Itu. Data biner yang ditransmisikan dengan pengaturan seperti itu akan dibiarkan dalam bentuk asli, dan semua sisa pengisian situs akan dikodekan sesuai dengan pengaturan server saat ini.

Tetapi pada saat yang sama komplikasi dapat muncul: bersiaplah untuk fakta bahwa dalam beberapa kasus bagian teks dari permintaan Anda harus beralih sendiri. Inilah yang dikatakan dokumentasi tentang ini:

Gunakan arahan CharsetrecemultipartForms, yang muncul di PL23, tetapi Anda masih harus menelusuri kembali bagian bagian teks secara manual. Untuk melakukan ini, Anda dapat menggunakan API Apache Rusia yang tersedia dalam modul lain atau Apache Perl API Rusia yang tersedia dari MOD_PERL.

Salah satu contoh definisi pengkodean dapat ditemukan di sini: http://tony2001.phpclub.net/detect_charset/detect.phps

Dokumentasi terbaru tentang Apache Rusia ada di situs web resminya: http://apache.lexa.ru/.

Jangan lupa bahwa setelah perubahan konfigurasi, Anda perlu me-restart server web Anda.

Anda juga dapat mengkonfigurasi parameter APACH menggunakan.htaccess:

Php_value upload_max_fileze 50m php_value post_max_size 50 m

Fitur tambahan

Memuat beberapa file secara bersamaan

Contoh dari formulir unduhan beberapa file:

Kirim file-file ini:


Dan jangan lupa untuk meningkat post_max_size.Jika banyak file yang seharusnya

Unduh file otomatis ke server

Anda tidak boleh lupa bahwa file pada disk pengguna adalah informasi rahasia yang tidak javascript atau jauh lebih banyak PHP memiliki hubungan yang rendah. Sampai pengguna memilih file dengan bantuan Tidak peduli apa yang bekerja dengannya bisa pergi dan berbicara. Dan jangan lupa bahwa bidang input bidang ini adalah atribut nilai yang dilindungi dari perekaman.

Penyimpanan file di database MySQL

Jika Anda berkumpul untuk menyimpan file yang dapat diunduh dalam database, Anda perlu mengingat poin-poin berikut:

  • Anda harus menggunakan bidang gumpalan
  • Sebelum meletakkan ke database, jangan lupa untuk mendaftar ke string mysql_escape_string ()
  • Saat menampilkan file, Anda harus menentukan header konten / ketik

Ingatlah bahwa skrip menampilkan HTML Anda sama sekali tidak terhubung ke skrip yang harus ditampilkan gambar. Ini harus dua aplikasi yang berbeda.

Penyimpanan gambar dalam database bukanlah gaya yang baik. Jauh lebih mudah untuk menyimpan di database hanya untuk file gambar.

Memperoleh sifat gambar.

Jika Anda memiliki tugas untuk memeriksa jenis atau ukuran gambar sebelum mengunduh file ke server, Anda memerlukan fungsi GetImageSize (). Sebagai argumen, itu menerima nama file pada disk dan mengembalikan array, dua elemen pertama yang masing-masing adalah lebar dan tinggi, yang ketiga adalah jenis gambar. Jika tidak mungkin untuk membaca gambar yang benar dari file yang ditentukan, fungsi kembali berbohong.

Memuat file yang memiliki nama bahasa Rusia

Saat mengunduh ke file server, Anda perlu memeriksa nama asli mereka untuk keberadaan karakter "non-standar" (misalnya, huruf Rusia). Dalam hal kehadiran mereka, perlu untuk menggantikan. Nama file asli dapat ditemukan di $ _FILES ["userfile"] variabel ["nama"]. Cara mengisi ulang string bahasa Rusia ke Transtite Anda dapat ditemukan dalam contoh PHP.

Unduh Status Tampilan (bilah progres)

Harus diingat bahwa sampai file diunduh sepenuhnya, PHP tidak dapat beroperasi atau ukuran file atau persentase pemuatannya. Hanya ketika file sudah pada server PHP, itu akan dapat mengakses informasi. Jika Anda masih perlu menerapkan kesempatan seperti itu, gunakan Java-Applet.

Hak atas file

Masalah dengan hak di server (upload_tmp_dir)

Dalam sistem operasi seperti unix, setiap folder, file, tautan ini menetapkan kepatuhan dengan izin. Mereka mungkin terlihat seperti RWX-RW-R- atau sebagai angka 754.

Ketersediaan file atau direktori tergantung pada ID pengguna dan pengidentifikasi grup di mana ia masuk. Mode secara keseluruhan dijelaskan dalam hal tiga urutan, masing-masing tiga huruf:

Pemilik grup lain (U) (g) (o) RWX RWX RWX

Di sini, pemilik, anggota grup dan semua pengguna lain memiliki hak untuk membaca file, menulis ke sana dan eksekusinya. Hak - Kombinasi yang berarti dari huruf-huruf berikut:

r Kanan untuk membaca. (empat)
Kanan untuk merekam. (2)
x Hak untuk dieksekusi (cari di direktori). (satu)

  • Instal pemilik direktori pengguna, dengan atraksi siapa yang dilakukan oleh Apache. Ini dapat ditemukan dari file httpd.conf atau melihat daftar proses di server. Hak direktori harus 700 (RWX ------).
  • Terlepas dari siapa pemilik katalog, menetapkan hak 777 (RWXRWXRWX).

    Contoh penerapan pengunduhan gambar ke server.

    $ max_image_width \u003d 380; $ max_image_height \u003d 600; $ max_image_size \u003d 64 * 1024; $ valid_types \u003d array ("gif", "jpg", "png", "jpeg"); Jika (isset ($ _ file ["userfile"]))) (jika (is_uploaded_file ($ _ file ["userfile"] ["tmp_name"])) ($ filename \u003d $ _FILES ["tmp_name"] ["tmp_name"] ; $ Ext \u003d substr ($ _ file ["userfile"] ["nama"], 1 + strrpos ($ _ file ["userfile"] ["nama"], ".")); Jika (file (nama file " )\u003e $ max_image_size) (gema "Kesalahan: ukuran file\u003e 64k.";) EleveIf (! in_array ($ ext, $ valid_types)) (gema "Kesalahan: Jenis file yang tidak valid.";) Lainnya ($ Ukuran \u003d GetImage ($ Nama file); jika (($ ukuran) && ($ ukuran< $max_image_width) && ($size < $max_image_height)) { if (@move_uploaded_file($filename, "/www/htdocs/upload/")) { echo "File successful uploaded."; } else { echo "Error: moving fie failed."; } } else { echo "Error: invalid image properties."; } } } else { echo "Error: empty file."; } } else { echo "
    Kirim file ini:
    "; }
  • Dalam artikel kami, kami mempertimbangkan contoh membuat skrip unduhan file PHP ke server. Contoh unduhan file sederhana kami akan memiliki 2 file: Formulir (Form.html), Script Unduh File PHP (Uploader.php).

    Sekarang kita akan menganalisis segalanya secara detail. Pertama, analisis formulir formulir form.html:


    Karena Anda dapat melihat kode HTML sederhana ini, tidak ada yang rumit di sini, satu-satunya jika formulir akan memuat file ke server, maka atribut tersebut harus terdaftar enctipe \u003d "multipart /untuk m-data ".

    Formulir kami akan terlihat seperti ini:

    ContohSkrip Unduh File PHP

    Sekarang kita akan mengetahuinya dengan file PHP yang akan mengunduh file ke server. Di bawah ini adalah kode sumbernya:

    // Di mana file akan ditempatkan $ target_path \u003d 'unloaded_files / "; / * Tambahkan nama file asli ke jalur target kami. Hasil adalah" unggah_files / filename.extension "* / $ target_path \u003d $ target_path. File ["file"] ["nama"]); if (move_uploaded_file ($ _ file ["file"] ["tmp_name"], $ target_path)) (echo "file" .ame ($ _ file [" "] [" Nama "])." Telah diunggah ";) Lainnya (Echo" Ada kesalahan mengunggah file, silakan coba lagi! ";)

    Bagaimana skrip unduhan file PHP?

    uploader.php adalah skrip unduhan file PHP sederhana ke server yang akan mengunduh file kami ke direktori situs tertentu yang ditentukan oleh string $ target_path \u003d "uploaded_files /";

    Ya, dengan sendirinya, kami membuat output elementer dari pesan menggunakan jika / lain, jelas, file kami dimuat atau tidak.

    Perlindungan peretasan peretas saat mengunduh file

    Kami akan mempertimbangkan tidak hanya perlindungan dalam hal peretasan hacker, tetapi juga masalah lain yang tidak diinginkan yang timbul saat mengunduh file ke server.

    PHP File Shell.

    Ini adalah masalah pertama yang terkait dengan mengunduh file ke server. Ketika file unduhan memiliki shell PHP, dan ini tidak berarti bahwa ekstensi akan PHP. Ini mungkin memiliki tampilan gambar.jpg (.gif, .png ...). Tapi di dalamnya terlihat seperti ini:

    Beberapa pengrajin juga dapat mengeksekusi perintah di server menggunakan URL Surfing:

    $ Curl http: //server/uploads/shell.php? Command \u003d any_unix_command

    Metode perlindungan:

    Untuk melindungi, Anda dapat menerapkan pemeriksaan file MIME. Di bawah ini lihat contoh:

    If ($ _ file ["file"] ["ketik"]! \u003d "Gambar / gif") (echo "Maaf, kami hanya semua mengunggah gambar GIF"; keluar;)

    Sepotong kode PHP ini memeriksa apakah file GIF yang dapat diunduh adalah file. Masukkan kode ini sebelum skrip unduhan file PHP. Secara alami, Anda dapat mengubah cek pada JPG, file PNGI lain yang Anda butuhkan.

    Adalah kebenaran untuk dikatakan, dan metode perlindungan ini dapat dilewati jika Anda mengirim header header, dengan instruksi MIME. Untuk melakukan ini, perlu memeriksa ketersediaan Tag di file yang dapat diunduh.

    Membatasi ukuran file yang diunduh

    Mungkin juga ada masalah dengan ukuran besar file yang akan menempati ruang disk Anda. Untuk melakukan ini, tulis batas pada ukuran file yang sedang diunduh.

    Anda dapat melakukan ini menggunakan formulir, untuk ini, Anda perlu menambahkan baris berikut ke konteks formulir HTML:

    Bidang input tersembunyi ini akan membatasi ukuran file yang dapat diunduh. Atau Anda dapat memeriksa ukuran file alat PHP.

    Tulis O.skrip unduhan file PHP bisa panjang, tetapi kami telah membongkar prinsip dasar mengunduh file ke server. Karena itu, jika seseorang memiliki lebih banyak pertanyaan, tanyakan pada komentar.

    Hari ini, layanan unduhan file ke server (hosting) ditemukan di semua situs jejaring sosial, papan buletin, situs kencan, dll. Esensinya adalah untuk memungkinkan pengunjung ke sumber daya web untuk menerbitkan file-nya (foto, dokumen) di internet.

    Ketika menyediakan layanan ini ada satu minus substansial. Faktanya adalah dengan memungkinkan Anda mengunduh file ke server Anda, kami, seperti itu, instal pintu di belakang mana kontrol konstan diperlukan. Karena dalam file pengunjung mungkin tidak hanya informasi yang berguna, tetapi juga kode virus yang dapat memungkinkan penyerang untuk memiliki server Anda. Mengingat minus ini, Anda harus dengan hati-hati memeriksa file sebelum mengunduh ke server.

    Tetapi saya tidak akan mengintimidasi Anda, tetapi saya lebih suka membayangkan perhatian Anda sudah siap berfungsi (Script PHP) untuk memeriksa dan mengunduh file ke server. Fungsi ini 100% berfungsi. Saya sendiri menggunakannya di situs saya. Fitur ini ditulis untuk mengunduh file gambar (foto) dalam format.jpg, .gif, .png. Tetapi jika Anda mau, Anda dapat membuat perubahan untuk mengadaptasi skrip PHP dengan kebutuhan Anda.

    Dua cek diimplementasikan dalam skrip PHP:

    1. karena Hoster membatasi ukuran file yang diunduh (pada saat penulisan bahan ini, saya memiliki batas 8 MB di hosting saya), kemudian memeriksa ukuran maksimum diperlukan;
    2. memeriksa ekstensi file memungkinkan Anda untuk memotong file yang tidak perlu sebelum mengunduh.

    Saya harap kode fungsi cukup dijelaskan untuk menangani file unduhan ke server. Tetapi jika Anda memiliki pertanyaan, saya akan dengan senang hati menjawab dalam komentar.

    Sekarang tentang bagaimana menerapkannya secara praktis

    Kami menempatkan fungsi kode PHP dalam file terpisah: fungsi.php dan letakkan di server di direktori root.

    Dan buat file HTML untuk memposting formulir unduhan foto: index.html

    upload.php - Handler Formulir File
    Nama \u003d "tombol" - nama tombol, ketika Anda mengklik fungsi unduhan file dimulai ke server

    Memuat beberapa file

    Sekarang kita akan menganalisis kasus ketika Anda perlu mengunduh banyak file ke server.
    Untuk melakukan ini, kita perlu dalam Function.php file update.php dan index.html membuat beberapa perubahan.





    Mungkin, ini semua yang Anda butuhkan untuk mengimplementasikan layanan untuk mengunduh file pengguna ke server (hosting).

    Fitur lain yang terkait erat dengan mengunduh file grafis (foto) adalah fungsi untuk mengubah ukuran gambar:

    Multipart-Forms.

    • Web ierfaces layanan pos yang memungkinkan Anda untuk menambahkan aplikasi ke huruf (lampirkan), dan untuk ini Anda pertama-tama perlu mengunduh file ke server, dan hanya setelah itu dapat ditambahkan ke huruf;
    • Galeri foto interaktif dan album foto yang tidak dapat ada tanpa mekanisme unduhan file ke server;
    • Portal perangkat lunak gratis yang digunakan untuk bertukar file berbagai program, dll.

    Mengunduh file ke server dilakukan menggunakan multi -art -form, di mana ada bidang pemuatan file. Parameter enkotipe menunjukkan multipart / formulir-data:



    Ini akan terlihat seperti bentuk multi -art yang diberikan yang akan terlihat seperti (Anda dapat mencoba melihat hasil dari bentuk multi partai, mengunduh beberapa file kecil ke server):

    Bentuk multi -art biasanya menggunakan metode post transmisi. Seperti yang dapat dilihat dari contoh sebelumnya, formulir ini memiliki dua bidang:

    • Bidang pemilihan file untuk diunduh ;
    • Bidang menentukan nama file yang harus dimiliki di server .

    Pemrosesan formulir multi -art

    Sebelum melanjutkan dengan menulis skrip pemrosesan formulir multi partai, Anda perlu mengedit file konfigurasi php.ini. Untuk memungkinkan mengunduh file ke server.

    File konfigurasi PHP PHP.ini memiliki tiga parameter yang terkait dengan mengunduh file ke server:

    • file_uploads \u003d ON - memungkinkan Anda mengunduh file ke server melalui protokol HTTP;
    • upload_TMP_DIR \u003d / TMP - Mengatur direktori untuk sementara menyimpan file yang diunduh;
    • upload_max_filesize \u003d 2m - menetapkan jumlah maksimum file yang diunduh.

    Jika server web Anda berjalan menjalankan sistem operasi Linux, maka Anda perlu me-restart layanan:

    layanan httpd restart.

    Bagaimana PHP menangani formulir multiart? Setelah menerima file, itu menyimpannya di direktori sementara upload_tmp_dir, nama file dipilih secara acak. Maka itu menciptakan empat variabel array superglobia $ _Files. Array ini berisi informasi tentang file yang diunduh.

    Variabel yang ditentukan untuk file yang diunduh tergantung pada versi PHP dan konfigurasi saat ini. SuperGlobal $ _Files array tersedia dari PHP 4.1.0. Dalam hal konfigurasi register_globals diatur oleh nilai dI.Selain itu akan dinyatakan variabel dengan nama yang sesuai. Mulai dari versi 4.2.0, nilai default untuk opsi register_globals adalah mati.

    Isi array $ _Files untuk contoh kami diberikan di bawah ini. Harap dicatat bahwa diasumsikan menggunakan nama UploadFile untuk bidang pemilihan file, sesuai dengan formulir multi-Multipart di atas. Tentu saja, nama bidangnya bisa berupa apa saja.

    • $ _FILES ["UploadFile"] ["Nama"] - nama file sebelum mengirimnya ke server, misalnya, Pict.GIF;
    • $ _FILES ["UploadFile"] ["Ukuran"] - ukuran file yang diterima dalam byte;
    • $ _FILES ["UploadFile"] ["Type"] - Jenis MIME dari file yang diterima (jika browser dapat menentukannya), misalnya: gambar / gif, gambar / png, gambar / jpeg, teks / html;
    • (Jadi kami menelepon bidang unduhan file) - berisi nama file di direktori sementara, misalnya: / tmp / phpv3b3qy;
    • $ _FILES ["UploadFile"] ["Kesalahan"] -Kode kesalahan yang mungkin terjadi ketika file dimuat. Kunci ["kesalahan"] Itu ditambahkan ke PHP 4.2.0. Dengan kode kesalahan yang sesuai, Anda dapat membiasakan diri

    Setelah menyelesaikan skrip, file sementara akan dihapus. Ini berarti bahwa kita harus menyalinnya ke tempat lain sampai skrip selesai. Artinya, algoritma untuk skenario kerja unduhan file ke server adalah:

    Jika tombol "Kirim" ditekan, file tersebut sudah akan diunduh ke server dan namanya akan berada di variabel $ _FILES ["UploadFile"] ["Nama"]. Dalam hal ini, skrip harus segera menyalin file bernama $ _Files ["uploadfile"] ["tmp_name"] Untuk beberapa katalog (Anda perlu menulis ke direktori ini).

    Penyalinan file dilakukan berdasarkan fungsi salin () :

    Gunakan hanya fungsi Salin () Salin (), dan tidak bergerak, karena:

    • File sementara akan dihapus secara otomatis;
    • Jika direktori sementara ada di media lain, pesan kesalahan akan ditampilkan.

    Misalkan kita perlu mengunduh file ke direktori unggahan, yang terletak di direktori root server web (di direktori dokumentro).

    // Kalau-kalau, buat direktori. Jika dia sudah dibuat,
    // Pesan kesalahan kita tidak akan melihat, karena kita akan menggunakan operator @:

    @mkdir ("unggahan", 0777);

    // Salin file dari / tmp dalam unggahan
    // Nama file akan sama dengan sebelum mengirim ke server:

    Salin ($ _ file ["uploadfile"] ["tmp_name"], "unggahan /". BASENNAME ($ _ File ["UploadFile"] ["Nama"])));

    Di Linux, semuanya jauh lebih rumit - kita perlu memperhitungkan hak akses ke katalog unggahan. Kemungkinan besar, dalam hal ini, fungsinya mkdir () Ini tidak akan berhasil, karena kami tidak memiliki hak untuk menulis ke direktori dokumentro (biasanya / var / www / html atau / httpd / html). Daftarkan sebagai sistem root, buat direktori unggahan dan ubah pemiliknya dan hak aksesnya sebagai berikut:

    // Buat katalog unggahan

    // instal nama pemilik Apache dan grupnya - juga Apache:

    Chown Apache: Unggahan Apache

    // tulis resolusi untuk semua orang (777) + instalasi bit pemasangan (1):

    Unggahan Chmod 1777.

    Ukuran file dapat dibatasi, jika Anda mau, Anda dapat mengedit file .htaccess dan membatasi akses ke direktori unggahan - tentukan atau pengguna tertentu yang dapat mengakses direktori, atau alamat IP.

    Sekarang Anda dapat mengunggah file ke server.

    Kami menulis file pengunduhan skrip PHP ke server


    // Katalog di mana kami akan menerima file:
    $ uploaddir \u003d "./files/";
    $ Upunggal \u003d $ unggahdir. Basename ($ _FILES ["UploadFile"] ["Nama"]);

    // Salin file dari direktori untuk penyimpanan file sementara:
    jika (salin ($ _FILES ["UploadFile"] ["tmp_name"], $ upunggal)))
    {
    gema. "

    File ini berhasil diunduh ke server.

    " ;
    }
    lain (gema "

    Kesalahan! Gagal mengunduh file ke server!

    "
    ; keluar; )

    // tampilkan informasi tentang file yang diunduh:
    gema. "

    Informasi tentang file yang dimuat di server:

    "
    ;
    gema. "

    Nama asli dari file yang diunduh: ". $ _Files ["UploadFile"] ["Nama"]. "

    " ;
    gema. "

    Jenis MIME dari file yang diunduh: ". $ _FILES ["UploadFile"] ["Jenis"]. "

    " ;
    gema. "

    Ukuran file yang dimuat dalam byte: ". $ _Files ["Ukuran"] ["Ukuran"]. "

    " ;
    gema. "

    Nama file sementara: ". $ _FILES ["UploadFile"] ["tmp_name"]. "

    " ;

    ?>

    Memuat beberapa file dapat diimplementasikan menggunakan, misalnya, nilai nama yang berbeda untuk tag input.

    Ini juga menyediakan kemampuan untuk secara otomatis memperoleh informasi yang disusun dalam array beberapa file yang dapat diunduh secara simultan. Untuk mengimplementasikan kesempatan seperti itu, gunakan sintaks data yang sama dari array dari formulir HTML untuk beberapa bidang Pilih dan Kotak Centang:


    Kirim file-file ini:






    Dalam hal bentuk seperti itu telah dikirim, array $ _files ["userfile"], $ _files ["userfile"] ["nama"], dan $ _files ["userfile"] ["Ukuran"] akan diinisialisasi (dalam Dengan cara yang sama seperti $ http_post_files untuk PHP 4.1.0 dan versi sebelumnya). Jika arahan konfigurasi register_globals diatur dengan nilai pada nilai, variabel global yang terkait juga akan diinisialisasi. Masing-masing variabel ini akan berupa array numerik yang diindeks dari nilai-nilai yang sesuai untuk file yang diterima.

    Misalkan / home/test/some.html dan / home/test/file.bin file diunduh. Dalam hal ini, $ _FILES ["userfile"] ["nama"] variabel akan memiliki nilai. Html, dan $ _files ["userfile"] variabel ["nama"] adalah file.bin. Demikian pula, variabel $ _FILES ["userfile"] ["Ukuran"] akan berisi ukuran file beberapa.html dan sebagainya.

    Variabel $ _files ["userfile"] ["nama"], $ _Files ["userfile"] ["tmp_name"], $ _Files ["userfile"] ["Ukuran"] dan $ _Files ["userfile"] ["Type"] juga akan diinisialisasi.

    Kesimpulan:

    Seperti yang Anda lihat, tidak terlalu sulit untuk mengatur pengunduhan file ke server. Lebih sulit untuk memberikan tingkat keamanan yang diperlukan, karena memuat file ke server dapat digunakan oleh penyerang ke server. Cara menyediakan tingkat keamanan yang diperlukan, bekerja dengan unggahan, lihat.



    <<< Назад Kandungan Ke depan \u003e\u003e\u003e
    Masih ada pertanyaan atau sesuatu yang tidak dapat dipahami - selamat datang di kami