Manual belajar ...login
Manual belajar kendiri lengkap PHP
pengarang:php.cn  masa kemas kini:2022-04-15 13:53:54

Muat naik fail PHP



Fail boleh dimuat naik ke pelayan melalui PHP.

Contoh dalam bab ini dilengkapkan di bawah projek ujian Struktur direktori ialah:

ujian
muat turun kod sumber
|-----upload             # 文件上传的目录
|-----form.html          # 表单文件
|-----upload_file.php    # php 上传代码

<. 🎜>Buat Borang Muat Naik fail

sangat berguna untuk membenarkan pengguna memuat naik fail daripada borang.

Sila lihat borang HTML di bawah untuk memuat naik fail:

<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
Simpan kod di atas ke dalam fail form.html.
Beberapa nota tentang borang HTML di atas disenaraikan di bawah:

  • <form> tag enctype Atribut menentukan jenis kandungan yang hendak digunakan semasa menyerahkan borang. Apabila borang memerlukan data binari, seperti kandungan fail, gunakan "berbilang bahagian/data-bentuk". Atribut

  • <input> teg type="file" menentukan bahawa input harus diproses sebagai fail. Contohnya, apabila melihat pratonton dalam penyemak imbas, anda akan melihat butang semak imbas di sebelah kotak input.

Nota: Membenarkan pengguna memuat naik fail merupakan risiko keselamatan yang besar. Sila benarkan hanya pengguna yang dipercayai untuk melakukan operasi muat naik fail.


Buat skrip muat naik

Fail "upload_file.php" mengandungi kod untuk memuat naik fail:

<?php
if ($_FILES["file"]["error"] > 0)
{
echo "错误:" . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
?>
dengan menggunakan PHP global array $_FILES, anda boleh memuat naik fail dari komputer klien ke pelayan jauh.
Parameter pertama ialah nama input borang dan subskrip kedua boleh menjadi "nama", "jenis", "saiz", "tmp_name" atau "ralat". Seperti yang ditunjukkan di bawah:

  • $_FILES["fail"]["nama"] - nama fail yang dimuat naik

  • $_FILES[ "file "]["type"] - Jenis fail yang dimuat naik

  • $_FILES["file"]["size"] - Saiz fail yang dimuat naik, dalam bait

  • $_FILES["file"]["tmp_name"] - Nama salinan sementara fail yang disimpan pada pelayan

  • $_FILES[" fail"] ["error"] - Kod ralat yang disebabkan oleh muat naik fail

Ini ialah cara yang sangat mudah untuk memuat naik fail. Atas sebab keselamatan, anda harus menambah sekatan ke atas siapa yang dibenarkan untuk memuat naik fail.



Had Muat Naik

Dalam skrip ini, kami telah menambahkan had pada muat naik fail. Pengguna hanya boleh memuat naik fail .gif, .jpeg, .jpg, .png dan saiz fail mestilah kurang daripada 200 kB:

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);        // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)    // 小于 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "非法的文件格式";
}
?>

Menyimpan fail yang dimuat naik

Contoh di atas mencipta salinan sementara fail yang dimuat naik dalam folder sementara PHP pelayan.

Salinan sementara ini akan hilang apabila skrip tamat. Untuk menyimpan fail yang dimuat naik, kami perlu menyalinnya ke lokasi lain:

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);     // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
// 判断当期目录下的 upload 目录是否存在该文件
// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " 文件已经存在。 ";
}
else
{
// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "非法的文件格式";
}
?>
Skrip di atas mengesan sama ada fail itu sudah wujud Jika ia tidak wujud, ia menyalin fail ke lokasi bernama ". muat naik direktori ".

Operasi demonstrasi muat naik fail adalah seperti berikut:

c9fc1ca5a376babb7215cb395c85cba.png

7c04478aceff78a379d5789cf2808d0.png

Tutorial praktikal yang disyorkan:

Fail mudah untuk pembangunan PHP dimuat naik ke fail tempatan dan disimpan (1)

Fail mudah untuk pembangunan PHP dimuat naik ke tempatan fail untuk disimpan ( 2)