文档章节

php文件上传与下载

Corwien
 Corwien
发布于 2016/04/19 17:52
字数 1234
阅读 162
收藏 2

php文件上传

在通过form表单进行文件上传的,PHP需要用到预定义变量$_FILES

$_FILES['userfile']['name']    客户端机器文件的原名称。

$_FILES['userfile']['type']  文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。

$_FILES['userfile']['size']   已上传文件的大小,单位为字节。

$_FILES['userfile']['tmp_name']    文件被上传后在服务端储存的临时文件名。

$_FILES['userfile']['error']   和该文件上传相关的错误代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
<form action="upload1.php" method="post" enctype="multipart/form-data">
<div>
    <input type="file" name="textfile"><p>
    <input type="submit" value="上传文件">
</div>
    
</form>
</body>
</html>

 

对应处理的PHP代码

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2016/4/2
 * Time: 23:55
 */
header('content-type:text/html;charset=utf-8');
print_r($_FILES);
//1.通过$_FILES文件上传变量接收上传文件信息
$fileInfo=$_FILES['textfile'];
$filename=$fileInfo['name'];
$type=$fileInfo['type'];
$tmp_name=$fileInfo['tmp_name'];
$size=$fileInfo['size'];
$error=$fileInfo['error'];
if($error==UPLOAD_ERR_OK){
    if(move_uploaded_file($tmp_name, "upload/".$filename)){
        echo '文件'.$filename.'上传成功';
    }else{
        echo '文件'.$filename.'上传失败';
    }
}else{
    //匹配错误信息
    switch($error){
        case 1:
            echo '上传文件超过了PHP配置文件中upload_max_filesize选项的值';
            break;
        case 2:
            echo '超过了表单MAX_FILE_SIZE限制的大小';
            break;
        case 3:
            echo '文件部分被上传';
            break;
        case 4:
            echo '没有选择上传文件';
            break;
        case 6:
            echo '没有找到临时目录';
            break;
        case 7:
        case 8:
            echo '系统错误';
            break;
    }
}

 

上传一个图片文件,并打印出数据:

<?php
/**
 * Created by PhpStorm.
 * User: mac
 * Date: 16-1-2
 * Time: 下午8:30
 */
header("Content-type:text/html;charset=utf-8");

// 配置文件需要上传到服务器的路径,需要允许所有用户有可写权限,否则无法上传成功
$uploadPath = 'uploads/';

// 获取提交的数据
$file = $_FILES['uploadFile'];

print_r($file);

if($file['error'] > 0)
{
    echo '传入参数错误' . $file['error'] . "<br />";
}
else
{
    echo"文件:".$file['name'].'<br/>';
    echo"大小:". ($file['size'] / 1024) . 'Kb<br/>';

    chmod($uploadPath, 0666);

    if(file_exists($uploadPath.$file['name'])){
        echo $file['name'] . "文件已经存在!";
    }else{
        move_uploaded_file($file['tmp_name'], $uploadPath.$file['name']);
        echo '文件以保存在:'.$uploadPath.$file['name'];
    }

}

###打印图片文件的数据

```

Array ( [textfile] => Array ( [name] => 小英.jpg [type] => image/jpeg [tmp_name] => D:\xampp\tmp\php46DB.tmp [error] => 0 [size] => 20433 ) )

```

Array

(

[name] => 634306d7jw1dvze5y1bk1j.jpg

[type] => image/jpeg

[tmp_name] => /Applications/XAMPP/xamppfiles/temp/phpsJFa8r

[error] => 0

[size] => 36028

)

文件:634306d7jw1dvze5y1bk1j.jpg<br/>

大小:35.18359375Kb<br/><br />

<b>Warning</b>: chmod(): Operation not permitted in <b>/Applications/XAMPP/xamppfiles/htdocs/qzone_partner/upload_file.php</b> on line <b>27</b><br />

文件以保存在:uploads/634306d7jw1dvze5y1bk1j.jpg

##

 

上面的代码只能说我把客户端过来的文件,放在了PHP文件对应的文件夹下面,主要用的的函数就是move_uploaded_file (将上传的文件移动到新位置)

另外传输文件必须要用post方法进行提交,可以用is_uploaded_file ($_FILES['userfile']['tmp_name'] )进行检测。

这些也只是简单的完成文件上传,一般在实际项目中还要针对不同的文件类型,文件大小进行判断。

 

文件的下载

对于文件的下载第一种方式就是通过a标签来完成,直接用href填写对应的连接地址

<a href="1.jpg">下载1.jpg</a>

第二种方式:

通过程序来完成:

php得到文件的信息来进行下载处理:

<?php 
$filename=$_GET['filename'];
header('content-disposition:attachment;filename='.basename($filename));
header('content-length:'.filesize($filename));
readfile($filename);

对于head函数:

Content-Disposition为属性名  attachment为以附件方式下载

Content-Length首部告诉浏览器报文中实体主体的大小

readfile函数输出一个文件来实现下载的功能

 

图片上传到远程图片服务器的方法

常见的有4种方法
虚拟主机等权限低的,一般在上传成功或者图片处理完成以后通过ftp协议等把文件推到其它服务器上

大型网站里,我们一般用下面几种方法
1,上传地址随机生成,指向到不同的服务器,以达到每个服务器上传压力和存储负载均衡
2,上传服务器上有事件监听事件,有新文件上传,可以使用rsync等协议将文件推到其它服务器
3,通过CDN等方式在有需要的时候,将文件同步到其它服务器

 

大概有两个思路
[1]图片服务器上跑程序,接收上传的图片数据{当然要考虑跨域,session共享这些必须的安全限制}
[2]本地服务器接收数据,然后用ftp模块或者curl传送到图片服务器上面
至于老的图片数据,可以保持不变,如果要迁移,可以设置服务器的sync同步数据或者直接ftp上传多一次,当然。迁移后要批量修改数据库存放的图片地址{一般域名会有变化}

 

相关上传图片文章:

PHP+jQuery+Ajax多图片上传  http://www.helloweba.com/view-blog-277.html

 

 

本文转载自:http://my.oschina.net/u/2430721/blog/651931

共有 人打赏支持
Corwien
粉丝 26
博文 149
码字总数 115164
作品 0
广州
程序员
php文件上传与下载

php文件上传 在通过form表单进行文件上传的,PHP需要用到预定义变量$_FILES $_FILES['userfile']['name'] 客户端机器文件的原名称。 $_FILES['userfile']['type'] 文件的 MIME 类型,如果浏览...

mrmusic
2016/04/03
81
0
WordPress编辑器插件-百度Ueditor

wordpress3.4.1整合ueditor方法: 首先到官方网站下载百度Ueditor wp-ueditor.zip 文件大小:2.1 MB 更新时间:2012 年 8 月 28 日 累计下载:4 次 先通过上面的下载链接,下载官方最新版本。...

ap0581w9c
2012/12/25
0
0
PHP之微信JSSDK图片上传预览下载到服务器

1.投票报名 主要实现报名功能 (1)form表单布局 3.微信JSSDK图片上传功能 3.1 jssdk.php jsapiticket.php accesstoken.php 放在项目文件下 3.2获取wx.config所需要的信息 页面中添加如下代码...

bengozhong
2016/11/03
1K
0
整合百度UEditor上传图片到阿里云OSS

前言 将图片上传到阿里云OSS是一种趋势,一个必然。当你的项目图片过多,需要频繁上传和替换的时候,用阿里云OSS可以很方便的管理你的图片,节省服务器空间,大大提高了效率。阿里云OSS是阿里...

zacklee
2017/09/17
0
0
centos7 LAMP环境安装zabbix3.0

zabbix3.0要求的PHP、数据库、Apache/Nginx的版本参考: zabbix3.0对PHP、数据库、nginx/apache版本要求参考: https://www.zabbix.com/documentation/3.0/manual/installation/requirement......

丶Darius
2017/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

软件测试工具书籍与面试题汇总下载(持续更新)

简介 本文是https://github.com/china-testing/python-api-tesing/blob/master/books.md 的节选。 欢迎转载,转载请附带此简介,谢谢! 试题 软件测试综合面试题(高级测试)-试题.pdf 软件测试...

python测试开发人工智能安全
14分钟前
0
0
java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection 解决

有个项目使用的log4j进行日志记录的,同时也是用log4j中的数据库配置直接把相应级别的日志直接插入oracle。 在把项目部署的另一个内网环境时候,把项目的其他配置都改了,唯独log4j中的数据库...

哥本哈根的小哥
24分钟前
0
0
耗时 2 年,用 8.5 万块乐高积木最牛复刻 Apple Park

简评:国外大佬复刻 Apple Park,看了一下细节,确实厉害!只有你想不到,没有乐高拼不起来的,有没有乐高大神挑战一下? 苹果公园以各种各样的方式鼓舞人心,让人感兴趣。从建筑、可持续性和...

极光推送
26分钟前
0
0
记一次查找Hdfs磁盘占用空间比实际存储文件大4倍的原因

在一次主备namenode发生切换后,重启datanode节点,发现磁盘空间很大,想清理一下磁盘, 通过命令Hdfs dfs -du -h --max-depth=1 / 发现实际文件的大小只有8g,通过du -h --max-depth=1 /ha...

PageYi
52分钟前
4
0
阿里云推荐引擎使用教程

产品概述: 推荐引擎(Recommendation Engine,以下简称RecEng,特指阿里云推荐引擎)是在阿里云计算环境下建立的一套推荐服务框架,目标是让广大中小互联网企业能够在这套框架上快速的搭建满...

mcy0425
53分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部