在经过form表单进行文件上传的,PHP须要用到预约义变量$_FILESphp
$_FILES['userfile']['name'] 客户端机器文件的原名称。html
$_FILES['userfile']['type'] 文件的 MIME 类型,若是浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,所以不要想固然认为有这个值。web
$_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']; } }
###打印图片文件的数据session
```负载均衡
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