自己做工具--封裝PHP的工具類

更多精彩請訪問,請一定記得 star :https://github.com/whm19940308/phpTools
個人博客:https://www.whmblog.cn
轉(zhuǎn)載請標明原文鏈接:http://www.itdecent.cn/p/8ab3dce8d6f1

一、使用示例

// 引入兩個核心文件
require_once './_autoload.php';
require_once './functions.php';

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

二、代碼目錄

自己做工具--封裝PHP的工具類.png

主要有幾大工具類:
ArrayTools.php —— 數(shù)組工具類
CharacterTools.php —— 英文字母工具類
CurlTools.php —— 跟curl相關(guān)的工具類
DateTools.php —— 時間工具類
EncryptTools.php —— 加密工具類
FileTools.php —— 文件工具類
HttpTools.php —— 與http協(xié)議相關(guān)的工具類
ImageTools.php —— 圖片工具類
MapTools.php —— 地圖工具類
NumberTools.php —— 數(shù)字工具類
SendCodeTools.php —— 聚合數(shù)據(jù)發(fā)送手機驗證碼工具類
ServerTools.php —— 與服務(wù)器相關(guān)的工具類
StringTools.php —— 字符串相關(guān)操作的工具類
UploadTools.php —— 上傳文件工具類
VerifyTools.php —— 校驗工具類,如驗證ip、手機、郵箱等
XmlTools.php —— 操作xml相關(guān)的工具類
ZipTools.php —— Zip壓縮解壓工具類

三、ArrayTools.php —— 數(shù)組工具類

<?php

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

/**
 * 跟curl相關(guān)的工具類
 * Class CurlsTools
 */

class CurlsTools{


    /**
     * PHP get請求之發(fā)送數(shù)組
     * @param $url
     * @param array $param
     * @return mixed
     * @throws Exception
     */
    public function httpGet($url){

        //初始化一個 cURL 對象
        $ch  = curl_init();
        //設(shè)置你需要抓取的URL
        curl_setopt($ch, CURLOPT_URL, $url);
        // 設(shè)置cURL 參數(shù),要求結(jié)果保存到字符串中還是輸出到屏幕上。
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //是否獲得跳轉(zhuǎn)后的頁面
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        $result = curl_exec($ch);
        curl_close($ch);
        return $result;

    }


    /**
     * PHP post請求之發(fā)送數(shù)組
     * @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); // 設(shè)置需要抓取的URL
        curl_setopt($ch, CURLOPT_HEADER, 0); // // 設(shè)置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 設(shè)置cURL 參數(shù),要求結(jié)果保存到字符串中還是輸出到屏幕上。
        // 如果你想PHP去做一個正規(guī)的HTTP POST,設(shè)置這個選項為一個非零值。這個POST是普通的 application/x-www-from-urlencoded 類型,多數(shù)被HTML表單使用。
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); // 傳遞一個作為HTTP “POST”操作的所有數(shù)據(jù)的字符串。//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,請求網(wǎng)頁
        if ($errno = curl_errno($ch)) {
            throw new Exception ('Curl Error(' . $errno . '):' . curl_error($ch));
        }
        curl_close($ch); // 關(guān)閉URL請求
        return $result; // 返回獲取的數(shù)據(jù)

    }



    /**
     * 使用curl獲取遠程數(shù)據(jù)
     * @param  string $url url連接路徑
     * @return string      獲取到的數(shù)據(jù)
     */
    function curlGetContents($url){

        $ch=curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);                //設(shè)置訪問的url地址
        curl_setopt($ch, CURLOPT_HEADER,1);               //是否顯示頭部信息
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);               //設(shè)置超時
        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);   //用戶訪問代理 User-Agent
        curl_setopt($ch, CURLOPT_REFERER,$_SERVER['HTTP_HOST']);        //設(shè)置 referer
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);          //跟蹤301
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        //返回結(jié)果

        //這個是重點,加上這個便可以支持http和https下載
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        $result = curl_exec($ch);
        curl_close($ch);
        return $result;

    }


    /**
     * 異步將遠程鏈接上的內(nèi)容(圖片或內(nèi)容)寫到本地
     * @param $url    遠程地址
     * @param $saveName    保存在服務(wù)器上的文件名
     * @param $path    保存路徑
     * @return boolean
     */
    function putFileFromUrlContent($url, $saveName, $path) {

        // 設(shè)置運行時間為無限制
        set_time_limit ( 0 );
        $url = trim ( $url );
        $curl = curl_init ();
        // 設(shè)置你需要抓取的URL
        curl_setopt ( $curl, CURLOPT_URL, $url );
        // 設(shè)置header
        curl_setopt ( $curl, CURLOPT_HEADER, 0 );

        // 設(shè)置cURL 參數(shù),要求結(jié)果保存到字符串中還是輸出到屏幕上。
        curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 );

        //這個是重點,加上這個便可以支持http和https下載
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

        // 運行cURL,請求網(wǎng)頁
        $file = curl_exec ( $curl );

        // 關(guān)閉URL請求
        curl_close ( $curl );

        // 將文件寫入獲得的數(shù)據(jù)
        $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的數(shù)據(jù),短時間內(nèi)抓的很頻繁的話,你就抓取不到了。
    // 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);

    }


    // 繼續(xù)保持本站session的調(diào)用
    // 在實現(xiàn)用戶同步登錄的情況下需要共享session,如果要繼續(xù)保持本站的session,那么要把sessionid放到http請求中
    public function httpSession($url){

        $session_str = session_name().'='.session_id().'; path=/; domain=.explame.com';
        session_write_close(); //將數(shù)據(jù)寫入文件并且結(jié)束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;//允許上傳文件的最大值,單位為字節(jié),現(xiàn)在相當于允許上傳 10M 的文件

    //構(gòu)造函數(shù)
    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);//創(chuàng)建文件上傳目錄
                        chmod($this->upload_target_dir,0777);//改權(quán)限
                    }
                    $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 對相應(yīng)目錄文件進行壓縮
     * @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); // 調(diào)用方法,對要打包的根目錄進行操作,并將ZipArchive的對象傳遞給方法
    //    $zip->close(); // 關(guān)閉處理的zip文件
    //    }
    public function addFileToZip($path,$zip){

        // 轉(zhuǎn)化 \ 為 / ,適應(yīng) 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 對相應(yīng)目錄文件進行壓縮
     * @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 = ''){

        //將文件名和路徑轉(zhuǎn)成windows系統(tǒng)默認的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
轉(zhuǎn)載請標明原文鏈接:http://www.itdecent.cn/p/8ab3dce8d6f1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容