【Api】PHP文件上传处理接口

作者: Timeless 更新时间: 阅读量: 19

一、文件上传

1、文件上传要考虑下登录、权限之类的哦,要安全~

2、使用全局参数 $_FILES 获取上传文件的信息

$_FILES["file"]["name"] – 被上传文件的名称
$_FILES["file"]["type"] – 被上传文件的类型
$_FILES["file"]["size"] – 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] – 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] – 由文件上传导致的错误代码

3、设置所允许上传文件的格式

4、设置所允许上传文件的大小,这个不能大于php.ini里面的post_max_size以及upload_max_filesize

5、考虑文件命名问题,可以考虑时间戳

<?php
$typeArr = array("jpg", "png", "gif","pdf","doc","docx","ppt","pptx");
//允许上传文件格式
$path = "uploads/";
//上传路径
if (isset($_POST)) {
        $name = $_FILES['file']['name'];
	$size = $_FILES['file']['size'];
	$name_tmp = $_FILES['file']['tmp_name'];
	if (empty($name)) {
		echo json_encode(array("error" => "您还未选择图片"));
		exit ;
	}
	$type = strtolower(substr(strrchr($name, '.'), 1));
	
	//获取文件类型
	if (!in_array($type, $typeArr)) {
		echo json_encode(array("error" => "请上传规定定类型的文件!"));
		exit ;
	}
	if ($size > (8 * 1024 * 1024)) {
		echo json_encode(array("error" => "图片大小已超过8MB!"));
		exit ;
	}
	
        //文件名称
	$pic_name = time() . rand(10000, 99999) . "." . $type;
	$pic_url = $path . $pic_name;
	
	//上传后图片路径+名称
	if (move_uploaded_file($name_tmp, $pic_url)) {//临时文件转移到目标文件夹
		echo json_encode(array("error" => "0", "pic" => $pic_url, "name" => $pic_name));
	} else {
		echo json_encode(array("error" => "上传有误,请检查服务器配置!"));
	}
}
?>

二、枚举目录文件列表

1、使用iconv("gb2312","utf-8",$file)处理中文名称的的目录或文件,为了不必要的麻烦,上传的时候最好不使用中文字符

2、记得 closedir

/**
 * 枚举目录文件列表
 * $dir {string} 要打开的文件目录
 */
function my_dir($dir) {
    $files = array();
    if(@$handle = opendir($dir)) { //注意这里要加一个@,不然会有warning错误提示:)
        while(($file = readdir($handle)) !== false) {
            if($file != ".." && $file != ".") { //排除根目录;
                if(is_dir($dir."/".$file)) { //如果是子文件夹,就进行递归
                    $files[$file] = my_dir($dir."/".$file);
                } else { //不然就将文件的名字存入数组;
                    //处理中文名称的文件
                    $file = iconv("gb2312","utf-8",$file);
                    $files[] = $file;
                }
            }
        }
        closedir($handle);
        return $files;
    }
}
echo json_encode(my_dir("/uploads"));

三、文件删除

这是移除文件哦,不是目录

1、判断文件是否存在

2、使用unlink(filename) 删除文件,filename为文件的路径

$file = isset($_GET['file'])?$_GET['file']:"";
$file = mb_convert_encoding($file,"gb2312","UTF-8"); //处理中文名称的文件
$file = 'uploads/'.$file;
if (!unlink($file)){
    echo json_encode(array("code"=>0,"message"=>"无法删除 $file"));
}else{
    echo json_encode(array("code"=>1,"message"=>"已经删除 $file"));
}

四、重命名

1、rename — 重命名一个文件或目录 ,rename ( string $oldname , string $newname [, resource $context ] ),尝试把 oldname 重命名为 newname

$oldname   原文件路径

这里只是改个名字,文件后缀没有变化

$file = isset($_GET['file'])?$_GET['file']:"";
$file = mb_convert_encoding($file,"gb2312","UTF-8");
$oldfile = 'uploads/'.$file; //旧文件
$name = isset($_GET['name'])?$_GET['name']:"";
$name = mb_convert_encoding($name,"gb2312","UTF-8");
$mime_type = pathinfo($oldfile, PATHINFO_EXTENSION); 
$newfile = 'uploads/'.urldecode($name).'.'.$mime_type;  //新文件
if(file_exists($newfile)||!file_exists($oldfile)){
 	echo json_encode(array("code"=>0,"message"=>"目标文件已存在或原文件不存在。"));
}else{
	$result = array();
 	rename($oldfile,$newfile)?$result=array("code"=>1,"message"=>"重命名成功"):$result=array("code"=>0,"message"=>"重命名失败");
 	echo json_encode($result);
}

cnblogs和csdn里面有很多更好的方法,本小白随便写写,欢迎指正~