Rumah >pembangunan bahagian belakang >tutorial php >phpmaster | Memuat naik fail dengan php

phpmaster | Memuat naik fail dengan php

William Shakespeare
William Shakespeareasal
2025-03-03 08:28:10623semak imbas

phpmaster | Uploading Files with PHP

PHP Fail Upload: Membina sistem muat naik yang selamat dan boleh dipercayai

Gambar album dalam talian, lampiran e -mel, dan fail data pemprosesan batch mempunyai satu perkara yang sama: mereka semua perlu memuat naik fail ke Internet melalui pelayar web pengguna. Ciri muat naik fail adalah bahagian penting dari banyak laman web dan aplikasi web yang digunakan setiap hari. Artikel ini akan menunjukkan kepada anda bagaimana untuk menambah sokongan fail muat naik ke laman web anda menggunakan PHP.

mata utama

    Menambah sokongan muat naik fail dalam PHP memerlukan membuat borang HTML untuk pengguna dan skrip PHP untuk memproses fail yang dimuat naik pada pelayan. Elemen
  • mesti menggunakan kaedah pos dan menetapkan harta Enctype ke Multipart/Form-Data. <form></form>
  • Fail yang dimuat naik pertama kali disimpan dalam direktori sementara. Skrip PHP yang bertanggungjawab untuk mengendalikan penyerahan borang mengesahkan fail dan memprosesnya, biasanya memindahkannya dari lokasi sementara ke lokasi yang lebih kekal.
  • Maklumat mengenai muat naik fail disediakan melalui tatasusunan berbilang dimensi
  • . Fungsi $_FILES menggerakkan fail yang dimuat naik dari lokasi sementara ke lokasi tetap dan melakukan pemeriksaan tambahan untuk memastikan fail itu dimuat naik melalui permintaan pos HTTP. move_uploaded_file()
  • Terdapat risiko keselamatan untuk memuat naik fail. Untuk mengurangkan risiko ini, anda boleh mengesahkan jenis fail yang dimuat naik, mengenakan sekatan yang ketat pada trafik yang dimuat naik, dan mengimbas virus. Ia juga penting untuk memastikan nama fail yang selamat dengan menggantikan mana -mana aksara yang bukan huruf, nombor, atau set tanda baca yang sangat terhad dengan garis bawah.

prasyarat

Muat naik fail pemprosesan tidak sukar, tetapi terdapat beberapa butiran kecil yang mesti betul, jika tidak, muat naik akan gagal. Pertama, anda perlu memastikan bahawa PHP dikonfigurasi untuk membolehkan muat naik. Semak fail php.ini anda dan sahkan bahawa Arahan File_uploads ditetapkan ke ON.

<code>file_uploads = On</code>
Fail yang dimuat naik pertama kali disimpan dalam direktori sementara (jangan risau ... skrip PHP anda kemudian boleh memindahkan fail ke lokasi yang lebih kekal selepas itu). Secara lalai, lokasi awal adalah direktori sementara lalai sistem. Anda boleh menentukan direktori yang berbeza menggunakan arahan upload_tmp_dir dalam php.ini. Walau apa pun, anda harus mengesahkan bahawa proses PHP mempunyai keizinan yang sesuai untuk menulis ke direktori yang anda gunakan.

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>
Selepas mengesahkan bahawa konfigurasi membolehkan pelayan menerima fail yang dimuat naik, anda boleh memberi tumpuan kepada butiran HTML. Seperti kebanyakan interaksi sisi pelayan dari HTML, memuat naik fail menggunakan borang. Adalah sangat penting bahawa elemen

anda mesti menggunakan kaedah pos dan menetapkan harta Enctype ke Multipart/Form-Data. <form></form>


Menulis skrip proses muat naik

Mengikut pengalaman anda sendiri dan keperluan yang disebutkan sekarang, anda mungkin telah meneka proses memuat naik fail.

  • Pelawat Lihat halaman HTML yang mengandungi borang yang digunakan khusus untuk menyokong muat naik fail.
  • Pelawat menyediakan fail yang dia mahu muat naik dan menyerahkan borang.
  • Penyemak imbas menyandi fail dan menghantarnya sebagai sebahagian daripada permintaan pos yang dikeluarkan kepada pelayan.
  • PHP menerima penyerahan borang, menguraikan fail dan menyimpannya di lokasi sementara di pelayan.
  • Bertanggungjawab mengendalikan fail pengesahan skrip PHP untuk penyerahan borang dan memprosesnya entah bagaimana, biasanya memindahkannya dari lokasi sementara ke lokasi yang lebih kekal.

Menambah sokongan muat naik fail memerlukan anda membuat borang HTML yang akan dibentangkan kepada pengguna dan skrip PHP untuk mengendalikan fail yang dimuat naik pada pelayan.

html

Borang HTML menyediakan antara muka untuk pengguna untuk memulakan muat naik fail. Ingat bahawa atribut kaedah elemen

mesti ditetapkan untuk menyiarkan dan atribut Enctype mesti ditetapkan ke Multipart/Form-Data. Elemen <input> Fail menyediakan medan yang menentukan fail yang akan dimuat naik. Seperti mana -mana elemen bentuk lain, adalah penting untuk menyediakan atribut nama supaya anda boleh merujuknya dalam skrip PHP yang memproses borang. Berikut adalah contoh penanda untuk borang muat naik fail asas: <input>

<code>file_uploads = On</code>
Perlu diperhatikan bahawa pelayar yang berbeza akan menjadikan medan fail dengan cara yang berbeza. IE, Firefox, dan Opera memaparkannya sebagai medan teks dengan butang yang ditandakan semak imbas atau pilih di sebelahnya. Safari menjadikannya sebagai butang yang ditandakan hanya sebagai Fail Pilih. Ini biasanya tidak menjadi masalah kerana pengguna digunakan untuk bagaimana medan diberikan dalam penyemak imbas pilihannya dan tahu cara menggunakannya. Walau bagaimanapun, kadang -kadang anda menghadapi pelanggan atau pereka yang mendesak membentangkannya dalam beberapa cara. Oleh kerana sebab -sebab keselamatan yang dikenakan oleh penyemak imbas, bilangan CSS dan JavaScript yang boleh digunakan untuk medan fail sangat terhad. Medan fail gaya boleh menjadi sukar. Jika penampilan penting bagi anda, saya cadangkan anda menyemak jenis input Peter-Paul Koch Type = "File".

php

Maklumat mengenai muat naik fail disediakan melalui tatasusunan berbilang dimensi

. Arahan ini diindeks dengan nama yang diberikan kepada medan fail dalam borang HTML, seperti $_FILES dan $_GET diindeks dengan nama. Kemudian, pelbagai fail mengandungi indeks berikut: $_POST

  • $_FILES["myFile"]["name"] Menyimpan nama fail asal dari klien.
  • $_FILES["myFile"]["type"] Jenis mime yang menyimpan fail.
  • $_FILES["myFile"]["size"] Saiz fail dalam bait.
  • $_FILES["myFile"]["tmp_name"] Nama fail sementara disimpan.
  • $_FILES["myFile"]["error"] Simpan sebarang kod ralat yang dihasilkan semasa pemindahan.
Fungsi

move_uploaded_file() menggerakkan fail yang dimuat naik dari lokasi sementara ke lokasi tetap. Anda harus sentiasa menggunakan fungsi seperti move_uploaded_file() bukan copy() dan rename() untuk tujuan ini, kerana ia melakukan pemeriksaan tambahan untuk memastikan fail itu dimuat naik melalui permintaan pos HTTP. Jika anda merancang untuk menyimpan fail dengan nama fail asal yang disediakan oleh pengguna, lebih baik untuk memastikan bahawa ini selamat. Nama fail tidak boleh mengandungi sebarang aksara yang boleh menjejaskan laluan destinasi, seperti slashes. Tidak juga nama itu menyebabkan fail untuk menimpa fail sedia ada dengan nama yang sama (kecuali reka bentuk permohonan anda melakukannya). Saya memastikan nama fail yang selamat dengan menggantikan mana-mana huruf, nombor atau set aksara tanda baca yang sangat terhad dengan garis bawah, dan kemudian menambahkan nombor tambahan apabila fail dengan nama yang sama sudah ada. Berikut adalah contoh menerima dan memproses fail PHP muat naik:

<code>file_uploads = On</code>

Kod ini terlebih dahulu memastikan bahawa tiada kesilapan dalam memuat naik fail. Ia kemudian menentukan nama fail yang selamat (seperti yang saya sebutkan) dan menggunakan move_uploaded_file() untuk memindahkan fail ke direktori terakhirnya. Akhirnya, hubungi chmod() untuk memastikan akses yang munasabah ditetapkan pada fail baru.

Langkah berjaga -jaga keselamatan

Kebanyakan kita tidak akan membiarkan jumlah fail rawak menyimpan orang asing pada PC kami, tetapi apabila anda membenarkan fail dimuat naik dalam aplikasi kami, anda sebenarnya melakukannya. Anda mungkin merancang untuk memuat naik foto sendiri sebagai halaman profil, tetapi bagaimana jika dia cuba memuat naik fail yang boleh dibentuk virus yang boleh dibuat secara khusus? Saya ingin berkongsi beberapa langkah yang boleh anda ambil untuk meminimumkan risiko keselamatan yang wujud untuk membenarkan muat naik fail. Salah satu langkahnya adalah untuk mengesahkan bahawa fail yang dimuat naik adalah betul. Bergantung pada nilai $_FILES["myFile"]["type"] atau lanjutan nama fail tidak selamat, kerana kedua -duanya terdedah kepada pemalsuan. Sebaliknya, gunakan fungsi seperti exif_imagetype() untuk memeriksa kandungan fail dan tentukan sama ada ia memang GIF, JPEG, atau beberapa format imej yang disokong lain. Jika exif_imagetype() tidak tersedia (fungsi memerlukan lanjutan EXIF ​​untuk didayakan), maka getimagesize() boleh digunakan. getimagesize() Arahan yang dikembalikan akan mengandungi jenis imej (jika diiktiraf).

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>

Untuk fail bukan imej, anda boleh menggunakan exec() untuk memanggil utiliti fail UNIX. Fail menentukan jenis fail dengan mencari tandatangan binari yang diketahui di lokasi yang diharapkan.

<code>file_uploads = On</code>

Langkah lain yang boleh anda ambil ialah mengenakan had ketat pada jumlah saiz permintaan pos dan bilangan fail yang boleh dimuat naik. Untuk melakukan ini, tentukan nilai yang sesuai untuk UPLOAD_MAX_SIZE, POST_MAX_SIZE, dan MAX_FILE_UPLOADS arahan dalam pHP.INI. Arahan upload_max_size menentukan saiz maksimum untuk memuat naik fail. Sebagai tambahan kepada saiz yang dimuat naik, anda juga boleh menggunakan Arahan Post_max_SIZE untuk mengehadkan saiz keseluruhan permintaan pos. max_file_uploads adalah arahan yang lebih baru (ditambah dalam versi 5.2.12) yang mengehadkan bilangan muat naik fail. Ketiga -tiga arahan ini membantu melindungi laman web anda dari serangan yang cuba melemahkan ketersediaannya dengan menyebabkan banyak trafik rangkaian atau beban sistem.

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>

Langkah ketiga yang boleh anda ambil ialah menggunakan pengimbas virus untuk mengimbas fail yang dimuat naik. Ini sangat penting dalam era virus dan malware yang meluas, terutamanya apabila laman web anda membolehkan individu lain memuat turun fail yang dimuat naik kemudian, seperti lampiran dalam pelanggan e-mel berasaskan web atau laman perkongsian fail (undang-undang). Terdapat sambungan PHP yang boleh mengakses Clamav, tetapi, tentu saja, anda boleh memanggil utiliti baris arahan Clamav seperti yang saya tunjukkan untuk fail.


Ringkasan

Anda telah belajar betapa mudahnya menggunakan laman web atau aplikasi berasaskan web anda untuk menyokong muat naik fail. Untuk memuat naik untuk berjaya, borang HTML mesti dikemukakan melalui permintaan pos multipart/form-data yang dikodkan, dan PHP mesti membenarkan pemindahan yang ditentukan menggunakan Arahan File_uploads. Selepas fail dipindahkan, skrip yang bertanggungjawab untuk mengendalikan muat naik bergerak fail dari direktori sementara ke lokasi yang dikehendaki menggunakan maklumat yang terdapat dalam array $_FILES. Saya juga berkongsi beberapa langkah berjaga -jaga tambahan yang boleh anda ambil untuk melindungi diri anda dan pengguna anda dari beberapa risiko yang berkaitan dengan membenarkan muat naik fail. Anda melihat bagaimana untuk memastikan nama fail selamat, mengesahkan jenis fail, mengenakan sekatan yang ketat pada trafik yang dimuat naik, dan mengimbas virus.

(kandungan seperti itu, seperti bahagian FAQ, boleh ditambah seperti yang diperlukan)

Atas ialah kandungan terperinci phpmaster | Memuat naik fail dengan php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn