PHP---文件上传

目录

一、文件上传的概念

二、文件上传的步骤

(1)表单的制作

三、$_FILES详解

(1)name

(2)tmp_name

(3)type

(4)error

(5)size

 四、移动临时文件到目标位置

 五、多文件上传

(1)同名表单

 1:同名文件的数据结构

 2:同名文件的处理方式

(2)不同文件名

 1:不同文件名的数据结构

 2:不同文件名的处理方式


一、文件上传的概念

文件上传就是文件从用户本地电脑通过传输方式(web表单)保存到服务器所在电脑指定的目录下。
那么文件上传的原理是什么呢?
用户通过文件上传的表单从本地选择文件上传到服务器,服务器操作系统会将文件保存到临时文件夹中,注意是临时文件夹中,然后服务器开始工作,先判断文件是否有效,然后服务器脚本将有效文件从临时文件夹移动到指定目录下

二、文件上传的步骤

(1)表单的制作

1:method属性:表单提交方式必须为post
2:enctype属性:form表单属性,主要是规范表单数据的编码方式
在文件上传时,必须等于的值为multipart/form_data
3:上传表单:file表单 

 

<body>
    <form method="post" enctype="multipart/form-data" action="xyy.php">
        <input type="file" name="wenjian" />
        <input type="submit" name="btn" value="提交" />
    </form>
</body>

三、$_FILES详解

在接收到上传的文件后,服务器端如何接受呢,这就要说到预定义变量$_FILES,它是专门用来存储用户上传的文件的。要注意上传的文件并不是$_POST接收的,而是$_FILES。同时使用$_FILES接受后他会有六个属性,如下图所示。

 第一个[wenjian]就是上传文件的name值,后面的name,full_path,type,tmp_name,error,size便是说的属性

(1)name

文件在(浏览器端)用户电脑上的名字。(实际用来看文件的后缀)

(2)tmp_name

文件上传到服务器上操作系统保存到临时路径(实际用来给PHP后期使用)

(3)type

MIME(多功能互联网邮件扩展)类型,用来在计算机客户端识别文件类型,就是比如说一个文件用什么打开,用word打开还是记事本等等。 (实际用来判断给什么软件使用)

(4)error

文件上传的代号,用来告知应用软件(PHP)文件接收过程中出现了什么问题。如:
值=0,没有错误发生,文件上传成功
值=1,上传的文件超过了php.in中upload max filesize选项限制的值
值=2,上传的文件大小超过了HTML表单中MAX_FILE_SIZE选项指定的值
值=3,文件只有部分被上传
值=4,没有文件被上传


值=6,找不到临时文件夹,也就是说操作系统对应的临时文件夹不存在
值=7,文件写入失败,也就是说PHP没有权限将临时文件夹移动到
指定目录

 

 (实际用来PHP后期根据代码进行文件判断)

(5)size

文件大小(实际用来判断文件是否保留) 

 四、移动临时文件到目标位置

临时文件移动到目标位置主要分为两步
(1)判断是否是上传的文件is_uploaded_file()
(2)移动文件move_uploaded_file()

 既然想要移动文件,首先我们得获取文件信息,$_FILES['name']可以获取文件,其中的name是表单中的name属性值,获取后我们便需要判断文件是否是上传文件,即is_uploaded_file($_FILES['name']['tmp_name'])需要获得临时路径来判断。

move_uploaded_file($_FILES['name']['tmp_name'],指定路径),他们都有一个返回值,即是否成功,成功为true,否则为false。

<?php
   header('content-type:text/html;charset=utf-8');
   $f=$_FILES['wenjian'];
   //获取文件
   if(is_uploaded_file($f['tmp_name'])){
	   if(move_uploaded_file($f['tmp_name'],'upload/'.$f['name'])){//这个upload是在apache下的htdocs创建好的
		   echo '保存成功';
	   }
	   else{
		   echo '保存失败';
	   }
   }
   else{
	   echo '文件上传失败';
   }
?>

 

<body>
    <form method="post" enctype="multipart/form-data" action="xyy.php">
        <input type="file" name="wenjian" />
        <input type="submit" name="btn" value="提交" />
    </form>
</body>

 五、多文件上传

多文件上传顾名思义就是上传多个图片,而上传多个图片又分为同名表单和批量解决问题
在具体的实例中

同名表单:当商品需要上传多个图片进行展示的时候,如上传的是同一个物品的不同角度,这时候就用到[]就行。

批量解决问题:取得name属性都不一样

(1)同名表单

             1:同名文件的数据结构

 

<?php
   header('content-type:text/html;charset=utf-8');
   echo '<pre>';
   print_r($_FILES);
?>

<body>
    <form method="post" enctype="multipart/form-data" action="xyy.php">
        <input type="file" name="image[]" />
        <input type="file" name="image[]" />
        <input type="file" name="image[]" />
        
        <input type="submit" name="btn" value="提交" />
    </form>
</body>

 同名表单将名字形成一个数组,而且同时将文件对应的五个要素:name,tmp_name,size,type,error都形成对应数量的数组,每个文件上传对应数组元素的下标都是一样的,如:name[0]和tmp_name[0]都属于同一个文件。

           2:同名文件的处理方式

<?php
   header('content-type:text/html;charset=utf-8');
   echo '<pre>';
   //先判断文件是否存在并且是不是数组即是不是同名文件
   if(isset($_FILES['image']['name'])&&is_array($_FILES['image']['name'])){
	   $images=array();
	   foreach($_FILES['image']['name'] as $k=>$file){
		   //这个k就相当于数字下标
		   $images[]=array(
		   'name'=>$file,
		   'tmp_name'=>$_FILES['image']['tmp_name'][$k],
		   'type'=>$_FILES['image']['type'][$k],
		   'error'=>$_FILES['image']['error'][$k],
		   'size'=>$_FILES['image']['size'][$k]
			   );
	   }
   }
   print_r($images);
   //开始遍历数组一个一个保存
   foreach($images as $f){
	   if(is_uploaded_file($f['tmp_name'])){
		   move_uploaded_file($f['tmp_name'],'upload/'.$f['name']);
	   }
   }
?>

 

(2)不同文件名

          1:不同文件名的数据结构

<body>
    <form method="post" enctype="multipart/form-data" action="xyy.php">
        <input type="file" name="image1" />
        <input type="file" name="image2" />
        <input type="file" name="image3" />

        <input type="submit" name="btn" value="提交" />
    </form>
</body>
<?php
   header('content-type:text/html;charset=utf-8');
   echo '<pre>';
   print_r($_FILES);
?>

 批量上传:不同名表单每个文件都会形成一个属于自己独立的5个元素的数组

            2:不同文件名的处理方式

<?php
   header('content-type:text/html;charset=utf-8');
   foreach($_FILES as $file){
       //使用foreach遍历
	   //$file相当于是每一个文件信息
	   //开始找到临时路径存放位置
	   if(is_uploaded_file($file['tmp_name'])){
		   move_uploaded_file($file['tmp_name'],'upload/'.$file['name']);
	   }
   }
?>

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
当然可以!以下是一个简单的PHP文件上传页面的示例代码: ```php <!DOCTYPE html> <html> <head> <title>文件上传</title> </head> <body> <h1>文件上传</h1> <?php if(isset($_POST['submit'])){ $uploadDir = 'uploads/'; // 上传文件存储目录 // 检查目录是否存在,不存在则创建 if(!is_dir($uploadDir)){ mkdir($uploadDir, 0777, true); } $fileName = $_FILES['file']['name']; // 获取上传文件的名称 $tempFile = $_FILES['file']['tmp_name']; // 获取临时文件的路径 $targetFile = $uploadDir . $fileName; // 目标文件的路径 // 将临时文件移动到目标位置 if(move_uploaded_file($tempFile, $targetFile)){ echo "文件上传成功!"; }else{ echo "文件上传失败!"; } } ?> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" name="submit" value="上传" /> </form> </body> </html> ``` 在上面的代码中,我们首先检查是否提交了文件上传表单(通过检查`$_POST['submit']`是否存在)。然后,我们指定了文件的上传目录,并确保该目录存在。接下来,我们获取上传文件的名称、临时文件的路径和目标文件的路径。最后,我们使用`move_uploaded_file()`函数将临时文件移动到目标位置。如果移动成功,则显示成功消息;否则,显示失败消息。 你可以将以上代码保存为一个名为`upload.php`的文件,并将其上传到你的PHP服务器上。然后,通过访问`http://yourdomain.com/upload.php`来访问文件上传页面。用户可以选择文件并点击"上传"按钮来上传文件。上传成功后,会显示相应的消息。记得在服务器上创建一个名为`uploads`的目录,用于存储上传的文件。 请注意,这只是一个基本的文件上传示例,你可能需要添加更多的验证和安全措施来保护你的应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜到极致就是渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值