php 图片 上传,PHP文件上传(以图片为例)

0.上传单张图片

用户通过表单将文件上传到服务器,我们先来看下表单结构:

2ad8e7b5916e

这里使用了含文件上传控件的表单,必须将form标签的enctype属性设置为multipart/form-data。通过点击选择文件按钮在本地选择单个待上传文件,点击上传按钮,即会由`test.php'来处理。

下面是上传一个单文件的完整代码:

test.php

echo <<<_end>

_END;

if($_FILES){

$n = $_FILES['fn']['name'];

move_uploaded_file($_FILES['fn']['tmp_name'],$n);

}

?>

这里表单也是通过php文件输出,如果操作成功,将会在test.php所在目录看到之前上传的文件。

要想弄懂代码含义,还需要弄明白$_FILES这个数组,在移动文件move_upload_file()之前,我们先用print_r()观察一下数组内容。

echo '

';

print_r($_FILES);

echo '

';

上传文件后,我们将会看到页面输出了以下内容:

2ad8e7b5916e

想必你已经发现了,'fn'即是之前表单中type属性设置为file的input标签的name值。

数组元素

内容含义

$_FILES['fn']['name']

上传文件的名字

$_FILES['fn']['type']

上传文件的类型

$_FILES['fn']['tmp_name']

存储在服务器上的临时文件名

$_FILES['fn']['error']

上传文件导致的错误代码

$_FILES['fn']['size']

上传文件的大小(单位为字节)

现在再来看下这个if语句:

if($_FILES){

$n = $_FILES['fn']['name'];

move_uploaded_file($_FILES['fn']['tmp_name'],$n);

}

当没有上传文件的时候,尝试用print_r()输出$_FILES只会得到一个空数组,即在上面的代码中,如果没有文件上传,将不会进入if语句内。然后我们使用move_uploaded_file()函数将临时文件保存到了指定目录下。

1.多文件上传

上面的例子中,选中了一个文件就不允许继续选择其他文件,有时候我们想一次上传多个文件,只需对此input按钮稍作改动:

//也可以简写为:

name设置的值后加上一个中括号[]。

设置multiple属性的值为multiple。

多文件上传后再试试用print_r()打印$_FILES:

2ad8e7b5916e

这里我上传了三张图片。

2.文件验证

用户上传什么类型的文件至服务器是不可预测的,因此非常有必要对文件进行一个简单的验证:

foreach($_FILES['pics']['type'] as $key=>$value)

{

switch ($value)

{

case 'image/jpeg': $ext = 'jpg'; break;

case 'image/png': $ext = 'png'; break;

case 'image/gif': $ext = 'gif'; break;

default: $ext = ''; break;

}

if($ext)

{

//将执行的操作

}

如果上传的文件类型符合要求才会进入if语句执行接下来的操作。

3.多文件上传并验证的实例

完整代码如下:(含选择图片后的网页预览)

echo <<<_end>

_END;

if($_FILES) {

foreach($_FILES['fn']['type'] as $key=>$value)

{

switch ($value)

{

case 'image/jpeg': $ext = 'jpg'; break;

case 'image/png': $ext = 'png'; break;

case 'image/gif': $ext = 'gif'; break;

default: $ext = ''; break;

}

if($ext)

{

//名称从0开始

$name = "$key.$ext";

move_uploaded_file($_FILES['fn']['tmp_name'][$key], $name);

echo "%24name";

}

}

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值