Muat naik fail tutorial asas pembangunan PHP
1. Muat naik fail PHP
Kami sering menghadapi banyak situasi seperti ini dalam penggunaan harian kami:
-
Muat naik gambar dalam ruang QQ
Muat naik gambar dalam WeChat Moments
Hantar e-mel dan muat naik lampiran e-mel
Diperlukan untuk memuat naik foto atau kad pengenalan semasa pengesahan
Terdapat juga pelbagai tuntutan yang dikemukakan oleh gou (gou) untuk menganalisis dan memuat naik perkara yang berbeza.
Kita perlu merealisasikan keperluan yang dikemukakan oleh produk Wang.
Memuat naik fail ialah salah satu kemahiran penting untuk pengaturcara PHP.
Dengan mempelajari muat naik fail, anda akan melihat intipati muat naik fail melalui fenomena penggunaan!
2 Perhatikan fail php.ini semasa memuat naik fail
Sebelum kami menerangkan secara rasmi muat naik bab ini, perkara pertama yang perlu kita lakukan ialah Beri perhatian kepada fail php.ini.
Buat pertama kali, kami diperkenalkan dengan cara mengubah suai fail php.ini Jika item konfigurasi anda tidak konsisten dengan apa yang kami katakan, sila beri perhatian kepada pengubahsuaian.
Mari kita fahami setiap item konfigurasi.
Mari kita lihat cara mengubah suai php.ini.
Buka fail konfigurasi php.ini dalam phpstudy.
Terdapat terlalu banyak fail php.ini Jika anda tidak menemuinya, anda boleh menggunakan ctrl+f untuk mencari item konfigurasi yang berkaitan.
Saiz yang disyorkan: saiz_fail < ; post_max_size < memory_limit
Selain itu, anda perlu memberi perhatian kepada masa pelaksanaan skrip.
max_execution_time, unit parameter ini ialah saat.
Parameter ini adalah untuk menetapkan masa pelaksanaan maksimum skrip.
Anda juga boleh membuat perubahan yang sesuai mengikut keperluan anda. Biasanya tidak perlu mengubahnya, nilai lalai sistem sudah mencukupi. Apabila memuat naik fail yang sangat besar, parameter ini mungkin diubah suai.
Muat naik mengambil masa terlalu lama dan akan tamat masa. Jika anda menetapkan parameter ini kepada 0, tempoh tamat masa tidak terhad dan tidak disyorkan.
Selepas melengkapkan konfigurasi php.ini yang berkaitan, kami boleh mula mencuba untuk melengkapkan muat naik fail pertama.
3 Langkah-langkah memuat naik fail
Untuk mempelajari PHP dengan lebih baik, kami akan meringkaskan muat naik fail PHP yang sangat kompleks. Diringkaskan kepada 6 langkah.
Dalam penggunaan sebenar, anda boleh melengkapkan muat naik fail PHP dengan jayanya dengan mengikuti 6 langkah berikut:
1 Tentukan sama ada terdapat kod ralat
Penjelasan terperinci tentang kod ralat yang dikembalikan oleh sistem:
Nota: Tiada ralat kod 5
2. Sesuaikan sama ada saiz fail melebihi julat
Apabila membangunkan fungsi muat naik. Sebagai pembangun, kami, sebagai tambahan kepada nilai muat naik maksimum yang dinyatakan dalam php.ini.
Kami biasanya juga menetapkan nilai, iaitu had saiz muat naik yang ditentukan oleh perniagaan.
Contohnya:
Sina Weibo atau Zon QQ hanya membenarkan satu gambar avatar 2M. Apabila memuat naik album, anda boleh memuat naik lebih daripada 2J.
Jadi, sistemnya menyokong muat naik fail yang lebih besar.
Saiz fail penghakiman di sini digunakan untuk mengehadkan saiz fail yang dimuat naik yang ingin kami tentukan dalam perniagaan sebenar.
3. Tentukan sama ada nama akhiran dan jenis mim sepadan
Terdapat juga orang jahat dalam dunia dalam talian. Mereka akan memasukkan virus ke dalam gambar, memuat naik virus dalam lampiran, dan mereka akan memasukkan virus atau gambar lucah ke dalam halaman web.
Kita perlu menilai jenis akhiran dan mime bagi fail yang dimuat naik.
MIME (Sambungan Mel Internet Serbaguna) ialah jenis sambungan mel Internet pelbagai guna. Ia adalah sejenis kaedah yang menetapkan fail dengan sambungan tertentu untuk dibuka oleh aplikasi Apabila fail dengan sambungan itu diakses, penyemak imbas secara automatik akan menggunakan aplikasi yang ditentukan untuk membukanya. Ia kebanyakannya digunakan untuk menentukan beberapa nama fail yang ditentukan pelanggan dan beberapa kaedah pembukaan fail media.
Apabila menentukan akhiran dan jenis MIME, kami akan menggunakan fungsi PHP in_array(), yang lulus dalam dua parameter.
Parameter pertama ialah nilai yang akan dinilai
Parameter kedua ialah tatasusunan julat.
Kami menggunakan fungsi ini untuk menentukan sama ada sambungan fail dan jenis mime berada dalam julat yang dibenarkan.
4. Jana nama fail
Fail kami telah berjaya dimuat naik, tetapi ia tidak akan menyimpan nama asal.
Kerana sesetengah orang yang mempunyai kata kunci sensitif dalam nama asal mereka akan melanggar undang-undang dan peraturan yang berkaitan di negara kita.
Kami boleh menggunakan date(), mt_rand() atau unique() untuk menjana nama fail rawak.
5 Tentukan sama ada fail dimuat naik
Apabila fail berjaya dimuat naik, sistem akan memuat naik fail sementara yang dimuat naik ke sistem. direktori sementara. Buat fail sementara.
Nama fail sementara juga akan dijana. Apa yang perlu kita lakukan ialah mengalihkan fail sementara ke direktori yang ditentukan pada sistem.
Adalah tidak saintifik untuk tidak bergerak secara membuta tuli sebelum bergerak, atau bergerak secara salah. Sebelum berpindah, kita perlu menggunakan fungsi yang berkaitan untuk menentukan sama ada fail yang dimuat naik adalah fail sementara.
is_uploaded_file() lulus dalam parameter (nama fail cache dalam $_FILES) untuk menentukan sama ada nama yang diluluskan ialah fail yang dimuat naik
6 lokasi
Fail sementara ialah fail sementara sebenar, kami perlu mengalihkannya ke direktori tapak web kami.
Jadikan data dalam direktori tapak web kami boleh diakses oleh orang lain.
Kami menggunakan: move_uploaded_file().
Fungsi ini mengalihkan fail yang dimuat naik ke lokasi yang ditentukan dan menamakannya.
Lepaskan dalam dua parameter:
Parameter pertama ialah fail yang dimuat naik yang menentukan pergerakan
Parameter kedua ialah rentetan yang menggabungkan folder dan nama yang ditentukan
4. Nota pada borang muat naik fail
Kami memulakan pembelajaran formal dan belajar cara memuat naik fail. Untuk memuat naik fail, borang mesti disediakan di halaman web.
Ini adalah borang halaman HTML yang ringkas Borang borang menyediakan kelas khusus untuk kandungan fail Apabila type=file dimasukkan, kandungan fail dimuat naik secara lalai.
Mari kita lihat kod dan nota borang
<html> <head> <meta charset="utf-8" /> <title>單文件上傳</title> </head> <body> <form action="file.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上傳"> </form> </body> </html>
Nota:
Kaedah parameter dalam borang borang mestilah pos. Jika dapat, muat naik fail tidak boleh dilakukan
enctype mestilah berbilang bahagian/data-bentuk
5. Lengkapkan muat naik fail mengikut tatasusunan dan langkah
1 Fungsi sistem $_FILES
Kandungan fail yang dihantar oleh borang. borang menunjuk ke fail.php .
Kami memproses fail yang dimuat naik melalui kod PHP dalam file.php.
Kami memilih gambar bernama untuk dimuat naik. Andaikan nama gambar ialah: hua.jpg, klik untuk memuat naik.
PHP telah menyediakan fungsi sistem khas $_FILES untuk data fail Semua data berkaitan fail yang dimuat naik disimpan dalam fungsi sistem ini.
Dalam fail PHP, kami mencetak $_FILES untuk memerhati struktur tatasusunan ini:
<?php //var_dump()或print_r() //打印變量的相關(guān)信息,將變量的信息詳細(xì)的展示出來(lái) var_dump($_FILES); ?>
Struktur tatasusunan hasil cetakan adalah seperti berikut:
Struktur tatasusunan di atas diperolehi.
Kita boleh memulakan proses pemprosesan fail.
2. Tentukan kod ralat
<?php if($_FILES['file']['error'] > 0){ switch ($_FILES['file']['error']) { //錯(cuò)誤碼不為0,即文件上傳過(guò)程中出現(xiàn)了錯(cuò)誤 case '1': echo '文件過(guò)大'; break; case '2': echo '文件超出指定大小'; break; case '3': echo '只有部分文件被上傳'; break; case '4': echo '文件沒(méi)有被上傳'; break; case '6': echo '找不到指定文件夾'; break; case '7': echo '文件寫(xiě)入失敗'; break; default: echo "上傳出錯(cuò)<br/>"; } }else{ //錯(cuò)誤碼為0,即上傳成功,可以進(jìn)行后續(xù)處理,處理流程見(jiàn)下文 } ?>
Kod di atas memperkenalkan kod ralat dan ralat yang sepadan secara terperinci .
3 Tentukan sama ada fail melebihi saiz
Dalam projek sebenar, disebabkan had perkakasan sistem dan had peranti storan, adalah mustahil untuk membenarkan pengguna memuat naik tanpa sekatan fail, jadi kami perlu mengehadkan saiz fail yang dimuat naik oleh pengguna. Menentukan saiz had yang sesuai boleh menjadikan aplikasi kami berjalan dengan lebih stabil.
//判斷錯(cuò)誤 if($_FILES['file']['error'] > 0){ //有錯(cuò)誤可停止執(zhí)行 }else{ //當(dāng)前上傳文件無(wú)誤,運(yùn)行本段代碼 //判斷文件是否超出了指定的大小 //單位為byte $MAX_FILE_SIZE = 100000; if($_FILES['file']['size'] > $MAX_FILE_SIZE){ //判斷,如果上傳的文件,大小超出了我們給的限制范圍,退上傳并產(chǎn)生錯(cuò)誤提示 exit("文件超出指定大小"); }
Mentakrifkan saiz fail yang kami tentukan sebagai $MAX_FILE_SIZE Unit pengiraan pembolehubah ini ialah bait, yang sepadan dengan saiz $_FILES['file']['size'] bagi fail yang dimuat naik.
Dalam kod sampel, had adalah fail dengan saiz lebih kurang 100K dan ke bawah.
4 Tentukan sama ada jenis mime fail adalah betul
Selalunya, fungsi muat naik fail kami perlu menentukan sama ada fail yang dimuat naik oleh pengguna memenuhi keperluan. . Selepas memuat naik fail yang tidak tersedia, ia akan memberi kesan negatif pada kesan paparan keseluruhan aplikasi dalam talian. Jadi kita perlu menggunakan jenis mime dan nama akhiran untuk menentukan sama ada fail yang dimuat naik oleh pengguna memenuhi keperluan.
Dalam kod contoh di bawah, kami menganggap bahawa keperluan projek semasa adalah untuk menentukan imej yang dimuat naik, memerlukan muat naik fail dengan akhiran GIF atau jpg Apabila pengguna memuat naik fail yang tidak memenuhi keperluan, mesej ralat dikembalikan.
/*判斷后綴名和MIME類(lèi)型是否符合指定需求 例如: 當(dāng)前項(xiàng)目指定上傳后綴為.jpg或.gif的圖片,則$allowSuffix = array('jpg','gif'); */ //定義允許的后綴名數(shù)組 $myImg = explode('.', $_FILES['file']['name']); /* explode() 將一個(gè)字符串用指定的字符切割,并返回一個(gè)數(shù)組,這里我們將文件名用'.''切割,結(jié)果存在$myImg中,文件的后綴名即為數(shù)組的最后一個(gè)值 */ $myImgSuffix = array_pop($myImg); /* 根據(jù)上傳文件名獲取文件的后綴名 使用in_array()函數(shù),判斷上傳文件是否符合要求 當(dāng)文件后綴名不在我們?cè)试S的范圍內(nèi)時(shí)退出上傳并返回錯(cuò)誤信息 */ if(!in_array($myImgSuffix, $allowSuffix)){ exit("文件后綴名不符"); } /* mime類(lèi)型和文件后綴名的對(duì)應(yīng)關(guān)系,我們可以通過(guò)很多途徑查詢到,為了避免用戶自主修改文件后綴名造成文件無(wú)法使用。 mime類(lèi)型也必須做出限制檢查mime類(lèi)型,是為了防止上傳者直接修改文件后綴名 導(dǎo)致文件不可用或上傳的文件不符合要求。 */ //數(shù)組內(nèi)容為允許上傳的mime類(lèi)型 $allowMime = array( "image/jpg", "image/jpeg", "image/pjpeg", "image/gif" ); if(!in_array($_FILES['file']['type'], $allowMime)){ //判斷上傳文件的mime類(lèi)型是否在允許的范圍內(nèi) exit('文件格式不正確,請(qǐng)檢查'); //如果不在允許范圍內(nèi),退出上傳并返回錯(cuò)誤信息 }
5 Hasilkan laluan dan nama fail yang ditentukan
Jana laluan penyimpanan fail mengikut susunan fail projek Untuk mengelakkan ralat yang disebabkan oleh nama fail pendua, nama fail rawak dijana mengikut format tertentu.
//指定上傳文件夾 $path = "upload/images/"; /* 根據(jù)當(dāng)前時(shí)間生成隨機(jī)文件名,本行代碼是使用當(dāng)前時(shí)間 + 隨機(jī)一個(gè)0-9的數(shù)字組合成文件名,后綴即為前面取到的文件后綴名 */ $name = date('Y').date('m').date("d").date('H').date('i').date('s').rand(0,9).'.'.$myImgSuffix;
6 Tentukan sama ada fail itu dimuat naik
Fungsi is_uploaded_file() ialah fungsi khusus untuk menentukan sama ada fail sasaran ialah fail yang dimuat naik.
<?php //使用is_uploaded_file()判斷是否是上傳文件,函數(shù)介紹見(jiàn)上文 if(is_uploaded_file($_FILEs['file']['tmp_name'])){ } ?>
7 Alihkan fail ke lokasi yang ditentukan
Gunakan fungsi move_uploaded_file() untuk mengalihkan fail ke lokasi yang ditentukan dan namakannya. Perlu diingatkan bahawa sistem Linux mempunyai kebenaran pada direktori sasaran dan sama ada ruang cakera mencukupi, jika tidak, operasi muat naik akan gagal.
/* 使用move_uploaded_file()移動(dòng)上傳文件至指定位置,第一個(gè)參數(shù)為上傳文件,第二個(gè)參數(shù)為我們?cè)谇懊嬷付ǖ纳蟼髀窂胶兔Q(chēng)。 */ if(move_uploaded_file($_FILEs['file']['tmp_name'], $path.$name)){ //提示文件上傳成功 echo "上傳成功"; }else{ /* 文件移動(dòng)失敗,檢查磁盤(pán)是否有足夠的空間,或者linux類(lèi)系統(tǒng)中文件夾是否有足夠的操作權(quán)限 */ echo '上傳失敗'; } }else{ echo '不是上傳文件'; } } ?>
Kod lengkap adalah seperti berikut:
<?php if ($_FILES['file']['error'] > 0) { switch ($_FILES['file']['error']) { //錯(cuò)誤碼不為0,即文件上傳過(guò)程中出現(xiàn)了錯(cuò)誤 case '1': echo '文件過(guò)大'; break; case '2': echo '文件超出指定大小'; break; case '3': echo '只有部分文件被上傳'; break; case '4': echo '文件沒(méi)有被上傳'; break; case '6': echo '找不到指定文件夾'; break; case '7': echo '文件寫(xiě)入失敗'; break; default: echo "上傳出錯(cuò)<br/>"; } } else { $MAX_FILE_SIZE = 100000; if ($_FILES['file']['size'] > $MAX_FILE_SIZE) { exit("文件超出指定大小"); } $allowSuffix = array( 'jpg', 'gif', ); $myImg = explode('.', $_FILES['file']['name']); $myImgSuffix = array_pop($myImg); if (!in_array($myImgSuffix, $allowSuffix)) { exit("文件后綴名不符"); } $allowMime = array( "image/jpg", "image/jpeg", "image/pjpeg", "image/gif", ); if (!in_array($_FILES['file']['type'], $allowMime)) { exit('文件格式不正確,請(qǐng)檢查'); } $path = "upload/images/"; $name = date('Y') . date('m') . date("d") . date('H') . date('i') . date('s') . rand(0, 9) . '.' . $myImgSuffix; if (is_uploaded_file($_FILEs['file']['tmp_name'])) { if (move_uploaded_file($_FILEs['file']['tmp_name'], $path . $name)) { echo "上傳成功"; } else { echo '上傳失敗'; } } else { echo '不是上傳文件'; } } ?>
6. Muat naik berbilang fail
Memperkenalkan proses memuat naik satu fail dalam PHP. Tetapi kadangkala, untuk kemudahan, kita perlu memenuhi keperluan untuk memuat naik berbilang fail pada masa yang sama. Prinsip muat naik berbilang fail adalah sama, tetapi apabila memproses data, data yang dimuat naik perlu diproses khas.
<html> <head> <meta charset="utf-8" /> <title>單文件上傳</title> </head> <body> <form action="morefile.php" method="post" enctype="multipart/form-data"> <input type="file" name="file[]"> <input type="file" name="file[]"> <input type="submit" value="上傳"> </form> </body> </html>
Berikut ialah halaman muat naik yang mudah, dan borang menyerahkan dua fail pada masa yang sama. Kami boleh menghantar kandungan melalui halaman ini.
Nota:
input type="file" name="file[]" ditambah selepas fail berbanding sebelum A kurungan segi empat sama
menulis 2 atau lebih jenis input="file" name="file[]"
Kami menggunakan $_FILES untuk menerima maklumat Fail, mencetak dan lihat tatasusunan:
<?php var_dump($_FILES); //打印$_FILES查看數(shù)組結(jié)構(gòu) ?>
Struktur tatasusunan ditunjukkan di sebelah kanan
Kita dapat melihat bahawa dua fail disimpan dalam tatasusunan , nama kunci adalah sama dengan fail tunggal yang dimuat naik. Oleh itu, kita perlu menggunakan gelung for() untuk mendapatkan semula data yang diperlukan daripada kedua-dua fail masing-masing.
Data dua fail disimpan dalam $_FILES pada masa yang sama Kita perlu menggunakan gelung mudah untuk membaca maklumat satu fail dan memindahkan fail ke lokasi yang kita mahu.
for ($i=0; $i < count($_FILE['file']['name']); $i++) { /* 用is_uploaded_file()函數(shù)判斷是上傳文件 并且沒(méi)有出現(xiàn)錯(cuò) */ if(is_uploaded_file($_FILEs['file']['tmp_name'][$i]) && $_FILEs['file']['error'][$i] == 0){ if(move_uploaded_file($_FILEs['file']['tmp_name'][$i],'upload/'.$_FILE['file']['name'][$i])){ //用move_uploaded_file()函數(shù)移動(dòng)文件到指定的位置并使用文件原名 echo "上傳成功"; }else{ echo '上傳失敗'; } }else{ echo '上傳失敗'; } }
Untuk proses penghakiman terperinci, sila rujuk muat naik fail tunggal Hanya pertimbangan asas dibuat di sini, dan tiada peringatan tentang saiz dan format fail.
Sila nilaikan sendiri saiz dan format fail mengikut perniagaan dan berikan peringatan ralat.
7. Pemprosesan kemajuan muat naik fail
Apabila fail terlalu besar atau status rangkaian pengguna adalah sederhana, proses muat naik biasanya mengambil sedikit masa, jika pengguna dibiarkan menunggu dengan skrin kosong pada masa ini, saya percaya kebanyakan pengguna hanya akan menutup aplikasi, jadi keperluan untuk memantau kemajuan muat naik dan melaporkan kepada pengguna dalam masa nyata diletakkan pada desktop oleh produk Wang. Gesaan kemajuan muat naik yang berkualiti tinggi akan membuatkan apl anda dipandang tinggi dengan serta-merta.
Sebelum PHP 5.4, anda sentiasa perlu memasang sambungan tambahan untuk memantau kemajuan muat naik fail. Bermula dari 5.4, ciri baharu session.upload_progress diperkenalkan Kami hanya perlu mendayakan konfigurasi dalam php.ini untuk memantau kemajuan muat naik fail melalui sesi. dalam php.ini.
Nota: Untuk mempelajari bab ini, anda perlu mempunyai pengetahuan asas tentang session dan javascript serta ajax.
Kami perlu mengkonfigurasi, memberi perhatian untuk menyemak dan mengubah suai fail php.ini:
Dengan konfigurasi didayakan, kami boleh merekodkan kemajuan muat naik fail yang lengkap melalui sesi . Dalam sesi, tatasusunan dengan keputusan berikut akan muncul:
$_SESSION["upload_progress_test"] = array( //請(qǐng)求時(shí)間 "start_time" => 1234567890, // 上傳文件總大小 "content_length" => 57343257, //已經(jīng)處理的大小 "bytes_processed" => 453489, //當(dāng)所有上傳處理完成后為T(mén)RUE,未完成為false "done" => false, "files" => array( 0 => array( //表單中上傳框的名字 "field_name" => "file1", //上傳文件的名稱(chēng) "name" => "test1.avi", //緩存文件,上傳的文件即保存在這里 "tmp_name" => "/tmp/phpxxxxxx", //文件上傳的錯(cuò)誤信息 "error" => 0, //是否上傳完成,當(dāng)這個(gè)文件處理完成后會(huì)變成TRUE "done" => true, //這個(gè)文件開(kāi)始處理時(shí)間 "start_time" => 1234567890, //這個(gè)文件已經(jīng)處理的大小 "bytes_processed" => 57343250, ), 1 => array( "field_name" => "file2", "name" => "test2.avi", "tmp_name" => NULL, "error" => 0, "done" => false, "start_time" => 1234567899, "bytes_processed" => 54554, ), ) );
Tatasusunan ini merekodkan kemajuan muat naik fail secara terperinci dan status fail yang telah diproses adalah benar. Seterusnya, kami menggunakan contoh AJAX jQuery untuk mempelajari proses kemajuan muat naik fail.
Pertama, dalam borang, anda perlu menambah teg input dengan type=hidden, dan nilai teg adalah tersuai (adalah disyorkan untuk menggunakan nilai yang bermakna, kerana nilai ini akan digunakan di latar belakang)
<form id="upload-form" action="upload.php" method="POST" enctype="multipart/form-data" style="margin:15px 0" target="hidden_iframe"> <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="test" /> <p><input type="file" name="file1" /></p> <p><input type="submit" value="Upload" /></p> </form> <div id="progress" style="margin-bottom:15px;display:none;"> <div>0%</div> </div>
Di sini, div dengan ID kemajuan ditambahkan sebagai bekas untuk memaparkan kemajuan muat naik. Kami menggunakan setTimeout() js untuk melaksanakan ajax dengan kerap untuk mendapatkan kemajuan muat naik fail, dan fail latar belakang mengembalikan peratusan kemajuan muat naik fail.
<script src="../jquery/1.8.2/jquery.min.js"></script> <script type="text/javascript"> function fetch_progress(){ $.get('progress.php',{ '<?php echo ini_get("session.upload_progress.name"); ?>' : 'test'}, function(data){ var progress = parseInt(data); $('#progress .label').html(progress + '%'); if(progress < 100){ setTimeout('fetch_progress()', 100); //當(dāng)上傳進(jìn)度小于100%時(shí),顯示上傳百分比 }else{ $('#progress .label').html('完成!'); //當(dāng)上傳進(jìn)度等于100%時(shí),顯示上傳完成 } }, 'html'); } $('#upload-form').submit(function(){ $('#progress').show(); setTimeout('fetch_progress()', 100);//每0.1秒執(zhí)行一次fetch_progress(),查詢文件上傳進(jìn)度 }); </script>
Kod di atas mengembalikan kemajuan muat naik fail setiap 0.1 saat melalui ajax JQ. Dan paparkan peratusan kemajuan dalam teg div.
Kod latar belakang perlu dibahagikan kepada dua bahagian upload.php mengendalikan muat naik fail. progress.php mendapat kemajuan muat naik dalam sesi dan mengembalikan peratusan kemajuan.
Saya tidak akan menerangkan butiran tentang muat naik fail di sini. Sila rujuk perkara di atas untuk mendapatkan langkah terperinci.php:
<?php if(is_uploaded_file($_FILES['file1']['tmp_name'])){ //判斷是否是上傳文件 //unlink($_FILES['file1']['tmp_name']); move_uploaded_file($_FILES['file1']['tmp_name'], "./{$_FILES['file1']['name']}"); //將緩存文件移動(dòng)到指定位置 } ?> 主要關(guān)注progress.php: <?php /* 開(kāi)啟session。請(qǐng)注意在session_start()之前,請(qǐng)不要有想瀏覽器輸出內(nèi)容的動(dòng)作,否則可能引起錯(cuò)誤。 */ session_start(); //ini_get()獲取php.ini中環(huán)境變量的值 $i = ini_get('session.upload_progress.name'); //ajax中我們使用的是get方法,變量名稱(chēng)為ini文件中定義的前綴 拼接 傳過(guò)來(lái)的參數(shù) $key = ini_get("session.upload_progress.prefix") . $_GET[$i]; //判斷 SESSION 中是否有上傳文件的信息 if (!empty($_SESSION[$key])) { //已上傳大小 $current = $_SESSION[$key]["bytes_processed"]; //文件總大小 $total = $_SESSION[$key]["content_length"]; //向 ajax 返回當(dāng)前的上傳進(jìn)度百分比。 echo $current < $total ? ceil($current / $total * 100) : 100; }else{ echo 100; } ?>
Pada ketika ini, kod kemajuan fail telah selesai. Dengan bahagian hadapan, kita boleh melakukan fungsi muat naik fail yang hebat!
Pengalaman pembelajaran: Ingat enam langkah muat naik fail