PHP文件上传,下载,Sql工具类!金沙官网线上

<?php 
require_once 'FileService.php';
$fileService = new FileService();

if (!empty($_REQUEST['flag'])) {
    $flag = $_REQUEST['flag'];
    //上传
    if ($flag == "upload") {
        $username = $_POST['username'];
        $intro = $_POST['intro'];

        $fileService -> Upload($username,$intro);
    }elseif ($flag == "down") {
        //接收要下载的文件名字
        $filepath = $_GET['filepath'];
        $filename = $_GET['filename'];

 $fileService = new FileService();
 $fileService->Download($filepath,$filename);

    }
}

 ?>
<?phpheader('content-type:text/html;charset=utf-8');/** * Class ZipTools * Zip压缩解压工具类 */class ZipTools{ /** * @desc 对相应目录文件进行压缩 * @param $path * @param $zip **/ // 使用示例 // $zip = new ZipArchive(); // $path = $_SERVER['DOCUMENT_ROOT']; // $zipName = $_SERVER['DOCUMENT_ROOT']."/20180826.zip"; // // if($zip->open($zipName, ZipArchive::CREATE) === TRUE){ // addFileToZip($path, $zip); // 调用方法,对要打包的根目录进行操作,并将ZipArchive的对象传递给方法 // $zip->close(); // 关闭处理的zip文件 // } public function addFileToZip($path,$zip){ // 转化  为 / ,适应 windows $file_tools = new FileTools(); $path = $file_tools->dirPath; // 判断是不是目录,是的话递归进入 if(is_dir { $handler = opendir; //打开当前文件夹由$path指定。 while (($filename = readdir) !== false) { if ($filename != "." && $filename != "..") { //文件夹文件名字为'.'和'..',不要对他们进行操作 if (is_dir($path . "/" . $filename)) { // 如果读取的某个对象是文件夹,则递归 $this->addFileToZip($path . "/" . $filename, $zip); } else { //将文件加入zip对象 $zip->addFile($path . "/" . $filename); } } } }else{ $zip->addFile; } @closedir; echo 'zip压缩成功'; } /** * @desc 对相应目录文件进行压缩 * @param $path * @param $zip **/ // php 从zip压缩文件中提取文件 // 使用示例: // $filename = $_SERVER['DOCUMENT_ROOT'].'/unzip.zip'; // $path = $_SERVER['DOCUMENT_ROOT'].'/unzip'; // unZip($filename,$path ); public function unZip($filename = '', $path = ''){ //将文件名和路径转成windows系统默认的gb2312编码,否则将会读取不到 $filename = iconv("utf-8","gb2312",$filename); $path = iconv("utf-8","gb2312",$path); if (!file_exists($filename)) { return false; } $zip = new ZipArchive; if ($zip->open($filename) === TRUE) {//中文文件名要使用ANSI编码的文件格式 $zip->extractTo;//提取全部文件 $zip->close(); echo 'zip解压成功'; } else { echo 'zip解压失败或没有这个zip文件'; } }}

金沙官网线上 1

三、ArrayTools.php —— 数组工具类

 金沙官网线上 2

二、代码目录

控制器 FileProcess.php

<?phpheader('content-type:text/html;charset=utf-8');/** * 校验工具类,如验证ip、手机、邮箱等 * Class VerifyTools */class VerifyTools{ /** * 说明:判断是否为合法的ip地址 * 判断是否为合法的ip地址 * @param string $ip ip地址 * @return bool|int 不合法则返回false,合法则返回4或6 */ function isIPAddress { $ipv4Regex = '/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/'; $ipv6Regex = '/^()(?!.*3.+3))3?|([dA-F]{1,4}|2)){5}{2}|(((2[0-4]|1d|[1-9])?d|25[0-5]).?b){4})$/i'; if (preg_match($ipv4Regex, $ip)) return 4; if (false !== strpos && preg_match($ipv6Regex, trim($ip, ' []'))) return 6; return false; } // 说明: 验证邮箱格式 function isValidEmail { $check = false; if(filter_var($email,FILTER_VALIDATE_EMAIL)) { $check = true; } return $check; } /** $email = "blog@koonk.com"; $check = is_validemail; echo $check; //If the output is 1, then email is valid. */ /** * 判断是否为手机访问 * @return boolean */ function isMobile() { $sp_is_mobile = false; if ( empty($_SERVER['HTTP_USER_AGENT']) ) { $sp_is_mobile = false; } elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.) || strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mobi') !== false ) { $sp_is_mobile = true; } else { $sp_is_mobile = false; } return $sp_is_mobile; } /** * 判断是否为微信访问 * @return boolean */ function isWeiXin(){ if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) { return true; } return false; } /** * 检查手机号码格式 * @param $mobile 手机号码 */ function checkMobile{ if(preg_match('/1[0123456789]d{9}$/',$mobile)) return true; return false; } /** * 检查固定电话 * @param $mobile * @return bool */ function checkTelephone{ if(preg_match('/^([0-9]{3,4}-)?[0-9]{7,8}$/',$mobile)) return true; return false; } /** * 当前请求是否是https * @return type */ function isHttps() { return isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] && $_SERVER['HTTPS'] != 'off'; }}

 

五、UploadTools.php —— 上传文件工具类

金沙官网线上,工具类  SqlHelper.php

<?phpheader('content-type:text/html;charset=utf-8');/** * 跟curl相关的工具类 * Class CurlsTools */class CurlsTools{ /** * PHP get请求之发送数组 * @param $url * @param array $param * @return mixed * @throws Exception */ public function httpGet{ //初始化一个 cURL 对象 $ch = curl_init(); //设置你需要抓取的URL curl_setopt($ch, CURLOPT_URL, $url); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //是否获得跳转后的页面 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); $result = curl_exec; curl_close; return $result; } /** * PHP post请求之发送数组 * @param $url * @param array $param * @return mixed * @throws Exception */ public function httpsPost($url, $param = array { $ch = curl_init(); // 初始化一个 cURL 对象 curl_setopt($ch, CURLOPT_URL, $url); // 设置需要抓取的URL curl_setopt($ch, CURLOPT_HEADER, 0); // // 设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 // 如果你想PHP去做一个正规的HTTP POST,设置这个选项为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。 curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query; // 传递一个作为HTTP “POST”操作的所有数据的字符串。//http_build_query:生成 URL-encode 之后的请求字符串 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-type:application/x-www-form-urlencoded;charset=utf-8' )); $result = curl_exec; // 运行cURL,请求网页 if ($errno = curl_errno { throw new Exception ('Curl Error(' . $errno . '):' . curl_error; } curl_close; // 关闭URL请求 return $result; // 返回获取的数据 } /** * 使用curl获取远程数据 * @param string $url url连接路径 * @return string 获取到的数据 */ function curlGetContents{ $ch=curl_init(); curl_setopt($ch, CURLOPT_URL, $url); //设置访问的url地址 curl_setopt($ch, CURLOPT_HEADER,1); //是否显示头部信息 curl_setopt($ch, CURLOPT_TIMEOUT, 5); //设置超时 curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); //用户访问代理 User-Agent curl_setopt($ch, CURLOPT_REFERER,$_SERVER['HTTP_HOST']); //设置 referer curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); //跟踪301 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //返回结果 //这个是重点,加上这个便可以支持http和https下载 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec; curl_close; return $result; } /** * 异步将远程链接上的内容写到本地 * @param $url 远程地址 * @param $saveName 保存在服务器上的文件名 * @param $path 保存路径 * @return boolean */ function putFileFromUrlContent($url, $saveName, $path) { // 设置运行时间为无限制 set_time_limit ; $url = trim ; $curl = curl_init (); // 设置你需要抓取的URL curl_setopt ( $curl, CURLOPT_URL, $url ); // 设置header curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); //这个是重点,加上这个便可以支持http和https下载 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 运行cURL,请求网页 $file = curl_exec ; // 关闭URL请求 curl_close ; // 将文件写入获得的数据 $filename = $path . $saveName; $write = @fopen ( $filename, "w" ); if ($write == false) { return false; } if (fwrite ( $write, $file ) == false) { return false; } if (fclose  == false) { return false; } return true; } // $url = "https://www.52linmin.wang/upload/portal/20171104/cb1511a3b30ef088c358286110823309.jpg"; // $saveName = 'whm.jpg'; // $path = "./"; //保存在当前目录下 // $res = putFileFromUrlContent($url,$saveName,$path); // var_dump;// 当返回为true时,代表成功,反之,为失败 // 使用代理抓取页面 // 为什么要使用代理进行抓取呢?以google为例吧,如果去抓google的数据,短时间内抓的很频繁的话,你就抓取不到了。 // google对你的ip地址做限制这个时候,你可以换代理重新抓。 public function httpProxy{ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //是否通过http代理来传输 curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE); // curl_setopt($ch, CURLOPT_PROXY, 125.21.23.6:8080); curl_setopt($ch, CURLOPT_PROXY, 'ip:端口号'); //url_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');如果要密码的话,加上这个 $result = curl_exec; curl_close; } // 继续保持本站session的调用 // 在实现用户同步登录的情况下需要共享session,如果要继续保持本站的session,那么要把sessionid放到http请求中 public function httpSession{ $session_str = session_name().'='.session_id().'; path=/; domain=.explame.com'; session_write_close(); //将数据写入文件并且结束session $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIE, $session_str); $result = curl_exec; curl_close; }}

 

金沙官网线上 3自己做工具--封装PHP的工具类.png

<?php 
header("content_type:text/html;charset=utf-8");
require_once 'SqlHelper.php';
error_reporting(E_ALL & ~E_NOTICE);

class FileService{

//查询所有文件信息
function fileInfo(){

    $sql = "select * from upload";
    $sqlHelper = new SqlHelper();

    $res = $sqlHelper->execute_dpl($sql);
    return $res;

    $res->free();
}


/*
*上传文件
*    功能
*        限制文件大小/类型
*        防止不同用户上传同名图片被覆盖的问题
*        防止同一用户上传的文件名相同的问题
*    参数
*        $username
*        $intro
*
*is_uploaded_file  上传到tmp缓存
*move_uploaded_file  移动到目标文件
*/
function Upload($username,$intro){

/*********对文件类型进行限制**********/

    //获取文件的大小,限制上传文件的大小10M
    $file_size = $_FILES['myfile']['size'];
    if ($file_size>10*1024*1024) {
    echo "<script>alert('上传失败,上传的文件不能超过10M的文件');history.go(-1);</script>";
    //echo "上传失败,上传的文件不能超过10M的文件!";
        exit();
    }

    //限制上传文件类型
    /*
    $file_type = $_FILES['myfile']['type'];
    if ($file_type!='image/jpg' && $file_type!='image/pjpeg') {
        echo "上传失败,文件类型只能是jpg格式!";
        exit();
    }*/

    //判断文件是否上传成功
    if (is_uploaded_file($_FILES['myfile']['tmp_name'])) {


/***防止不同用户上传同名图片被覆盖的问题->给每个用户创建一个文件夹*****/
    //一般创建文件夹的时候根据id创建(username换成id,入参时带入id),防止汉字乱码
        //给每个用户动态创建一个相应的文件夹
        $user_path = $_SERVER['DOCUMENT_ROOT']."Demo/File/UpDown/upload/".$username;
        //判断该用户是否已经有文件夹
        if (!file_exists($user_path)) {
            mkdir($user_path);
        }


/****防止同一用户上传的文件名相同的问题->给每个文件名加上时间戳********/
         //tmp里的文件名
         $file_name = $_FILES['myfile']['name'];
        //把缓存文件转存到你希望的目录
        $uploaded_file = $_FILES['myfile']['tmp_name'];
         //目标路径=(目标目录+用户名)+当前时间+后缀(strpos()字符串首次出现的位置)
         $move_to_file = $user_path."/".time().rand(1,1000).substr($file_name, strpos($file_name, "."));


        //对中文路径转码
        $move_to_file = iconv("utf-8", "gb2312", $move_to_file);

/******************数据库操作***********************/
        //存入数据库
        $uptime = date('Y-m-d H:i:s');    //获取当前上传时间

        $sql = "insert into upload (username,fname,fsize,uptime,fpath,intro) values ('$username','$file_name','$file_size','$uptime','$move_to_file','$intro')";

        $sqlHelper = new SqlHelper();
        $res = $sqlHelper->execute_dml($sql);

    //判断是否将上传的文件移动到目标位置(先判断是否上传成功,再判断是否添加到数据库)
         if (move_uploaded_file($uploaded_file, $move_to_file)) {

             //res=1表示添加上传成功
            if ($res == 1) {

                echo "<script>alert('{$_FILES['myfile']['name']}文件上传成功');window.location.href='down.php';</script>";
            }else{
                echo "<script>alert('文件上传失败');history.go(-1);</script>";
            }

         }else{
             echo "<script>alert('文件上传失败');history.go(-1);</script>";
         }

    }else{
        echo "<script>alert('文件上传失败');history.go(-1);</script>";
    }
}


/**
*
* 参数说明:
* 下载文件
*  $filepath     文件路径 
*  $filename     文件名
*
*/
function Download($filepath,$filename){
      //对中文文件名进行转码
    $filename=iconv("UTF-8","GB2312",$filename);   

    if(!file_exists($filepath)){ //检查文件是否存在
       echo "<script>alert('该文件不存在!');history.go(-1);</script>";
       // echo "该文件不存在!";

      return;
     }

      $fp = fopen($filepath, 'r');   //打开文件
      $file_size = filesize($filepath);  //计算文件大小

    if ($file_size>10*1024*1024) {

     echo "<script>window.alert('文件过大,您没权限下载')</script>";
     return;
    }
          //HTTP头部信息
        header("Content-type: application/octet-stream");
        header("Accept-Ranges: bytes");
        header("Accept-Length: ".$file_size);
        header("Content-Disposition: attachment; filename=".$filename);

    $buffer = 1024;
    //为了下载安全,做一个文件字节读取计数器
    $file_count = 0;
    //判断文件是否结束 feof
    while (!feof($fp) && ($file_size-$file_count > 0)) {

       $file_data = fread($fp, $buffer);  //统计读了多少字节
       $file_count+=$buffer;

        echo "$file_data";  //把数据会送给浏览器
    }
      fclose($fp);
   }

}

 ?>

更多精彩请访问,请一定记得 star : https://github.com/whm19940308/phpTools个人博客:https://www.whmblog.cn转载请标明原文链接:https://www.jianshu.com/p/8ab3dce8d6f1

 

六、ZipTools.php —— Zip压缩解压工具类

 

<?phpheader("Content-Type:text/html; charset=utf-8");/** * 上传文件工具类 * Class Upload */class UploadTools{ public $upload_name; //上传文件名 public $upload_tmp_name; //上传临时文件名 public $upload_final_name; //上传文件的最终文件名 public $upload_target_dir; //文件被上传到的目标目录 public $upload_target_path; //文件被上传到的最终路径 public $upload_filetype ; //上传文件类型 public $allow_uploadedfile_type; //允许的上传文件类型 public $upload_file_size; //上传文件的大小 public $allow_uploaded_maxsize=10240000;//允许上传文件的最大值,单位为字节,现在相当于允许上传 10M 的文件 //构造函数 public function __construct() { $this->upload_name = $_FILES["file"]["name"]; //取得上传文件名 $this->upload_filetype = $_FILES["file"]["type"]; $this->upload_tmp_name = $_FILES["file"]["tmp_name"]; $this->allow_uploadedfile_type = array('jpeg','jpg','png','gif','bmp','doc','xls','csv','zip','rar','txt','wps'); $this->upload_file_size = $_FILES["file"]["size"]; $this->upload_target_dir="./upload"; } //文件上传 public function upload_file() { if(!empty{ $upload_filetype = $this->getFileExt($this->upload_name);//获取文件扩展名 if(in_array($upload_filetype,$this->allow_uploadedfile_type))//判断文件类型是否符合要求 { if($this->upload_file_size < $this->allow_uploaded_maxsize)//判断文件大小是否超过允许的最大值 { if(!is_dir($this->upload_target_dir))//如果文件上传目录不存在 { mkdir($this->upload_target_dir,true);//创建文件上传目录 chmod($this->upload_target_dir,0777);//改权限 } $this->upload_final_name = date.rand.'.'.$upload_filetype;//生成随机文件名 $this->upload_target_path = $this->upload_target_dir."/".$this->upload_final_name;//文件上传目标目录 if(!move_uploaded_file($this->upload_tmp_name,$this->upload_target_path))//文件移动失败 { echo "<p style='color=red'>文件上传失败!</p>"; } else { echo "<p style='color=green'>文件上传成功!</p>"; } } else { echo("<p style='color=red'>文件太大,上传失败!</p>"); } } else { echo("<p style='color=red'>仅支持一下文件类型,请重新选择:<br>".implode(',',$this->allow_uploadedfile_type)."</p>"); } }else{ echo("<p style='color=red'>请上传文件!</p>"); } } /** *获取文件扩展名 *@param String $filename 要获取文件名的文件 */ public function getFileExt($filename){ $info = pathinfo($filename); return @$info["extension"]; }}

本文由金沙官网线上发布于编程,转载请注明出处:PHP文件上传,下载,Sql工具类!金沙官网线上

您可能还会对下面的文章感兴趣: