使用 PHP 实现简单的图片上传

一、HTML 表单准备

<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>PHP图片上传title>
  <style>
	.form-group {
      
		margin: 20px 0;
	}
  style>
 head>
 <body>
	<form method="post" enctype="multipart/form-data" action="upload.php">
		<div class="form-group">
			<label>文件上传label>
			<input type="file" name="image">
		div>
		<div class="form-group">
			<input type="submit" name="upload" value="上传">
		div>
	form>
 body>
html>

需要注意的是,form表单在提交文件时不同于提交普通的文本,提交文件时需要指定传值方式为POST,并且给form增加一个enctype属性,其值为multipart/form-data,这样表单才会把文件的内容编码到HTML请求中。

这里我们为action属性指定值为upload.php,即将文件提交到upload.php中。

二、PHP 处理上传的文件

第一步,接收文件。

$file = $_FILES['image'];

不同于接收普通文本使用$_GET$_POST,接收文件需要使用$_FILES,其中image 对应 form 表单 input 组件中 name 属性的值。

打印接收到的文件,可以看到以下信息:

Array
(
    [name] => 1.png // 原文件名
    [type] => image/png // 文件类型
    [tmp_name] => C:\Windows\php4DA9.tmp // 临时文件位置
    [error] => 0 // 是否有错误,0为正常,具体错误取决于你的PHP配置文件是否限制了文件上传的信息
    [size] => 60814 // 文件大小,单位 kb
)

第二步,取出文件的后缀名。

$ext = strrchr($file['name'], '.');

使用strrchr函数检测.在原文件名中最后一次出现的位置,并返回从该位置剩余的所有字符。

输出结果:

.png

第三步,为文件重新命名。

$newName = mt_rand(0000, 9999).time().$ext;

使用mt_rand函数从0000-9999之间随机生成一个四位数,再连接上当前的时间戳作为新的文件名。

输出结果:

77231619271980.png

第四步,将新命名的文件移动到指定的文件夹进行保存。

假设将文件保存至 uploads/images 目录下,那么将保存路径与文件名拼接成一个完整的路径。

$path = 'uploads/images/'.$newName;
$info = move_uploaded_file($file['tmp_name'], $path);

使用PHPmove_uploaded_file函数将文件移动至指定的位置,该函数需要两个参数,第一个参数为原文件的临时位置,第二个参数为指定的保存位置。

原文件的临时位置在第一步中已经得到,需要保存的位置也已经有了,这时直接查看保存结果即可。

print_r($info);

返回 1 ,则为保存成功,其它值则为保存失败。

你可能感兴趣的:(PHP,PHP,文件上传,FORM表单,HTML)