cari
Rumahpembangunan bahagian belakangtutorial phpTeknologi muat naik dan muat turun fail dalam PHP

Teknologi muat naik dan muat turun fail dalam PHP

May 10, 2023 pm 10:31 PM
Muat naik failMuat turun failpengaturcaraan bahasa php

PHP ialah bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan web. Ia dicirikan oleh kemudahan pembelajaran, skalabiliti yang kuat dan kitaran pembangunan yang singkat, jadi ia disukai secara meluas oleh pembangun. Dalam pembangunan web, muat naik dan muat turun fail adalah keperluan biasa, dan PHP menyediakan beberapa fungsi dan kelas terbina dalam untuk membantu kami melaksanakan fungsi ini dengan mudah. Artikel ini akan memperkenalkan teknologi muat naik dan muat turun fail dalam PHP.

1. Teknologi muat naik fail

  1. Borang HTML

Dalam HTML, kita boleh menggunakan atribut jenis teg input untuk menjadi "fail" untuk create a Elemen borang muat naik fail adalah seperti berikut:

<form action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="上传文件" name="submit">
</form>

Perlu diingatkan bahawa borang perlu diserahkan menggunakan kaedah POST dan atribut enctype perlu ditetapkan kepada "multipart/form-data" supaya borang boleh menyokong muat naik fail. Pada masa yang sama, kita perlu mencipta elemen input dengan atribut nama "fileToUpload". Nilai atribut ini akan digunakan dalam kod PHP seterusnya untuk mendapatkan fail yang dimuat naik.

  1. Pemprosesan PHP

Selepas pengguna menyerahkan borang untuk memuat naik fail, kami perlu memprosesnya di latar belakang. Dalam PHP, kita boleh menggunakan tatasusunan super global $_FILES untuk mendapatkan fail yang dimuat naik.

<?php
$target_dir = "./uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// 检查文件是否是图片
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}

// 检查文件是否已经存在
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

// 允许上传的文件类型
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

// 如果所有检查都通过,上传文件
if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }
}
?>

Dalam kod di atas, kami mula-mula mentakrifkan direktori $target_dir untuk menyimpan fail yang dimuat naik, dan kemudian menjana laluan fail sasaran $target_file berdasarkan nama fail yang dimuat naik oleh pengguna dan $target_dir. Kemudian, kami melakukan beberapa siri semakan pada fail yang dimuat naik, seperti:

  • Semak sama ada fail itu ialah fail imej
  • Semak sama ada fail itu sudah wujud
  • Semak fail Sama ada saiznya terlalu besar
  • Semak sama ada jenis fail yang dimuat naik dibenarkan

Akhir sekali, jika semua semakan lulus, kami menggunakan fungsi move_uploaded_file untuk mengalihkan fail yang dimuat naik dari direktori tmp ke $ Lokasi yang ditentukan oleh target_file.

2. Teknologi muat turun fail

Muat turun fail secara amnya dibahagikan kepada dua cara Satu ialah memuat turun fail statik (seperti gambar, fail teks, fail audio dan video, dll.), yang adalah agak mudah; Yang lain ialah memuat turun fail yang dijana secara dinamik, yang agak menyusahkan.

  1. Muat turun fail statik

Dalam PHP, kami boleh memuat turun fail melalui fungsi header(), contohnya:

$file = "./downloads/test.txt";

// 设置HTTP头信息以告诉浏览器下载文件
header("Content-disposition: attachment;filename=".basename($file));
header("Content-type: application/octet-stream");
header("Content-Length: ".filesize($file));
header("Pragma: no-cache");
header("Expires: 0");

// 将文件内容读取并输出给浏览器
readfile($file);

Di atas Dalam kod, kami mula-mula menentukan fail $file dan menggunakan fungsi header() untuk menetapkan maklumat pengepala HTTP. Antaranya, Content-disposition menentukan nama fail yang dimuat turun, Content-type menentukan jenis fail, Content-Length menentukan saiz fail, dan Pragma and Expires digunakan untuk menghalang penyemak imbas daripada menyimpan cache fail yang dimuat turun.

Akhir sekali, kami menggunakan fungsi readfile() untuk membaca kandungan fail yang ditentukan dan mengeluarkannya kepada pelayar klien, sekali gus merealisasikan fungsi muat turun fail.

  1. Muat turun fail yang dijana secara dinamik

Untuk fail yang dijana secara dinamik, kami perlu menyimpannya ke pelayan dahulu, dan kemudian memuat turunnya sebagai fail statik.

$content = "Hello, world!";
$filename = "test.txt";
$file = "./downloads/".$filename;

// 将内容写入到文件中
$handle = fopen($file, "w");
fwrite($handle, $content);
fclose($handle);

// 返回下载文件给客户端
header("Content-disposition: attachment;filename=".$filename);
header("Content-type: application/octet-stream");
header("Content-Length: ".filesize($file));
header("Pragma: no-cache");
header("Expires: 0");
readfile($file);

// 下载完成后删除服务器端的文件
unlink($file);

Dalam kod di atas, kami mula-mula menyimpan fail $content yang dijana secara dinamik ke fail $filename di sisi pelayan, dan kemudian tetapkan maklumat pengepala HTTP melalui fungsi header() untuk membenarkan penyemak imbas klien Muat turun fail. Akhir sekali, kami menggunakan fungsi nyahpaut() untuk memadamkan fail pada bahagian pelayan untuk mengelakkan fail daripada menduduki sumber bahagian pelayan.

Ringkasan

Artikel ini memperkenalkan teknologi muat naik dan muat turun fail dalam PHP. Fungsi ini sangat praktikal untuk membangunkan aplikasi Web. Apabila menggunakan PHP untuk memuat naik dan memuat turun fail, anda perlu memberi perhatian kepada beberapa isu keselamatan, seperti menyemak jenis fail, saiz, nama fail, dll., untuk mengelakkan serangan oleh pengguna berniat jahat. Pada masa yang sama, kita juga harus mencuba yang terbaik untuk mengoptimumkan prestasi muat naik dan muat turun fail, mengurangkan pembaziran sumber pelayan dan pelanggan, dan meningkatkan pengalaman pengguna.

Atas ialah kandungan terperinci Teknologi muat naik dan muat turun fail dalam 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
Apakah beberapa masalah biasa yang boleh menyebabkan sesi PHP gagal?Apakah beberapa masalah biasa yang boleh menyebabkan sesi PHP gagal?Apr 25, 2025 am 12:16 AM

Sebab -sebab kegagalan phpsession termasuk kesilapan konfigurasi, isu cookie, dan tamat tempoh sesi. 1. Ralat Konfigurasi: Semak dan tetapkan session.save_path yang betul. Masalah 2.Cookie: Pastikan kuki ditetapkan dengan betul. 3.Session Expires: Laraskan Nilai Sesi.GC_MAXLifetime untuk melanjutkan masa sesi.

Bagaimanakah anda menyebarkan isu berkaitan sesi dalam PHP?Bagaimanakah anda menyebarkan isu berkaitan sesi dalam PHP?Apr 25, 2025 am 12:12 AM

Kaedah untuk masalah sesi debug dalam PHP termasuk: 1. Periksa sama ada sesi dimulakan dengan betul; 2. Sahkan penghantaran ID sesi; 3. Semak penyimpanan dan bacaan data sesi; 4. Semak konfigurasi pelayan. Dengan mengeluarkan ID dan data sesi, melihat kandungan fail sesi, dan lain-lain, anda boleh mendiagnosis dan menyelesaikan masalah yang berkaitan dengan sesi.

Apa yang berlaku jika session_start () dipanggil beberapa kali?Apa yang berlaku jika session_start () dipanggil beberapa kali?Apr 25, 2025 am 12:06 AM

Pelbagai panggilan ke session_start () akan menghasilkan mesej amaran dan kemungkinan penggantian data. 1) PHP akan mengeluarkan amaran, menyebabkan sesi telah dimulakan. 2) Ia boleh menyebabkan penggantian data sesi yang tidak dijangka. 3) Gunakan session_status () untuk memeriksa status sesi untuk mengelakkan panggilan berulang.

Bagaimana anda mengkonfigurasi seumur hidup sesi di PHP?Bagaimana anda mengkonfigurasi seumur hidup sesi di PHP?Apr 25, 2025 am 12:05 AM

Mengkonfigurasi kitaran hayat sesi dalam PHP boleh dicapai dengan menetapkan sesi.gc_maxlifetime dan session.cookie_lifetime. 1) session.gc_maxlifetime mengawal masa survival data sesi pelayan, 2) session.cookie_lifetime mengawal kitaran hayat kuki klien. Apabila ditetapkan ke 0, kuki tamat apabila penyemak imbas ditutup.

Apakah kelebihan menggunakan pangkalan data untuk menyimpan sesi?Apakah kelebihan menggunakan pangkalan data untuk menyimpan sesi?Apr 24, 2025 am 12:16 AM

Kelebihan utama menggunakan sesi penyimpanan pangkalan data termasuk kegigihan, skalabilitas, dan keselamatan. 1. Kegigihan: Walaupun pelayan dimulakan semula, data sesi tidak dapat berubah. 2. Skalabiliti: Berkenaan dengan sistem yang diedarkan, memastikan data sesi disegerakkan di antara pelbagai pelayan. 3. Keselamatan: Pangkalan data menyediakan storan yang disulitkan untuk melindungi maklumat sensitif.

Bagaimana anda melaksanakan pengendalian sesi tersuai di PHP?Bagaimana anda melaksanakan pengendalian sesi tersuai di PHP?Apr 24, 2025 am 12:16 AM

Melaksanakan pemprosesan sesi tersuai dalam PHP boleh dilakukan dengan melaksanakan antara muka sessionHandlerInterface. Langkah -langkah khusus termasuk: 1) mewujudkan kelas yang melaksanakan sessionHandlerInterface, seperti CustomSessionHandler; 2) kaedah penulisan semula dalam antara muka (seperti terbuka, rapat, membaca, menulis, memusnahkan, gc) untuk menentukan kitaran hayat dan kaedah penyimpanan data sesi; 3) Daftar pemproses sesi tersuai dalam skrip PHP dan mulakan sesi. Ini membolehkan data disimpan dalam media seperti MySQL dan REDIS untuk meningkatkan prestasi, keselamatan dan skalabiliti.

Apakah ID Sesi?Apakah ID Sesi?Apr 24, 2025 am 12:13 AM

SesionID adalah mekanisme yang digunakan dalam aplikasi web untuk mengesan status sesi pengguna. 1. Ia adalah rentetan yang dijana secara rawak yang digunakan untuk mengekalkan maklumat identiti pengguna semasa pelbagai interaksi antara pengguna dan pelayan. 2. Pelayan menjana dan menghantarnya kepada klien melalui kuki atau parameter URL untuk membantu mengenal pasti dan mengaitkan permintaan ini dalam pelbagai permintaan pengguna. 3. Generasi biasanya menggunakan algoritma rawak untuk memastikan keunikan dan ketidakpastian. 4. Dalam pembangunan sebenar, pangkalan data dalam memori seperti REDIS boleh digunakan untuk menyimpan data sesi untuk meningkatkan prestasi dan keselamatan.

Bagaimanakah anda mengendalikan sesi dalam persekitaran tanpa kerakyatan (mis., API)?Bagaimanakah anda mengendalikan sesi dalam persekitaran tanpa kerakyatan (mis., API)?Apr 24, 2025 am 12:12 AM

Menguruskan sesi dalam persekitaran tanpa kerakyatan seperti API boleh dicapai dengan menggunakan JWT atau cookies. 1. JWT sesuai untuk ketiadaan dan skalabilitas, tetapi ia adalah saiz yang besar ketika datang ke data besar. 2.Cookies lebih tradisional dan mudah dilaksanakan, tetapi mereka perlu dikonfigurasikan dengan berhati -hati untuk memastikan keselamatan.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa