PHP文件上传
<p>文件上传</p><h2 id="基本概念从本地客户端上传文件到远程服务端">基本概念:从本地客户端上传文件到远程服务端。</h2>
<p>上传流程简介:</p>
<blockquote>
<p>1、服务器写好文件上传页面<br>
2、客户端请求,服务端返回文件上传页面,并进行文件上传<br>
3、服务器收到上传文件,首先将文件存储到<code>tmp</code>临时存储目录下,然后通过<code>php</code>脚本判断是否满足上传文件标准<br>
4、满足标准,将临时目录文件移动到服务器指定目录;不满足条件,将临时目录文件删除。<br>
<img src="https://img2022.cnblogs.com/blog/2442110/202206/2442110-20220614105552670-1157153476.png" alt="" loading="lazy"></p>
</blockquote>
<h2 id="表单写法">表单写法</h2>
<pre><code class="language-php"><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>文件上传</title>
</head>
<body>
<!-- form表单文件上传时,必须使用 enctype 属性为 multipart/form-data -->
<form action="file_upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="image">
<p></p>
<input type="submit" name="上传文件">
</form>
</body>
</html>
</code></pre>
<p><img src="https://img2022.cnblogs.com/blog/2442110/202206/2442110-20220614111854479-378270544.png" alt="" loading="lazy"></p>
<h2 id="php处理上传文件">PHP处理上传文件</h2>
<p>查看<code>$_FILES</code>获取文件格式</p>
<pre><code class="language-php"><?php
$POST = $_POST;
$FILE = $_FILES;
var_dump($POST);
var_dump($FILE);
?>
</code></pre>
<p><img src="https://img2022.cnblogs.com/blog/2442110/202206/2442110-20220614113345241-428735862.png" alt="" loading="lazy"><br>
可以看出</p>
<blockquote>
<p>1、数组的键名由<code>form</code>表单中<code>name</code>的值控制<br>
2、<code>name</code>:代表文件名<br>
3、<code>type</code>:MIMIE类型(多功能互联网邮件扩展),代表文件类型,用于在计算机中在客户端识别文件类型,通过文件头<code>Content-type</code>获取<br>
4、<code>tmp_name</code>:文件临时存储目录<br>
5、<code>error</code>:文件上传的代号,类似于浏览器访问<code>404、301</code>,用来告知文件上传过程中出现的问题<br>
<img src="https://img2022.cnblogs.com/blog/2442110/202206/2442110-20220614115653248-1785332708.png" alt="" loading="lazy"><br>
6、<code>size</code>:代表文件大小(字节b:1kb = 1024b)</p>
</blockquote>
<h2 id="移动临时文件到目标文件">移动临时文件到目标文件</h2>
<pre><code class="language-php"><?php
$file = $_FILES['image'];
// 判断文件是否上传
if (is_uploaded_file($file['tmp_name'])){
// 上传文件
if (move_uploaded_file($file['tmp_name'],'upload\\'.$file['name'])){
echo "文件上传成功";
}else{
echo "文件已上传,但是移动时出现错误";
}
}else{
echo '上传文件失败';
}
?>
</code></pre>
<p><img src="https://img2022.cnblogs.com/blog/2442110/202206/2442110-20220614123506171-1693517505.png" alt="" loading="lazy"></p>
<h2 id="多文件上传">多文件上传</h2>
<p>多文件提交分为两种方式:<code>同名上传</code>和<code>不同名上传</code></p>
<h3 id="同名上传">同名上传</h3>
<p><strong>name</strong>的值一样,需要加入<code>[]</code>好形成一个数组<br>
例如:files_1.html</p>
<pre><code class="language-php"><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>多文件上传_1</title>
</head>
<body>
<form action="files.php" method="POST" enctype="multipart/form-data">
<input type="file" name="test[]">
<br/>
<input type="file" name="test[]">
<br/>
<input type="file" name="test[]">
<br/>
<input type="submit" name="submit" value="多文件提交_1">
</form>
</body>
</html>
</code></pre>
<p>files.php</p>
<pre><code class="language-php"><?php
header("Content-Type: text/html","charset:utf-8");
echo "<pre>";
print_r($_FILES);
?>
</code></pre>
<p>运行结果<br>
<img src="https://img2022.cnblogs.com/blog/2442110/202206/2442110-20220614161038808-2016682746.png" alt="" loading="lazy"><br>
可以看到,三个文件上传到了一个数组,其中问价对应的属性<code>name,type,tmp_name,error,size</code>,对应的值从0下标开始<br>
每个文件每个属性的下标都是一样的。</p>
<h3 id="不同名上传">不同名上传</h3>
<p><code>name</code>属性的值都不一样<br>
例如:files_2.html</p>
<pre><code class="language-php"><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>多文件上传_2</title>
</head>
<body>
<form action="files.php" method="POST" enctype="multipart/form-data">
<input type="file" name="file_1">
<br/>
<input type="file" name="file_2">
<br/>
<input type="file" name="file_3">
<br/>
<input type="submit" name="submit" value="多文件提交_2">s
</form>
</body>
</html>
</code></pre>
<p>其中<code>name</code>属性的值分别为<code>file_1、file_2、file_3</code>,提交查看结构<br>
<img src="https://img2022.cnblogs.com/blog/2442110/202206/2442110-20220614161438602-815262966.png" alt="" loading="lazy"><br>
每个文件对应其属性,这个就比较简洁好看一点。</p>
<h3 id="多文件上传示例">多文件上传示例</h3>
<p>files.php</p>
<pre><code class="language-php"><?php
header("Content-Type: text/html","charset:utf-8");
echo "<pre>";
$n = 1;
foreach($_FILES as $file){
if(is_uploaded_file($file['tmp_name'])){
move_uploaded_file($file['tmp_name'], 'upload\\'.$file['name']);
echo "文件上传成功".$n++;
echo "<br />";
}else{
echo "文件上传失败";
}
}
?>
</code></pre>
<p><img src="https://img2022.cnblogs.com/blog/2442110/202206/2442110-20220614163412216-1012131652.png" alt="" loading="lazy"><br>
foreach循环数组中的键名,然后将文件依次进行上传。</p>
<h3 id="同名文件上传示例">同名文件上传示例</h3>
<p>这是属实看不懂,有精力再研究。</p>
<h2 id="进阶文件上传">进阶文件上传</h2>
<p>在写代码时,要保证代码的通用性,就是换到另个平台依然可以使用。<br>
这里就需要定义一些变量,来实现代码的灵活行,例如以下:</p>
<blockquote>
<p><code>$file</code> 需要上传文件的信息<br>
<code>$allow_type</code> 允许上传文件的类型<br>
<code>$path</code> 文件上传的位置<br>
<code>$error</code> 上传错误的原因<br>
<code>$allow_format</code> 允许上传的文件格式<br>
<code>$max_size</code> 允许上传文件的大小</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/Junglezt/p/16373815.html
頁:
[1]