Skip to content

jjonline/php-helper

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
src
 
 
 
 
 
 
 
 
 
 

jjonline/php-helper

Latest Stable Version License Build Status

jjonline/php-helper是日常开发过程中积累提炼而来,收集整理了基于静态类的多个常用函数方法和通用的对象类,PHP版本要求至少5.4,基于命名空间,适配composer,方便composer一键安装和管理。

安装

方法1、composer安装后使用composer的自动加载器

composer require jjonline/php-helper

方法2、下载代码包后直接使用包提供的自动加载器

require_once './autoload.php';

强烈建议使用composer进行包管理和安装

文档

快速示例:

use jjonline\helper\FilterValid;
use jjonline\helper\Tools;
use jjonline\library\Http;

// 表单效验
$isMailValid     = FilterValid::is_mail_valid('jjonline@jjonline.cn');
$isPhoneValid    = FilterValid::is_phone_valid('13800138000');

// ...

// 通用方法
$isMobileBrowser = Tools::is_mobile_browser();
$status          = Tools::rm_dir('./test');

// ...

// 通用http操纵类Post方法
$Http            = Http::init();
$excuteStatus    = $Http->setData('postField','postVallue')
                        ->setTimeOut(10)
                        ->setReferer('http://blog.jjonline.cn')
                        ->setUserAgent('Mozilla/5.0')
                        ->setRequestHeader('X-Powered-By','JJonline.Cn')
                        ->setRequestCookie('cookieName','cookieValue')
                        ->post('http://blog.jjonline.cn');
if($excuteStatus)
{
    $Http->save('/var/www/index.html');
    echo $Http->getBody();
}

// 通用http操纵类Get方法
$excuteStatus = $Http->reset()->get('http://blog.jjonline.cn');
if($excuteStatus)
{
    $Http->save('/var/www/index1.html');
    print_r($Http->getResponseCookie());
}

jjonline/php-helper包含两部分:

  • 静态类函数方法:src/function目录下
  • 对象类:src/library目录下

FilterValid 表单验证静态类

引入命名空间:use jjonline\helper\FilterValid

  • boolean FilterValid::is_mail_valid(string $str)

    检测传入的字符串是否符合邮箱格式

  • boolean FilterValid::is_phone_valid(mixed $str|number)

    检测传入的字符串或数字是否符合天朝手机号格式

  • boolean FilterValid::is_url_valid(string $url)

    检测传入的字符串是否为http或http打头的网址,可包含端口号、get参数和锚点

  • boolean FilterValid::is_uid_valid(mixd $uid[[,$min_len = 4],$max_len = 11])

    检测传入的数字是否为一个数字ID,第二个可选参数指定最小长度默认值4;第三个可选参数指定最大长度默认值11

  • boolean FilterValid::is_password_valid(string $pwd[,$min_len = 6,$max_len = 18])

    检测传入的字符串是否为同时包含数字和字母的合法密码,第二个可选参数指定最小长度默认值4;第三个可选参数指定最大长度默认值18

  • boolean FilterValid::is_chinese_valid(string $str)

    检测传入的字符串是否全部为中文汉字

  • boolean FilterValid::is_utf8_valid(string $str)

    检测传入的字符串是否utf8编码

  • mixd[false|array] FilterValid::is_citizen_id_valid(string $citizen_id)

    检测传入的字符串是否为合乎编码规范的天朝身份证号,兼容16位和18位,合乎规范返回从身份证号提取的出生年月、归属地、性别和身份证号组成的数组,否则返回false;注意传入16位老号码合乎规范的话返回数组中的身份证号将转换为18位!

Tools 常用工具方法静态类

引入命名空间:use jjonline\helper\Tools

  • boolean Tools::is_weixin_browser([string $userAgent = null])

    检测当前浏览器环境是否为微信浏览器,或者传入浏览器userAgent字符串检测是否为微信浏览器,参数可选

  • boolean Tools::is_mobile_browser()

    检测当前浏览器环境是否为移动端浏览器,当然微信浏览器也会返回true

  • string Tools::hide_name(string $userName)

    用户名脱敏处理,字符长度小于3返回3个*,长度大于3则返回首尾各1个字符以及中间的3个*号字符

  • string Tools::hide_ipv4(string $ip)

    IPv4地址脱敏处理,返回IPv4中间两位脱敏后的字符,例如:223.**.**.5

  • string Tools::nl2p(string $str)

    nl2br的类似函数,只不过是将换行符\n\r\n\r转换为成对的p标签

  • string Tools::time_ago(mixed $unixTimeStamp)

    将Unix时间戳转换为xx前这种模糊表示法,例如:刚刚1分钟前2小时前3周前1个月前(07-11)3年前(2014-12-02)

  • boolean Tools::is_ssl()

    检测当前请求是否为https请求

  • mixed Tools::get_client_ip([$isLong = 0],[$isAdv = false])

    获取客户端的IPv4地址,第一个可选参数1和true返回IPv4数字表示法,0和false返回IPv4字符串,默认值0;第二个可选参数是否检测http代理情况,false不检测,true检测,默认值false

  • void Tools::redirect(string $url[[,int $time = 0],$text = null])

    网页重定向,也就是网页跳转啦!第一参数跳转的url,第二个可选参数跳转等待时间,第三个可选参数跳转等待时显示的文本

  • string|null Tools::dump(string $str[,$echo=true[, $label=null[, $strict=true]]])

    开发时浏览器友好的调试输出任意变量,来源于ThinkPHP,一般调试输出仅需要将调试变量当做第一个参数

    第二个可选参数为false将返回处理好的字符串,为true直接输出没有返回值,默认值为true;

    第三个可选参数指定本次调试的标签,也就是在输出或返回值前加上这个标签值,便于开发调试,默认值null;

    第四个可选参数指定本次输出是否严格模式,也就是在输出或返回值的时候是否将html标签转义,默认值true;

  • string Tools::transfer_encrypt(string $str[, $key = 'jjonline'[, $expiry = 0]])

    来源于discuz的可逆加解密算法,用于有有效期效验的数据交换,加密强度很弱,请甄别使用场景

    第二个可选参数:本次加密的秘钥,默认加了一个秘钥jjonline

    第三个可选参数:本次加密的有效时间,单位秒,在该参数指定的时间内解密有效,默认值0表示永不失效

  • string Tools::transfer_decrypt(string $str[, $key = 'jjonline'])`

    将transfer_encrypt加密的值解密,并效验有效期,成功返回原串,失败或失效返回空字符串

    第一个参数:待解密的密文

    第二个参数:解密的秘钥

    返回值:已失效或解密失败返回空值,解密成功返回解密后明文

    特别留意:超过过期时间有秘钥也是能解密出明文的,只不过方法体本身效验是否过期,过期就认为解密失败

  • string Tools::mbsubstr(string $str [,$start = 0[, $length[, $charset = "utf-8"]]])

    返回参数指定的参数截取字符串,参数与原生函数mb_substr一致,这是一个兼容处理函数

  • Tools::get_rand_string([$len = 6[, $type = ''[, $addChars = '']]])

    获取随机字符串,来源于ThinkPHP

    第一个可选参数指定返回字符串长度,默认值6

    第二个可选参数指定返回字符串类型,取值空字符串、0字母、1数字、2大写字母、3小写字母、4中文,默认值空表示返回大小写字母和数字混合的随机字符串,0表示返回大小写字母混合的字符串,以此类推

    第三个可选参数指定附加的用于返回值随机字符串的字符元素,函数中的数字、大小写字母去除了易混淆的字母oOLl和数字0和1,若不需要去除通过第三个参数附加进去即可,默认值空字符串

  • string Tools::clear_js_code(string $html)

    去除字符串中的js代码,包括大段的由<script>标签包裹的代码和各标签属性中on开头的事件属性

  • string to_absolute_url(string $sUrl,string $baseUrl)

    将当前网页中的相对超链接转换为带域名的完整超链接

    第一个参数指定当前网页中的相对网址链接,例如:./../../article/news/1.html

    第二个参数指定当前网页的网址Url,例如:http://blog.jjonline.cn/a/html/top/idea.html

  • boolean Tools::rm_dir(string $dir)

    删除目录以及目录下的所有文件,原生函数rmdir只能删除非空目录

  • boolean Tools::generate_uuid([$opt = false])

    生成唯一性相当棒的uuid,例如:32EC26AB-70CD-B80D-FB72-ABD8B5CC9AA8

    可选参数传值truefalse,默认值false,表示返回的uuid不包裹大括号,传值true则返回包裹大括号的uuid,例如:{32EC26AB-70CD-B80D-FB72-ABD8B5CC9AA8}


Http 网络请求对象类

引入命名空间:use jjonline\library\Http

初始化

  • HttpObject Http::init()

    初始化Http单例类,返回http单例对象,例如:$http = Http::init()

设置方法

  • HttpObject $http->setUrl(string $url)

    设置请求的网址url

  • HttpObject $http->setTimeOut(int $time)

    设置请求连接上之后的超时时间,一个int型数字,单位:秒

  • HttpObject $http->setRequestHeader(mixed $key[,string $value = null])

    设置自定义请求头信息,参数比较灵活

    第一种传参方式:第一个参数为header头的名称部分,第二个参数为header头的值部分
    $http->setRequestHeader('X-Powered-By','PHP/7.0.22')
    
    第二种传参方式:仅第一个参数二维数组,一次可设置多个header头项目
    $http->setRequestHeader([['X-Powered-By'=>'PHP/7.0.22'],['X-User-By'=>'JJonline']])
    
    第三种传参方式:仅第一个参数字符串,完整的header头
    $http->setRequestHeader('X-Powered-By: PHP/7.0.22')
    
  • HttpObject $http->setReferer([string $key = null])

    设置请求头信息中的Referer来源,必须是一个合法的网址

  • HttpObject $http->setUserAgent(string $userAgent)

    设置请求头信息中的userAgent浏览器头信息

  • HttpObject $http->setData(mixed $key[,string $value = null])

    设置请求中post发送的表单数据,参数比较灵活

    第一种传参方式:第一个参数为post数据的名称部分,第二个参数为post数据的值部分
    $http->setData('name','Jea')
    $http->setData('sex','男')
    
    第二种传参方式:仅第一个参数二维数组,一次可设置多个fieldKey-fieldValue
    $http->setData([['name'=>'Jea'],['sex'=>'男']])
    
    第三种传参方式:仅第一个参数字符串,完整的url拼接格式,注意传值需要urlencode
    $http->setData('name=Jea&sex=%E7%94%B7')
    
  • HttpObject $http->setRequestCookie(mixed $key[,string $value = null])

    设置请求时发送的cookie,参数比较灵活

    第一种传参方式:第一个参数为cookie的名称部分,第二个参数为cookie的值部分
    $http->setRequestCookie('cookieName','cookieValue')
    
    第二种传参方式:仅第一个参数二维数组,一次可设置多个cookie
    $http->setRequestCookie([['cookieName1'=>'cookieValue1'],['cookieName2'=>'cookieValue2']])
    
    第三种传参方式:仅第一个参数字符串,符合curl_setopt原生设置cookie键值对的字符串
    $http->setRequestCookie('cookie_a=1; cookie_b=2') //注意分号和其后的空格
    
  • HttpObject $http->setUploadFile(string $field_name,string $file_dir)

    置Post方法上传的文件 第一个参数设置表单名,第二个参数设置拟上传文件路径

  • HttpObject $http->setOption(mixed $key[,mixed $value = null])

    高阶自定义设置cUrl原生参数,直接操纵curl_setopt函数的设置项,参数比较灵活,常量参考:点此

    第一种传参方式:与curl_setopt(resource $ch , int $option , mixed $value )的第2、3两个参数一致即可
    $http->setRequestCookie(CURLOPT_CRLF,true) //第一个参数为常量
    $http->setRequestCookie('CURLOPT_CRLF',true) //该种方法也是可以的,但不推荐
    
    第二种传参方式:仅第一个参数二维数组,一次可设置多个
    $http->setRequestCookie([['CURLOPT_CRLF'=>true],[CURLOPT_FILETIME=>true]])
    

获取设置的值方法

  • string $http->getUrl()

    获取设置的请求url

  • int $http->getTimeOut()

    获取设置的超时时间

  • mixed $http->getRequestHeader([string $key = null])

    获取设置的header,可选参数为header名称部分

    string $http->getRequestHeader('X-Powered-By')
    array  $http->getRequestHeader() //返回所有设置的header数组格式
    
  • string $http->getReferer()

    获取设置的Referer

  • string $http->getUserAgent()

    获取设置的UserAgent

  • mixed $http->getData([string $key = null])

    获取设置的表单数据

    string $http->getData('fieldName')
    array  $http->getData() //返回所有设置的表单数组
    
  • mixed $http->geetRequestCookie([string $key = null])

    获取设置的cookie数据

    string $http->geetRequestCookie('cookieName')
    array  $http->geetRequestCookie() //返回所有设置的cookie
    
  • mixed $http->getOption([string $key = null])

    获取设置的curl_setopt高阶参数

    string $http->getOption(CURLOPT_FILETIME)
    array  $http->getOption() //返回所有设置的curl_setopt高阶参数
    

执行请求和写入数据

  • boolean $http->get([string $url = null])

    执行get请求,返回布尔值,true执行成功,false执行异常

    可选参数为快捷设置请求的url,可代替setUrl方法

  • boolean $http->post([string $url = null[,array $data = []]])

    执行post请求,返回布尔值,true执行成功,false执行异常

    第一个可选参数为设置请求的url,第二个可选数组参数设置表单数据,格式与setData第二种传参方式一致

  • boolean $http->save(string $local_file_dir)

    成功执行get或post后,存储请求到的数据,俗称:下载

    参数为保存的路径,包括文件名和后缀,例如
    $ret = $http->get($url);
    $ret && $http->save($dir);
    

获取执行请求后的数据

  • string $http->getResult()

    获取请求成功后返回的包含header头的原始数据

  • string $http->getHeader()

    获取请求成功后返回数据的整个header头字符串

  • string $http->getBody()

    获取请求成功后返回数据的body主体内容,譬如:请求某个api后返回的json字符串

  • array $http->getResponseCookie()

    获取请求成功后返回数据中的cookie键值对数组

    该方法有个可选参数,取值true或false
    默认值false表示返回处理好的cookie键值对二维数组
    例如:[['JID'=>'so7i7srvbk4c5dd0748df8va23'],['token'=>'6a4ee8169908dc4ec0700008fe0c1085']]
    传值true表示返回header头中cookie键值对的原始表示法的一维数组,用于进一步处理获取一些信息
    例如:[
          'JID=so7i7srvbk4c5dd0748df8va23; path=/; domain=.jjonline.cn; HttpOnly',
          'token=6a4ee8169908dc4ec0700008fe0c1085; path=/; domain=.jjonline.cn; HttpOnly'
          ]
    
  • string $http->getError()

    获取请求失败后的错误描述字符串,curl_error的返回值

  • int $http->getErrno()

    获取请求失败后的错误号,curl_errno的返回值,没有出错返回数字0,出错返回不为0的数字

  • array $http->getInfo()

    获取http请求连接资源句柄的信息数组,curl_getinfo无第二个参数的返回值

重置数据单例复用

  • HttpObject $http->reset([boolean $isResetOption = false])

    一次http请求完毕需要再次请求之前为了防止两次数据乱入,再下一次请求执行之前调用reset方法清理掉上一次设置的参数,可选参数表示是否清理掉setOption方法设置的cUrl核心参数,默认值false表示不清理,需要清理传入true,传入true后在再次执行新请求前需重新设置各个参数

Http类示例

sample1、get请求晶晶博客

uese jjonline\helper\Tools;
use jjonline\library\Http;
$http = Http::init();
// [可选的]设置请求时的header头Referer
$http->setReferer('http://blog.jjonline.cn');
// [可选的]设置请求时的header头User-Agent值
$http->setUserAgent('Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/60.0.3112.90 Safari/537.36');
// [可选的]设置请求时的cookie
$http->setRequestCookie('JID','so7i7srvbk4c5dd0748df8va23');
// setData方法在get请求时无效,若需要为get方法传递get变量,请拼接好变量后通过setUrl方法设置
// 设置请求晶晶的博客首页的Url
$http->setUrl('http://blog.jjonline.cn');
// 执行get请求并判断执行状态
$isSuccess = $http->get();
/**
* $http->setUrl('http://blog.jjonline.cn'); 和 $isSuccess = $http->get();也可以简写成
* $isSuccess = $http->get('http://blog.jjonline.cn');
*/
/**
* 上述的代码也可以这样写:
* $isSuccess = $http->setReferer('http://blog.jjonline.cn')
*            ->setUserAgent('Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/60.0.3112.90 Safari/537.36')
*            ->setRequestCookie('JID','so7i7srvbk4c5dd0748df8va23')
*            ->setUrl('http://blog.jjonline.cn')
*            ->get();
*/
if($isSuccess)
{
   echo '请求成功,header数据为:';
   Tools::dump($http->getHeader());
   echo 'body数据为:';
   Tools::dump($http->getBody());
}else {
   echo '请求失败,curl_error()返回值为:'.$http->getError().'curl_errno()返回值为:'.$http->getErrno();
}

sample2、get请求下载图片

use jjonline\library\Http;
$http      = Http::init();
$isSuccess = $http->get('http://blog.jjonline.cn/Images/mm.jpg');
$isSuccess && $http->save('./m.jpg');//此时若不出现异常和错误,脚本所在目录会看到下载的这张图片

sample3、post请求

use jjonline\library\Http;
$http      = Http::init();
// 设置参数和post提交的数据
$http->setOption(CURLOPT_FILETIME,true)
  ->setReferer('http://blog.jjonline.cn')
  ->setUserAgent('Mozilla/5.0 (Windows NT 6.1; Win64; x64) Chrome/60.0.3112.90 Safari/537.36')
  ->setRequestCookie('JID','so7i7srvbk4c5dd0748df8va23')
  ->setData('postField1','这是post发送的名为postField1的值')
  ->setData('postField2','这是post发送的名为postField2的值')
  ->post('http://blog.jjonline.cn');
// 接下来的代码省略,当然啦我的博客个人首页对post响应与get无异

//再来一个post请求,请求之前需要reset掉设置的请求参数
$http->reset()
     ->setData('postData','reset之后原先设置的post请求参数不再生效')
     ->post('http://blog.jjonline.cn');

sample4、post上传文件

use jjonline\library\Http;
$http      = Http::init();
// 设置过程省略一部分...
$http->setUploadFile('FileField','../mm.jpg')
     ->post('http://blog.jjonline.cn');
// 当然,这里post之前依然可以调用setOption、setReferer等之类的方法
// 这里上传文件后假设被请求的服务器端(也就是接收文件上传方)是PHP开发的
// 那么可以通过$_FILES['FileField']读取到这个上传的文件

About

日常开发中常用到的PHP工具函数和类的Composer适配

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages