新濠天地 > PHP编程 > 可间接使用,首要有几大工具类

原标题:可间接使用,首要有几大工具类

浏览次数:99 时间:2019-09-29

PHP文件上传,下载,Sql工具类! 对文件大小,文件类型 同名覆盖 中文转码的操作,可直接使用

更多精彩请访问,请一定记得 star :

前台 upload.html

一、使用示例

<!DOCTYPE html>
<html>
<head>
 <title>文件上传</title>
</head>
<body>
<form enctype="multipart/form-data" action="uploadProcess.php" method="post">
 <table>
  <tr><td align="center" colspan="2"><font style="font-size: 40px; font-family: 华文彩云;" >文件上传</font></td></tr>
  <tr>
  <td>请填写用户名:</td>
  <td><input type="text" name="username"></td>
  </tr>
  <tr>
  <td>介绍:</td>
  <td><textarea name="intro" rows="10" cols="80"></textarea></td>
  </tr>
  <tr>
  <td>请选择你要上传的文件</td>
  <td><input type="file" name="myfile"></td>
  </tr>
  <tr><td><input type="submit" value="上传文件" /></td></tr>
 </table>
</form>
</body>
</html>
// 引入两个核心文件require_once './_autoload.php';require_once './functions.php';// 使用示例// 如调用DateTools工具类里的方法,调用示例如下$date_tools = new DateTools();var_dump($date_tools->getSomeZeroTimeStamp;

图片 1

二、代码目录

 

图片 2自己做工具--封装PHP的工具类.png

 

主要有几大工具类:ArrayTools.php —— 数组工具类CharacterTools.php —— 英文字母工具类CurlTools.php —— 跟curl相关的工具类DateTools.php —— 时间工具类EncryptTools.php —— 加密工具类FileTools.php —— 文件工具类HttpTools.php —— 与http协议相关的工具类ImageTools.php —— 图片工具类MapTools.php —— 地图工具类NumberTools.php —— 数字工具类SendCodeTools.php —— 聚合数据发送手机验证码工具类ServerTools.php —— 与服务器相关的工具类StringTools.php —— 字符串相关操作的工具类UploadTools.php —— 上传文件工具类VerifyTools.php —— 校验工具类,如验证ip、手机、邮箱等XmlTools.php —— 操作xml相关的工具类ZipTools.php —— Zip压缩解压工具类

控制器 FileProcess.php

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

<?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');/** * 跟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; }}

 

四、VerifyTools.php —— 校验工具类,如验证ip、手机、邮箱等

后台 FileService.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 —— 上传文件工具类

<?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);
   }

}

 ?>
<?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"]; }}

 

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

 

<?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文件'; } }}

 图片 3

更多精彩请访问,请一定记得 star :

 

工具类  SqlHelper.php

 

<?php

/**
 *    sql工具类(dml,dpl,dpl_arr,close_link)
 *
 *1.创建MySqli对象
 *2.操作数据库(发送sql)
 *3.处理结果
 *4.关闭资源
 *
 */

class SqlHelper {
    private $link;
    private static $host = 'localhost';
    private static $user = 'root';
    private static $pwd = '';
    private static $db = 'test';

    public  function __construct() {

        //初始化
        $this->link = new MYSQLi(self::$host,self::$user,self::$pwd,self::$db);
        if ($this->link->connect_error){
            die("数据库连接失败".$this->link->connect_error);
        }
        $this->link->query("set names utf8");
    }


    /**
     * dpl操作
     * @param unknown $sql
     */
    public function execute_dpl($sql){
        $res = $this->link->query($sql) or die("操作dpl失败".$this->link->error);
        return $res;
    }

    /**
     * dpl操作
     * @param $sql
     * @return arr
     *              把结果放在数组里。这样资源可以随时关闭,返回一个数组
     */

    public function execute_dpl_arr($sql){
        $arr = array();
        $res = $this->link->query($sql) or die("操作dpl_arr失败".$this->link->error);
        //把$res=>$arr,把结果集内容转移到一个数组中
        while ($row = $res->fetch_assoc()){
            $arr[] = $row;
        }
        //这里可以把资源立即关闭
        $res->free();
        return $arr;
    }


    /**
     * dml操作  update/delete/insert
     * @param unknown $sql
     */
    public function execute_dml($sql){

        $res = $this->link->query($sql) or die("操作dml失败".$this->link->error);
        if (!$res){
            return 0;   //失败
        }else {
            if ($this->link->affected_rows>0){
                return 1;   //成功
            }else {
                return 2;   //没有行受到影响
            }
        }
        $res->free();
    }


    //关闭链接
    public function close_link(){
        if (!empty($this->link)){
            $this->link->close();
        }
    }

}

 

本文由新濠天地发布于PHP编程,转载请注明出处:可间接使用,首要有几大工具类

关键词:

上一篇:只好在本类中会见,只好在本类中拜访

下一篇:没有了