PHP文件上传的实现及其介绍
来源:互联网 发布:c语言文本文件读写 编辑:程序博客网 时间:2024/05/16 17:50
关于实现及介绍在程序注释中。
提交文件的页面:(可以分别提交到doAction.php、doAction1.php、doAction2.php进行测试)
upload.php
<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <title>文件上传</title></head><body> <form action="doAction3.php" method="post" enctype="multipart/form-data"> <!-- 在客户端可以设置表单MAX_FILE_SIZE限制的大小 --> <!--<input type="hidden" name="MAX_FILE_SIZE" value="5*1024*1024">--> 请选择您要上传的文件: <!-- 在客户端设置允许上传的文件类型 --><!-- 但是我们需要记住:客户端所做的任何限制都是不安全的 --> <!--<input type="file" name="myFile" accept="image/jpeg,image/gif,image/png"/><br/>--> <input type="file" name="myFile"/><br/> <input type="submit" value="上传文件"/> </form></body></html>
doAction.php
<?php/** * Created by PhpStorm. * User: DreamBoy * Date: 2016/4/8 * Time: 15:17 *///$_FILES:文件上传变量/* * $_FILES中保存着上传文件的信息 * name:上传文件的名称 * type:上传文件的MIME类型 * tmp_name:上传到服务器上的临时文件名 * size:上传文件的大小 * error:上传文件的错误号 */print_r($_FILES);$filename = $_FILES['myFile']['name'];$type = $_FILES['myFile']['type'];$tmp_name = $_FILES['myFile']['tmp_name'];$size = $_FILES['myFile']['size'];$error = $_FILES['myFile']['error'];//上传方式//第一种方式://将服务器上的临时文件移动到指定目录下,移动成功返回true,否则返回false。//move_uploaded_file($tmp_name, $destination);//move_uploaded_file($tmp_name, 'uploads/' . $filename);//第二种方式://copy($src,$dst) :将文件拷贝到指定目录,拷贝成功返回true,否则返回false//copy($tmp_name, 'uploads/' . $filename);/* * 文件上传配置 * 服务器端配置: * file_uploads = On, 支持HTTP上传 * upload_tmp_dir=,临时文件保存的目录 * upload_max_filesize=2M,允许上传文件的最大值 * max_file_uploads=20,允许一次上传的最大文件数 * post_max_size=8M,POST方式发送数据的最大值 * * max_execution_time = -1,设置了脚本被解析器终止之前允许的最大执行时间,单位为秒, * 放置程序写得不好而占尽服务器资源。-1代表没有限制。 * max_input_time = 60,脚本解析输入数据允许的最大时间,单位是秒。 * max_input_nesting_level = 64,设置输入变量的嵌套深度。 * max_input_vars = 1000,接受多少输入的变量(限制分别应用于$_GET、$_POST和$_COOKIE * 超全局变量)指令的使用减轻了以哈希碰撞来进行拒绝服务攻击的可能性。 * 如果超过指令数量的变量,将会导致E_WARNING的产生,更多的输入变量将会从请求中截断。 * memory_limit = 128M,最大单线程的独立内存使用量。也就是一个web请求,给予线程最大的内存使用量的定义。 *//* * 错误信息说明 * UPLOAD_ERR_OK:其值为0,没有错误发生,文件上传成功 * UPLOAD_ERR_INT_SIZE:其值为1,上传的文件超过了php.ini中uploaded_max_filesize选项限制的值。 * UPLOAD_ERR_FORM_SIZE:其值为2,上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值。 * UPLOAD_ERR_PARTIAL:其值为3,文件只有部分被上传。 * UPLOAD_ERR_NO_FILE:其值为4,没有文件被上传。 * UPLOAD_ERR_NO_TMP_DIR:其值为6,找不到临时文件夹。 * UPLOAD_ERR_CANT_WRITE:其值为7,文件写入失败。 * UPLOAD_ERR_EXTENSION:其值为8,上传的文件被PHP扩展程序中断。 */
doAction1.php
<?phpheader('content-type:text/html;charset=utf-8');/** * Created by PhpStorm. * User: DreamBoy * Date: 2016/4/8 * Time: 16:37 *///1.通过$_FILES文件上传变量接收上传文件信息$fileInfo = $_FILES['myFile'];$filename = $fileInfo['name'];$type = $fileInfo['type'];$tmp_name = $fileInfo['tmp_name'];$size = $fileInfo['size'];$error = $fileInfo['error'];//2.判断下错误号,只有为0或者是UPLOAD_ERR_OK,没有错误发生,上传成功。if($error == UPLOAD_ERR_OK) { if(move_uploaded_file($tmp_name, 'uploads/' . $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; }}/* * 上传文件限制 * 服务器端限制: * 限制上传文件大小 * 限制上传文件类型 * 检测是否为真是图片类型 * 检测是否为HTTP POST方式上传 */
doAction2.php
<?php/** * Created by PhpStorm. * User: DreamBoy * Date: 2016/4/8 * Time: 17:45 */header('content-type:text/html;charset=utf-8');$fileInfo = $_FILES['myFile'];$maxSize = 2097152; //2 * 1024 * 1024;$allowExt = array('jpeg', 'jpg', 'png', 'gif', 'wbmp');$flag = true; //检测是否为真实图片类型//1.判断错误号if($fileInfo['error'] == 0) { //判断上传文件的大小 if($fileInfo['size'] > $maxSize) { exit('上传文件过大'); } echo $fileInfo['type']; exit; //$ext = strtolower(end(explode('.', $fileInfo['name']))); $ext = pathinfo($fileInfo['name'],PATHINFO_EXTENSION); if(!in_array($ext, $allowExt)) { exit('非法文件类型'); } //判断文件是否是通过HTTP POST方式上传来的 if(!is_uploaded_file($fileInfo['tmp_name'])) { exit('文件不是通过HTTP POST方式上传来的'); } //检测是否为真实的图片类型 /* * getimagesize($filename):得到指定图片的信息,如果是图片返回数组 * 如果不是图片(哪怕文件的后缀是图片的格式,实际上不是图片的话),返回false。 */ if($flag) { if(!getimagesize($fileInfo['tmp_name'])) { exit('不是真正的图片类型'); } } $path = 'uploads'; //php利用mkdir创建多级目录 http://www.daixiaorui.com/read/38.html /* * mkdir($path,0777,true); * 第一个参数:必须,代表要创建的多级目录的路径; * 第二个参数:设定目录的权限,默认是 0777,意味着最大可能的访问权; * 第三个参数:true表示允许创建多级目录。 */ /* * chmod() 函数改变文件模式。 * 如果成功则返回 TRUE,否则返回 FALSE。 */ if(!file_exists($path)) { mkdir($path, 0777, true); // 0777表示可读可写可执行 chmod($path, 0777); } //确保文件名位移,放置重名产生覆盖 /* * uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。 * 语法 * uniqid(prefix,more_entropy) * 参数描述 * prefix可选。为 ID 规定前缀。如果两个脚本恰好在相同的微秒生成 ID,该参数很有用。 * more_entropy可选。规定位于返回值末尾的更多的熵。 */ /* * microtime()返回当前 Unix 时间戳和微秒数。 * PHP函数microtime()语法 * microtime(get_as_float) * PHP函数microtime()参数与描述 * get_as_float 如果给出了 get_as_float 参数并且其值等价于 TRUE,该函数将返回一个浮点数。 * 通俗地说,带参数true表明只返回一个浮点数(即秒数),不带参数返回一个微秒+秒的字符串。 * <?php * echo microtime(); * echo "<br>"; * echo microtime(true); * ?> * 结果如下: * 0.00000600 1283757623 * 1283757623 */ $uniName = md5(uniqid(microtime(true), true)) . '.' . $ext; //$destination = $path . '/' . $fileInfo['name']; $destination = $path . '/' . $uniName; if(@move_uploaded_file($fileInfo['tmp_name'], $destination)) { echo '文件上传成功'; } else { echo '文件上传失败'; }} else { //匹配错误信息 switch($fileInfo['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; }}
0 0
- PHP文件上传的实现及其介绍
- PHP实现文件的上传
- PHP上传文件的实现
- PHP实现文件的上传
- PHP文件上传原理.实现及其他相关
- PHP实现文件上传
- 实现php文件上传
- PHP上传文件实现
- php实现文件上传
- [php] 实现文件上传
- PHP实现文件上传
- php实现文件上传
- PHP实现文件上传
- PHP-实现文件上传
- PHP 实现文件上传
- php实现文件上传
- php实现文件上传的一些经验
- PHP文件上传实现的注意点
- Android学习记录之BaseAdapter及其SubClass基础使用1
- 文章标题
- android studio 2.0Stable (正式版下载)
- yum中的python版本错误(转载)
- 用空瓶和瓶盖换酒喝
- PHP文件上传的实现及其介绍
- 最长公共子序列,记忆化搜索
- HTTPS原理
- 【C++】《More Effective C++》读书笔记(转载+修订)
- 1113. Integer Set Partition (25)
- 狸猫的笔试——格雷码判断
- The 11th Zhejiang Provincial Collegiate Programming Contest
- 九度 1007
- UVA 1452Jump 【约瑟夫环】