Untuk berjaya melaksanakan fungsi muat naik, anda mesti mendayakan muat naik fail terlebih dahulu dalam php.ini dan membuat tetapan munasabah untuk beberapa parameter Cari item Muat Naik Fail dan anda boleh melihat bahawa terdapat tiga atribut di bawah, dengan maksud berikut.
muat naik fail: Jika nilai dihidupkan, ini bermakna pelayan menyokong muat naik fail. Jika tidak
upload_tmp_dir: direktori sementara untuk memuat naik fail. Sebelum fail berjaya dimuat naik, fail tersebut terlebih dahulu disimpan dalam direktori sementara pelayan. Jika anda ingin mengetahui lokasi, anda boleh menetapkan laluan storan kemudian, jika tidak, gunakan direktori lalai sistem
upload_max_filesize: Nilai maksimum fail yang dibenarkan untuk dimuat naik oleh pelayan, dalam MB. Lalai sistem ialah 2MB, pengguna boleh menetapkannya sendiri
★ Jika anda menggunakan pakej pemasangan bersepadu untuk mengkonfigurasi persekitaran pembangunan PHP, maklumat konfigurasi yang diterangkan di atas telah dikonfigurasikan secara lalai.
Langkah muat naik fail
Untuk pembelajaran PHP yang lebih baik, kami telah meringkaskan muat naik fail PHP yang kompleks 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:
Kod ralat | Penerangan |
0 | Betul, anda boleh meneruskan operasi muat naik fail yang seterusnya. |
1 | Melebihi had maksimum fail yang dimuat naik, upload_max_filesize = 2M ditetapkan dalam php. ini, Umumnya lalai ialah 2M. Boleh diubah suai mengikut keperluan sebenar projek |
| Melebihi saiz fail yang ditentukan, nyatakan had saiz untuk fail yang dimuat naik mengikut keperluan perniagaan projek |
3 | Hanya beberapa fail telah dimuat naik |
4 | 文件没有被上传 |
6 | 找不到临时文件夹,可能目录不存在或没权限 |
7 | 文件写入失败,可能磁盘满了或没有权限 |
Nota★: Tiada 5 dalam kod ralat
2. Sesuaikan sama ada untuk menilai sama ada julat saiz fail melebihi
semasa 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 MIME sepadan
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 berjaya dimuat naik, tetapi ia tidak akan menyimpan nama asal.
Oleh 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 itu dimuat naik.
Fail kami berjaya dimuat naik, tetapi ia tidak akan menyimpan nama asal.
Kami boleh menggunakan date(), mt_rand() atau unique() untuk menjana nama fail rawak. Apabila muat naik fail berjaya, sistem akan memuat naik fail sementara yang dimuat naik ke direktori sementara sistem. 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 bergerak, 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 adalah fail yang dimuat naik.
6. Alihkan fail sementara ke direktori yang ditentukan
Fail sementara ialah fail sementara sebenar, kita perlu memindahkannya ke direktori kami di bawah direktori laman web.
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.
Masukkan dua parameter:
Parameter pertama ialah fail yang dimuat naik yang menentukan langkah itu;
Parameter kedua ialah rentetan yang menggabungkan folder dan nama yang ditentukan.
Untuk memuat naik fail, borang mesti disediakan di halaman web. Seperti
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP中文网</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>
berikut Nota:
1 Kaedah parameter dalam borang borang mestilah pos. Jika mendapat, muat naik fail tidak boleh dilakukan
2 Enctype mestilah berbilang bahagian/form-dat
3 Apabila type=file dipilih, lalai adalah untuk memuat naik kandungan fail .
Kandungan fail yang diserahkan oleh borang di atas menunjukkan kepada file.php.
Kami memproses fail yang dimuat naik melalui kod PHP dalam file.php.
Kami memilih gambar bernama untuk dimuat naik. Andaikan nama gambar ialah: .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() //打印变量的相关信息,将变量的信息详细的展示出来 var_dump($_FILES); ?>
Keputusan menjalankan program:
array(1) {
["fail"]=>
tatasusunan(5) {
["nama"]=>
rentetan(7) "psu.jpg"
["jenis"]=> ;
rentetan(10) "imej/jpeg"
["tmp_name"]=>
rentetan(22) "C:WindowsphpE2F1.tmp"
["error"]=>
int(0)
["saiz"]=>
int(488929)
}
}
Struktur tatasusunan hasil cetakan adalah seperti berikut:
Kita boleh memulakan proses pemprosesan failtatasusunan (saiz=1)
'fail' =>
tatasusunan (saiz=5)
//Nama fail
'nama' => rentetan 'psu .jpg' (length=7)
//Jenis mime fail
'type' => rentetan 'imej/jpeg' (panjang=10)
// Fail cache, gambar yang dimuat naik disimpan di sini
'tmp_name' => rentetan 'E:wamptmpphpC32A.tmp' (length=23)
//Kod ralat, lihat pengenalan kod ralat di atas untuk butiran
' ralat' => ; int 0 🎜>
Faham Struktur tatasusunan di atas.
.
Langkah pertama ialah menentukan kod ralat
<?php
header("Content-type:text/html;charset=utf-8");
if($_FILES['file']['error'] > 0){
switch ($_FILES['file']['error']) { //错误码不为0,即文件上传过程中出现了错误
case '1':
echo '文件过大';
break;
case '2':
echo '文件超出指定大小';
break;
case '3':
echo '只有部分文件被上传';
break;
case '4':
echo '文件没有被上传';
break;
case '6':
echo '找不到指定文件夹';
break;
case '7':
echo '文件写入失败';
break;
default:
echo "上传出错<br/>";
}
}else{
echo "上传成功";//错误码为0,即上传成功,可以进行后续处理,处理流程见下文
}
?>
Kod di atas ialah diperkenalkan secara terperinci Mengetahui kod ralat dan ralat yang sepadan, kami boleh menjana gesaan ralat yang tepat berdasarkan kod ralat.
Dalam projek sebenar, disebabkan had perkakasan sistem dan had peranti storan, adalah mustahil untuk pengguna memuat naik fail tanpa sekatan, jadi kami perlu mengenakan sekatan ke atas pengguna Saiz fail yang dimuat naik adalah terhad. Menentukan saiz had yang sesuai boleh menjadikan
aplikasi kami berjalan dengan lebih stabil.
<?php header("Content-type:text/html;charset=utf-8"); if($_FILES['file']['error'] > 0){ //有错误可停止执行 }else { //当前上传文件无误,运行本段代码 //判断文件是否超出了指定的大小 //单位为byte $MAX_FILE_SIZE = 100000 if ($_FILES['file']['size'] > $MAX_FILE_SIZE) { //判断,如果上传的文件,大小超出了我们给的限制范围,退上传并产生错误提示 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.
Langkah ketiga ialah menentukan sama ada jenis mime fail adalah betul.Lazimnya, fungsi muat naik fail kami perlu menentukan sama ada fail yang dimuat naik oleh pengguna memenuhi keperluan Selepas memuat naik fail yang tidak tersedia, kesan paparan keseluruhan aplikasi dalam talian akan terjejas. akan menyebabkan kesan buruk. Jadi kita perlu lulus Gunakan 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. /* Tentukan sama ada nama akhiran dan jenis MIME memenuhi keperluan yang ditetapkan Langkah keempat ialah menjana laluan dan nama fail yang ditentukan. Jana laluan storan fail mengikut susunan fail projek Untuk mengelakkan ralat yang disebabkan oleh nama fail pendua, nama fail rawak dijana mengikut yang tertentu format. Jana laluan storan fail mengikut susunan fail projek Untuk mengelakkan ralat yang disebabkan oleh nama fail pendua, hasilkan nama fail rawak mengikut format tertentu. //Nyatakan folder muat naik Langkah kelima ialah menentukan sama ada fail dimuat naik. Fungsi is_uploaded_file() ialah fungsi khusus untuk menentukan sama ada fail sasaran ialah fail yang dimuat naik. <?php Langkah 6, alihkan fail ke lokasi yang ditentukan. Gunakan fungsi move_uploaded_file() untuk mengalihkan fail ke lokasi yang ditentukan dan menamakannya. Perlu diingatkan bahawa sistem Linux mempunyai kebenaran pada direktori sasaran dan sama ada ruang cakera mencukupi, jika tidak, operasi muat naik akan gagal. /* 2. Tulis 2 atau lebih jenis input="file" name="file[]" tatasusunan (saiz=1) untuk ($i=0; $i < count($_FILE['fail']['nama']); $i++) { Muat Naik Program Imej Halaman html Program 1
Contohnya:
Projek semasa menentukan untuk memuat naik imej dengan akhiran .jpg atau .gif , kemudian $allowSuffix = tatasusunan ('jpg','gif');
*/
//Tentukan tatasusunan nama akhiran yang dibenarkan
$myImg = explode('.', $_FILES['file' ; Disimpan dalam $myImg, akhiran fail ialah nilai terakhir tatasusunan
*/
$myImgSuffix = array_pop($myImg);
/*
Dapatkan nama akhiran fail berdasarkan nama fail yang dimuat naik
Gunakan fungsi in_array() untuk menentukan sama ada fail yang dimuat naik memenuhi keperluan
Apabila nama akhiran fail tiada dalam julat kami yang dibenarkan, keluar dari muat naik dan kembalikan mesej ralat
*/
if(!in_array($myImgSuffix, $allowSuffix)){ dan fail Kami boleh menanyakan hubungan yang sepadan dengan nama akhiran melalui banyak Untuk mengelakkan pengubahsuaian nama akhiran fail oleh pengguna, fail tersebut tidak boleh digunakan.
Jenis mim juga mesti dihadkan. Semakan jenis mime adalah untuk menghalang pemuat naik daripada mengubah suai terus fail
, menyebabkan fail tidak tersedia atau fail yang dimuat naik tidak memenuhi keperluan.
*/
//Kandungan tatasusunan ialah jenis mime yang dibenarkan untuk dimuat naik
$allowMime = array(
"imej/jpg",
"imej /jpeg",
"imej/pjpeg",
"imej/gif"
);
if(!in_array($_FILES['file']['type '], $allowMime)) { // Tentukan sama ada jenis mim fail yang dimuat naik berada dalam julat yang dibenarkan
> >
$path = "upload/images/";
/*
Jana nama fail rawak berdasarkan masa semasa, baris kod ini Ia menggunakan masa semasa + nombor rawak dari 0 hingga 9 untuk membentuk nama fail, dan akhiran ialah nama akhiran fail yang diperoleh sebelum ini
*/
$nama = tarikh ('Y').tarikh( 'm').tarikh("d").tarikh('H').tarikh('i').tarikh('s').rand(0,9).'. '.$myImgSuffix;
//Gunakan is_uploaded_file() untuk menentukan sama ada ia adalah fail yang dimuat naik Untuk pengenalan fungsi, lihat di atas
jika (is_uploaded_file($ _FILEs['file']['tmp_name'])){
}
?>
1. input type="file" name="file[]" Berbanding dengan sebelum ini, terdapat kurungan persegi tambahan selepas fail
Gunakan move_uploaded_file() untuk mengalihkan fail yang dimuat naik ke lokasi yang ditentukan Parameter pertama ialah fail yang dimuat naik, dan parameter kedua ialah laluan muat naik dan nama yang kami nyatakan sebelum ini. " Berjaya dimuat naik"; {
Untuk butiran, lihat contoh 1
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. <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP中文网</title>
</head>
<body>
<html>
<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>
</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.
'fail' =>
tatasusunan (saiz=5)
'nama' => > gt; tatasusunan (saiz =2)
0 => rentetan 'imej/jpeg' (panjang=10)
1 => rentetan 'imej/jpeg' (panjang=10)
//Fail cache
'tmp_name ' => = > rentetan 'E:wamptphpF6F5.tmp' (panjang=23)
//Mesej ralat fail
'error' =>
tatasusunan (saiz=2)
0 = > int 0
1 =>/gt; 1 => int 151651
Kita dapat melihat bahawa kedua-dua fail itu disimpan dalam tatasusunan dan nama kunci adalah sama dengan fail 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.
/*
Gunakan is_uploaded_file () Fungsi menentukan bahawa fail dimuat naik
dan tiada ralat
*/
if(is_uploaded_file($_FILEs['file']['tmp_name'][$i]) && $_FILEs[ 'fail']['ralat'][$i] == 0){
if(move_uploaded_file($_FILEs['fail']['tmp_name'][$i],'upload/' .$_FILE[ 'file']['name'][$i])){
//Gunakan fungsi move_uploaded_file() untuk mengalihkan fail ke lokasi yang ditentukan dan gunakan nama asal fail
echo "Muat naik berjaya";
🎜> }
}
Untuk proses penghakiman terperinci, sila rujuk muat naik fail tunggal Hanya pertimbangan asas dibuat di sini, dan tiada peringatan tentang saiz dan format fail.
Contoh 1<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP中文网</title>
</head>
<body>
<form action="file-upload.php" enctype="multipart/form-data" method="post" name="uploadfile">
上传文件:<input type="file" name="upfile" /><br>
<input type="submit" value="上传" /></form>
</form>
</body>
</html>
Program 2
<?php
header("Content-type:text/html;charset=utf-8");
//print_r($_FILES["upfile"]);
if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
$upfile=$_FILES["upfile"];
//获取数组里面的值
$name=$upfile["name"];//上传文件的文件名
$type=$upfile["type"];//上传文件的类型
$size=$upfile["size"];//上传文件的大小
$tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径
//判断是否为图片
switch ($type){
case 'image/pjpeg':$okType=true;
break;
case 'image/jpeg':$okType=true;
break;
case 'image/gif':$okType=true;
break;
case 'image/png':$okType=true;
break;
}
if($okType){
/**
* 0:文件上传成功<br/>
* 1:超过了文件大小,在php.ini文件中设置<br/>
* 2:超过了文件的大小MAX_FILE_SIZE选项指定的值<br/>
* 3:文件只有部分被上传<br/>
* 4:没有文件被上传<br/>
* 5:上传文件大小为0
*/
$error=$upfile["error"];//上传后系统返回的值
echo "上传文件名称是:".$name."<br/>";
echo "上传文件类型是:".$type."<br/>";
echo "上传文件大小是:".$size."<br/>";
echo "上传后系统返回的值是:".$error."<br/>";
echo "上传文件的临时存放路径是:".$tmp_name."<br/>";
echo "开始移动上传文件<br/>";
//把上传的临时文件移动到指定目录下面
move_uploaded_file($tmp_name,'D:\upload/images/'.$name);
$destination="D:\upload/images/".$name;
echo "上传信息:<br/>";
if($error==0){
echo "文件上传成功啦!";
}elseif ($error==1){
echo "超过了文件大小,在php.ini文件中设置";
}elseif ($error==2){
echo "超过了文件的大小MAX_FILE_SIZE选项指定的值";
}elseif ($error==3){
echo "文件只有部分被上传";
}elseif ($error==4){
echo "没有文件被上传";
}else{
echo "上传文件大小为0";
}
}else{
echo "请上传jpg,gif,png等格式的图片!";
}
}
?>
Cari satu Muat naik gambar dan lihat program menjalankan hasil
Contoh 2
Contoh ini mempunyai 4 domain muat naik fail, fail The nama domain ialah u_file[], dan maklumat fail yang dimuat naik selepas penyerahan disimpan ke $_FILES[u_file] untuk menjana tatasusunan berbilang dimensi. Baca maklumat tatasusunan dan muat naik fail.
Halaman html Program 1<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP中文网</title>
</head>
<body>
<html>
<body>
<p>请选择要上传的文件</p>
<form action="morefile.php" method="post" enctype="multipart/form-data">
<table border="1" bgcolor="f0f0f0">
<tr>
<td>上传文件</td>
<td><input type="file" name="u_file[]"></td>
</tr>
<tr>
<td>上传文件</td>
<td><input type="file" name="u_file[]"></td>
</tr>
<tr>
<td>上传文件</td>
<td><input type="file" name="u_file[]"></td>
</tr>
<tr>
<td>上传文件</td>
<td><input type="file" name="u_file[]"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="上传"></td>
</tr>
</table>
</form>
</body>
</html>
</body>
</html>
Program 2 Hantar ke halaman php<?php
header("Content-type:text/html;charset=utf-8");
if(!empty($_FILES[u_file][name])){ //判断遍历$_FILES是否为空
$file_name=$_FILES[u_file][name]; //将上传文件名另存为数组
$file_tmp_name=$_FILES[u_file][tmp_name]; //将上传的临时文件名另存为数组
for($i=0;$i<count($file_name);$i++){ //循环上传文件
if($file_name[$i]!=""){ //判断上传文件名是否为空
move_uploaded_file($file_tmp_name[$i],$i.$file_name[$i]);
echo "文件" .$file_name[$i] ."上传成功。更名为"."$file_name[$i]"."<br>";
}
}
}
?>
Jalankan program anda dan lihat
Contoh 3
Contoh ini memuat naik borang, membenarkan muat naik fail di bawah 1MB <from action="" method="POST" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</from>
<?php
if(!empty($_FILES[file][name])){ //判断是否有文件上传
$fileinfo=$_FILES[file]; //将文件信息赋给变量$fileinfo
if($fileinfo['size']<1000000 && $fileinfo['size']>0){ //判断文件大小
echo "上传成功";
}else{
echo "上传文件太大或未知";
}
}
?>
Jalankan program anda.