KomputerJenis fail

PHP: Fail muat naik ke pelayan

Memuat turun fail melalui PHP - satu kes yang sangat menarik, yang perlu didekati dengan berhati-hati. Di Internet, anda boleh mencari banyak contoh pelaksanaan muat naik fail, tetapi tidak semua daripada mereka adalah baik dan memenuhi peraturan keselamatan.

Perkara-perkara seperti perlu untuk membawa kepada kesimpulan, walaupun ia mengambil masa yang lama. Jika anda meninggalkan jurang yang dalam kod, maka segala pelayan anda boleh dikompromi.

keselamatan

Dengan PHP fail memuat naik ke pelayan dijalankan dengan mudah. Kod ini adalah sangat pendek dan mudah. Hanya beberapa baris. Walau bagaimanapun, kaedah ini adalah berbahaya. Lebih banyak masa dan baris kod jauh untuk keselamatan.

Bahayanya adalah bahawa, jika anda tidak melakukan pemeriksaan, mana-mana penyerang boleh memuat naik skrip mereka pada pelayan anda. Dalam kes ini, ia akan mempunyai akses penuh. Dia boleh melakukan apa sahaja yang dia mahu:

  • memadam pangkalan data;
  • memadam fail laman web;
  • mengubah suai fail laman web;
  • menambah iklan anda ke laman web anda;
  • memuat turun virus;
  • mengarahkan semua pengguna di laman web mereka;
  • dan banyak perkara lain yang datang ke fikiran penyerang.

Anda harus selalu memeriksa yang cuba untuk memuat turun fail untuk pengguna. Sebagai contoh, jika anda memuat naik imej sahaja, ia adalah perlu untuk mengesahkan bahawa fail adalah imej tepat. Jika tidak, anda akan memuat turun apa-apa.

Tepat bagaimana untuk melaksanakan pengesahan, ia akan ditunjukkan, dengan skrip peperiksaan terus untuk memuat naik fail.

Mewujudkan satu bentuk PHP

file borang muat naik adalah sangat mudah. Hilang butang semak imbas dan memuat naik butang.

Menerangkan bagaimana untuk mencipta bentuk-bentuk tidak akan, kerana ia adalah mudah. arahan selanjutnya menganggap bahawa anda sudah mempunyai konsep asas HTML (jika tidak, anda tidak akan mencari maklumat tentang memuat turun pada PHP).

Tetapi ambil perhatian bahawa data dalam bentuk yang anda perlukan untuk menambah atribut enctype itu.

Jika tidak, data dalam fail pengendali tidak akan dihantar.

Bagaimana ia harus bekerja?

Apabila anda klik pada butang semak imbas anda akan dapat melihat kotak di mana diminta untuk memilih fail.

Selepas itu ia akan diperlukan untuk menerima jalan di mana fail itu terletak.

Jika jalan yang tidak muncul, melakukan tindakan yang lagi.

Selepas klik pada pengendali muat turun fail boleh memberi apa-apa maklumat.

Sebagai contoh, anda boleh menulis baris yang menyatakan bahawa fail adalah "demikian dan demikian" nama telah berjaya dimuat naik ke folder "ini dan itu". Sudah tentu, nama fail akan diberikan sentiasa berbeza.

Biasanya, maklumat ini digunakan untuk kod debug. Oleh itu, ia adalah mungkin untuk mengesahkan bahawa data yang dihantar dan menulis berlaku di dalam direktori yang dikehendaki. Iaitu, walaupun nama fail tidak dinyatakan. Oleh kerana maklumat tambahan ini bahawa pengguna tidak perlu.

Ia masuk akal untuk output nama hanya jika pengguna memuat turun berbilang fail. Seperti halnya, pertimbangkan yang sedikit lebih. Jangan kita mendapatkan lebih awal daripada diri kita sendiri.

pelarasan

Dalam PHP fail muat naik ke pelayan memerlukan tetapan tertentu, yang perlu dilakukan dalam fail php.ini itu. Fail ini mengandungi banyak tetapan. Mereka semua kita tidak perlu. Kami berminat dalam tiga baris: file_uploads, upload_tmp_dir dan upload_max_filesize.

Sila ambil perhatian bahawa tetapan ini akan menjejaskan semua laman web anda pada pelayan, tidak hanya mana-mana satu. Oleh itu, untuk menetapkan saiz maksimum berdasarkan fakta bahawa anda akan perlu untuk memuatkan pengguna. Ia tidak digalakkan untuk menetapkan terlalu besar.

Apabila anda menukar nilai dalam parameter ini, anda perlu memulakan semula pelayan. Jika tidak, tetapan tidak akan berfungsi, kerana mereka membaca pada masa beban pelayan.

Anda boleh melakukan ini dalam konsol dengan menyambung melalui SSH ke pelayan. Hanya masukkan perkhidmatan arahan httpd restart, dan kemudian tetapan akan berkuat kuasa.

Satu lagi kaedah - mula semula melalui ISP-panel atau melalui pembekal panel bil.

fail array

Dalam PHP naik fail dilakukan dengan array $ _FILES itu. Ia mengandungi semua maklumat tentang fail yang kita memuat turun.

Untuk melihat maklumat apa yang terkandung dalam array, cukup untuk menulis dalam pengendali fail berikut.

Pilih mana-mana fail dan klik "Muat naik." Pada halaman pengendali akan memaparkan maklumat yang disimpan dalam $ _FILES. pembolehubah ini ditulis sepenuhnya dengan huruf besar. PHP - bahasa-sensitif.

Seperti yang anda lihat, dalam pelbagai ini mempunyai banyak bidang. Kesemua mereka adalah penting bagi kami. Bidang pertama mengandungi nama fail dalam bentuk di mana ia digunakan pada komputer anda.

Lajur jenis dinyatakan jenis fail. bidang Tmp_name sepadan dengan nama fail sementara. Selepas akhir skrip akan dipadamkan.

Bidang ralat mengandungi kod ralat. Ini adalah sedikit lebih. Saiz - saiz dalam bait.

kesilapan

Dijalankan melalui muat naik fail PHP selalu disertai dengan kod ralat. Mesej ralat dimasukkan dalam "kesilapan". Kesilapan screenshot adalah sifar.

Mempertimbangkan nilai semua kesilapan:

Ia dikatakan di atas tentang parameter yang boleh dinyatakan dalam HTML yang biasa.

Berikut adalah bentuk sampel untuk memuat turun fail, yang menunjukkan had jumlah fail yang dimuat naik.

PHP: Fail skrip muat naik

Kerana semua dijalankan dalam amalan? Dalam PHP naik fail berlaku arahan salinan. Jika anda berminat untuk persoalan bagaimana untuk memuat turun fail, jawapannya adalah salin mudah, yang menggunakan dua parameter - fail sumber fail dan destinasi.

Tetapi, seperti yang dinyatakan di atas, ia tidak terhad atas sebab-sebab keselamatan. Sebagai contoh, lihat apa jenis fail kami menghantar, anda boleh menggunakan jenis medan dalam array $ _FILES itu. Pertama, mari kita berurusan dengan pemeriksaan, dan kemudian beralih kepada skrip penuh

Katakan anda mahu untuk membolehkan pengguna untuk memuat naik gambar dengan resolusi hanya GIF, JPEG atau PNG. Menunjukkan ia boleh menjadi seperti ini.

if ($ _ FAIL [ 'file_upload'] [ 'type']! = "image / gif") {
echo "Maaf, kami menyokong hanya memuat turun Gif-Files";
keluar;
}

Jika anda ingin menghantar semua 3 jenis, hanya menambah syarat tambahan untuk lain-lain jenis imej.

Menyalin dilakukan seperti ini: salinan (imej 1, imej 2).

Dalam kes ini, apabila kerja itu memuat turun dari PC ke pelayan, anda boleh berbuat demikian

salinan ($ _ FAIL [ 'file_upload'] [ "tmp_name"], "1.jpg")

Iaitu, fail akan disalin dengan 1.jpg nama. Ini tidak sepenuhnya betul. Dalam kes ini, ia hanya satu contoh. Nama fail sentiasa perlu untuk menentukan yang berbeza, dan menentukan lanjutan, bergantung kepada fail.

Menentukan sambungan boleh menjadi cara yang berbeza. Ia semua bergantung kepada pemaju erudition. Salah satu cara yang paling cepat untuk (perbezaan persepuluh saat) menentukan sambungan - ini adalah kod yang akan datang.

$ Path_info = pathinfo ($ _ FAIL [ 'photo1'] [ "nama"]);

$ Ext = $ path_info [ 'sambungan'];

Pembolehubah $ ext kita akan menyimpan sambungan yang dikehendaki. A nama fail boleh ditetapkan secara rawak menggunakan md5. Jika anda merancang untuk memuat turun banyak fail, ia adalah lebih baik untuk menghantar mereka ke folder yang berbeza. Jadi ia akan menjadi lebih mudah. Khususnya, jika anda mahu untuk membersihkan.

untuk memuat turun kod adalah seperti berikut.

/// Dengan foto

if ($ _FILES [ 'photo1'] [ 'tmp_name'] == null)

{

echo ( "

fail tidak diketahui.

Kembali ... ");

keluar;

}

///. Katakanlah anda kepada projek pada pelayan dibenarkan untuk memuatkan fail besar (video), tetapi hanya ada gambar, dan pengguna perlu untuk menghadkan

if (($ _FILES [ "photo1"] [ "size"]> 1024 * 1024 * 2)

{

?>

Saiz maksimum yang dibenarkan 2 MB

Kembali ...

keluar;

}

// membuat folder

// membuat folder bulan semasa

if (! file_exists ( "img /". tarikh ( "M")))

{

mkdir ( "img /" tarikh ( "M").);

}

// membuat folder hari semasa

if (! file_exists ( "img /". tarikh ( "M"). "/". tarikh ( "d")))

{

mkdir ( "img /" tarikh ( "M") "/" tarikh ( "d") ...);

}

/// sambungan fail

$ Path_info = pathinfo ($ _ FAIL [ 'photo1'] [ "nama"]);

$ Ext = $ path_info [ 'sambungan'];

/// menjana nama fail

Id $ = md5 (tarikh ( "YMd"));

jika (copy ($ _ FAIL [ 'photo1'] [ "tmp_name"], "img /". tarikh ( "M"). "/". tarikh ( "d"). "/". $ id. $ ext) )

{

echo ( "Fail berjaya dimuat naik");

}

/// sebarang tindakan lanjut (kemasukan dalam pangkalan data, dan sebagainya. N.)

}

berbilang fail

Memuat naik berbilang fail (PHP) berlaku melalui medan tambahan dalam bentuk.

Kaedah ini tidak begitu baik, kerana ia menghadkan bilangan fail untuk dimuat turun. Selain itu, ia dianggap jelek dalam pengaturcaraan. Cuba untuk melakukan segala dinamik.

Pilihan yang ideal - ia adalah pilihan sebilangan besar fail serentak dengan menekan butang tunggal.

Untuk melakukan ini, buat bentuk seperti kod ini.

Ambil perhatian bahawa penambahan pelbagai perkataan, dan nama yang diberikan sebagai pelbagai []. Dalam kes ini, $ _FILES lokasi akan sedikit berbeza. Anda akan mendapat pelbagai array.

Untuk menguji lagi boleh menggunakan var_dump yang ($ _ FILES);

Semua fail anda akan diletakkan dalam tatasusunan seperti ini:

  1. $ _FILES [ "file1"] [ "nama"] [0]
  2. $ _FILES [ "file1"] [ "nama"] [1]
  3. Dan sebagainya.

Dalam kurungan ditulis nombor fail dalam array. Mengira dari sifar. Kami melayan mereka dengan cara yang sama, hanya meminta kitaran dan dengan menghubungi kod di atas diterangkan pada akhir indeks menambah [$ i].

$ I = 0;

sementara ($ _FILES [ "file1"] [ "nama"] [$ i] <> '')

{

/// paste kod di atas

}

Oleh itu, anda perlu berlaku melalui muat naik fail PHP untuk pelayan dalam satu kitaran tanpa pengulangan yang tidak perlu kod, seperti yang biasanya berlaku jika anda menggunakan versi dengan beberapa statik fail (foto terakhir).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 ms.birmiss.com. Theme powered by WordPress.