自己做工具--封装PHP的工具类

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

一、使用示例

// 引入两个核心文件
require_once './_autoload.php';
require_once './functions.php';

// 使用示例
// 如调用DateTools工具类里的方法,调用示例如下
$date_tools = new DateTools();
var_dump($date_tools->getSomeZeroTimeStamp($str=''));

二、代码目录

自己做工具--封装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压缩解压工具类

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

<?php

header('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($url){

        //初始化一个 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($ch);
        curl_close($ch);
        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($param)); // 传递一个作为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($ch); // 运行cURL,请求网页
        if ($errno = curl_errno($ch)) {
            throw new Exception ('Curl Error(' . $errno . '):' . curl_error($ch));
        }
        curl_close($ch); // 关闭URL请求
        return $result; // 返回获取的数据

    }



    /**
     * 使用curl获取远程数据
     * @param  string $url url连接路径
     * @return string      获取到的数据
     */
    function curlGetContents($url){

        $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($ch);
        curl_close($ch);
        return $result;

    }


    /**
     * 异步将远程链接上的内容(图片或内容)写到本地
     * @param $url    远程地址
     * @param $saveName    保存在服务器上的文件名
     * @param $path    保存路径
     * @return boolean
     */
    function putFileFromUrlContent($url, $saveName, $path) {

        // 设置运行时间为无限制
        set_time_limit ( 0 );
        $url = trim ( $url );
        $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 ( $curl );

        // 关闭URL请求
        curl_close ( $curl );

        // 将文件写入获得的数据
        $filename = $path . $saveName;
        $write = @fopen ( $filename, "w" );
        if ($write == false) {
            return false;
        }
        if (fwrite ( $write, $file ) == false) {
            return false;
        }
        if (fclose ( $write ) == 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($res);// 当返回为true时,代表成功,反之,为失败


    // 使用代理抓取页面
    // 为什么要使用代理进行抓取呢?以google为例吧,如果去抓google的数据,短时间内抓的很频繁的话,你就抓取不到了。
    // google对你的ip地址做限制这个时候,你可以换代理重新抓。
    public function httpProxy($url){

        $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($ch);
        curl_close($ch);

    }


    // 继续保持本站session的调用
    // 在实现用户同步登录的情况下需要共享session,如果要继续保持本站的session,那么要把sessionid放到http请求中
    public function httpSession($url){

        $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($ch);
        curl_close($ch);

    }

}

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

<?php

header('content-type:text/html;charset=utf-8');

/**
 * 校验工具类,如验证ip、手机、邮箱等
 * Class VerifyTools
 */

class VerifyTools{


    /**
     * 说明:判断是否为合法的ip地址
     * 判断是否为合法的ip地址
     * @param string $ip ip地址
     * @return bool|int 不合法则返回false,合法则返回4(IPV4)或6(IPV6)
     */
    function isIPAddress($ip)
    {
        $ipv4Regex = '/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/';

        $ipv6Regex = '/^(((?=.*(::))(?!.*\3.+\3))\3?|([\dA-F]{1,4}(\3|:\b|$)|\2))(?4){5}((?4){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i';

        if (preg_match($ipv4Regex, $ip))
            return 4;

        if (false !== strpos($ip, ':') && preg_match($ipv6Regex, trim($ip, ' []')))
            return 6;

        return false;
    }


    // 说明: 验证邮箱格式
     function isValidEmail($email)
    {
        $check = false;
        if(filter_var($email,FILTER_VALIDATE_EMAIL))
        {
            $check = true;
        }
        return $check;
    }
    /**
    $email = "blog@koonk.com";
    $check = is_validemail($email);
    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($mobile){

        if(preg_match('/1[0123456789]\d{9}$/',$mobile))
            return true;
        return false;

    }


    /**
     * 检查固定电话
     * @param $mobile
     * @return bool
     */
    function checkTelephone($mobile){

        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");

/**
 * 上传文件工具类
 * 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($_FILES)){
            $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("YmdHis").rand(0,100).'.'.$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压缩解压工具类

<?php

header('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($path);


        // 判断是不是目录,是的话递归进入
        if(is_dir($path)) {
            $handler = opendir($path); //打开当前文件夹由$path指定。
            while (($filename = readdir($handler)) !== false) {
                if ($filename != "." && $filename != "..") {
                    //文件夹文件名字为'.'和'..',不要对他们进行操作
                    if (is_dir($path . "/" . $filename)) {
                        // 如果读取的某个对象是文件夹,则递归
                        $this->addFileToZip($path . "/" . $filename, $zip);
                    } else { //将文件加入zip对象
                        $zip->addFile($path . "/" . $filename);
                    }
                }
            }
        }else{
            $zip->addFile($path);
        }
        @closedir($path);

        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($path);//提取全部文件
            $zip->close();
            echo 'zip解压成功';

        } else {

            echo 'zip解压失败或没有这个zip文件';

        }

    }


}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343