首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
text
int
integer
web
scala
hashcode
command
flutter
replace
settings
express
range
erlang
golang
frameworks
include
substring
eval
subset
hashtable
split
bit
runtime
c语言
web3
import
testing
iostream
get
export
default
join
merge
function
match
dockerfile
dagger
case
javascript
php7
ascii
timestamp
jar
python
php
httpclient
nodejs
uml
ip
node.js
less
loops
fetch
hash
actionscrip
char
io
metadata
client
window
search
version
rsa
filter
heap
python2
perl
chat
expression
callback
cpython
js
select
plugins
grid
header
uri
cookie
bash
当前位置:
开发笔记
>
编程语言
> 正文
自己项目中PHP常用工具类大全分享-第八号当铺
作者:郭建将_683 | 来源:互联网 | 2018-03-19 18:25
自己项目中PHP常用工具类大全分享-第八号当铺
Php代码
/**
* 助手类
* @author www.shouce.ren
*
*/
class Helper
{
/**
* 判断当前服务器系统
* @return string
*/
public
static
function getOS(){
if(PATH_SEPARATOR ==
':'){
return
'Linux';
}
else{
return
'Windows';
}
}
/**
* 当前微妙数
* @return number
*/
public
static
function microtime_float() {
list (
$usec,
$sec ) =
explode (
" ", microtime () );
return (( float )
$usec + ( float )
$sec);
}
/**
* 切割utf-8格式的字符串(一个汉字或者字符占一个字节)
*
* @author zhao jinhan
* @version v1.0.0
*
*/
public
static
function truncate_utf8_string(
$string,
$length,
$etc =
'...') {
$result =
'';
$string = html_entity_decode ( trim (
strip_tags (
$string ) ), ENT_QUOTES,
'UTF-8' );
$strlen =
strlen (
$string );
for(
$i = 0; ((
$i <
$strlen) && (
$length > 0));
$i ++) {
if (
$number =
strpos (
str_pad (
decbin ( ord (
substr (
$string,
$i, 1 ) ) ), 8,
'0', STR_PAD_LEFT ),
'0' )) {
if (
$length <1.0) {
break;
}
$result .=
substr (
$string,
$i,
$number );
$length -= 1.0;
$i +=
$number - 1;
}
else {
$result .=
substr (
$string,
$i, 1 );
$length -= 0.5;
}
}
$result = htmlspecialchars (
$result, ENT_QUOTES,
'UTF-8' );
if (
$i <
$strlen) {
$result .=
$etc;
}
return
$result;
}
/**
* 遍历文件夹
* @param string $dir
* @param boolean $all true表示递归遍历
* @return array
*/
public
static
function scanfDir(
$dir=
'',
$all = false, &
$ret =
array()){
if ( false !== (
$handle = opendir (
$dir ))) {
while ( false !== (
$file = readdir (
$handle )) ) {
if (!in_array(
$file,
array(
'.',
'..',
'.git',
'.gitignore',
'.svn',
'.htaccess',
'.buildpath',
'.project'))) {
$cur_path =
$dir .
'/' .
$file;
if (
is_dir (
$cur_path )) {
$ret[
'dirs'][] =
$cur_path;
$all && self::scanfDir(
$cur_path,
$all,
$ret);
}
else {
$ret [
'files'] [] =
$cur_path;
}
}
}
closedir (
$handle );
}
return
$ret;
}
/**
* 邮件发送
* @param string $toemail
* @param string $subject
* @param string $message
* @return boolean
*/
public
static
function sendMail(
$toemail =
'',
$subject =
'',
$message =
'') {
$mailer = Yii::createComponent (
'application.extensions.mailer.EMailer' );
//邮件配置
$mailer->SetLanguage(
'zh_cn');
$mailer->Host = Yii::app()->params[
'emailHost'];
//发送邮件服务器
$mailer->Port = Yii::app()->params[
'emailPort'];
//邮件端口
$mailer->Timeout = Yii::app()->params[
'emailTimeout'];
//邮件发送超时时间
$mailer->COntentType=
'text/html';
//设置html格式
$mailer->SMTPAuth = true;
$mailer->Username = Yii::app()->params[
'emailUserName'];
$mailer->Password = Yii::app()->params[
'emailPassword'];
$mailer->IsSMTP ();
$mailer->From =
$mailer->Username;
// 发件人邮箱
$mailer->FromName = Yii::app()->params[
'emailFormName'];
// 发件人姓名
$mailer->AddReplyTo (
$mailer->Username );
$mailer->CharSet =
'UTF-8';
// 添加邮件日志
$modelMail =
new MailLog ();
$modelMail->accept =
$toemail;
$modelMail->subject =
$subject;
$modelMail->message =
$message;
$modelMail->send_status =
'waiting';
$modelMail->save ();
// 发送邮件
$mailer->AddAddress (
$toemail );
$mailer->Subject =
$subject;
$mailer->Body =
$message;
if (
$mailer->Send () === true) {
$modelMail->times =
$modelMail->times + 1;
$modelMail->send_status =
'success';
$modelMail->save ();
return true;
}
else {
$error =
$mailer->ErrorInfo;
$modelMail->times =
$modelMail->times + 1;
$modelMail->send_status =
'failed';
$modelMail->error =
$error;
$modelMail->save ();
return false;
}
}
/**
* 判断字符串是utf-8 还是gb2312
* @param unknown $str
* @param string $default
* @return string
*/
public
static
function utf8_gb2312(
$str,
$default =
'gb2312')
{
$str = preg_replace(
"/[\x01-\x7F]+/",
"",
$str);
if (
empty
empty(
$str))
return
$default;
$preg =
array(
"gb2312" =>
"/^([\xA1-\xF7][\xA0-\xFE])+$/",
//正则判断是否是gb2312
"utf-8" =>
"/^[\x{4E00}-\x{9FA5}]+$/u",
//正则判断是否是汉字(utf8编码的条件了),这个范围实际上已经包含了繁体中文字了
);
if (
$default ==
'gb2312') {
$option =
'utf-8';
}
else {
$option =
'gb2312';
}
if (!preg_match(
$preg[
$default],
$str)) {
return
$option;
}
$str = @iconv(
$default,
$option,
$str);
//不能转成 $option, 说明原来的不是 $default
if (
empty
empty(
$str)) {
return
$option;
}
return
$default;
}
/**
* utf-8和gb2312自动转化
* @param unknown $string
* @param string $outEncoding
* @return unknown|string
*/
public
static
function safeEncoding(
$string,
$outEncoding =
'UTF-8')
{
$encoding =
"UTF-8";
for(
$i = 0;
$i <
strlen (
$string );
$i ++) {
if (ord (
$string {
$i} ) <128)
continue;
if ((ord (
$string {
$i} ) & 224) == 224) {
// 第一个字节判断通过
$char =
$string {++
$i};
if ((ord (
$char ) & 128) == 128) {
// 第二个字节判断通过
$char =
$string {++
$i};
if ((ord (
$char ) & 128) == 128) {
$encoding =
"UTF-8";
break;
}
}
}
if ((ord (
$string {
$i} ) & 192) == 192) {
// 第一个字节判断通过
$char =
$string {++
$i};
if ((ord (
$char ) & 128) == 128) {
// 第二个字节判断通过
$encoding =
"GB2312";
break;
}
}
}
if (
strtoupper (
$encoding ) ==
strtoupper (
$outEncoding ))
return
$string;
else
return @iconv (
$encoding,
$outEncoding,
$string );
}
/**
* 返回二维数组中某个键名的所有值
* @param input $array
* @param string $key
* @return array
*/
public
static
function array_key_values(
$array =
array(),
$key=
'')
{
$ret =
array();
foreach((
array)
$array
as
$k=>
$v){
$ret[
$k] =
$v[
$key];
}
return
$ret;
}
/**
* 判断 文件/目录 是否可写(取代系统自带的 is_writeable 函数)
* @param string $file 文件/目录
* @return boolean
*/
public
static
function
is_writeable(
$file) {
if (
is_dir(
$file)){
$dir =
$file;
if (
$fp = @
fopen(
"$dir/test.txt",
'w')) {
@fclose(
$fp);
@unlink(
"$dir/test.txt");
$writeable = 1;
}
else {
$writeable = 0;
}
}
else {
if (
$fp = @
fopen(
$file,
'a+')) {
@fclose(
$fp);
$writeable = 1;
}
else {
$writeable = 0;
}
}
return
$writeable;
}
/**
* 格式化单位
*/
static
public
function byteFormat(
$size,
$dec = 2 ) {
$a =
array (
"B" ,
"KB" ,
"MB" ,
"GB" ,
"TB" ,
"PB" );
$pos = 0;
while (
$size >= 1024 ) {
$size /= 1024;
$pos ++;
}
return
round(
$size,
$dec ) .
" " .
$a[
$pos];
}
/**
* 下拉框,单选按钮 自动选择
*
* @param $string 输入字符
* @param $param 条件
* @param $type 类型
* selected checked
* @return string
*/
static
public
function selected(
$string,
$param = 1,
$type =
'select' ) {
$true = false;
if (
is_array(
$param ) ) {
$true = in_array(
$string,
$param );
}
elseif (
$string ==
$param ) {
$true = true;
}
$return=
'';
if (
$true )
$return =
$type ==
'select' ?
'selected="selected"' :
'checked="checked"';
echo
$return;
}
/**
* 下载远程图片
* @param string $url 图片的绝对url
* @param string $filepath 文件的完整路径(例如/www/images/test) ,此函数会自动根据图片url和http头信息确定图片的后缀名
* @param string $filename 要保存的文件名(不含扩展名)
* @return mixed 下载成功返回一个描述图片信息的数组,下载失败则返回false
*/
static
public
function downloadImage(
$url,
$filepath,
$filename) {
//服务器返回的头信息
$respOnseHeaders=
array();
//原始图片名
$originalfilename =
'';
//图片的后缀名
$ext =
'';
$ch = curl_init(
$url);
//设置curl_exec返回的值包含Http头
curl_setopt(
$ch, CURLOPT_HEADER, 1);
//设置curl_exec返回的值包含Http内容
curl_setopt(
$ch, CURLOPT_RETURNTRANSFER, 1);
//设置抓取跳转(http 301,302)后的页面
curl_setopt(
$ch, CURLOPT_FOLLOWLOCATION, 1);
//设置最多的HTTP重定向的数量
curl_setopt(
$ch, CURLOPT_MAXREDIRS, 3);
//服务器返回的数据(包括http头信息和内容)
$html = curl_exec(
$ch);
//获取此次抓取的相关信息
$httpinfo = curl_getinfo(
$ch);
curl_close(
$ch);
if (
$html !== false) {
//分离response的header和body,由于服务器可能使用了302跳转,所以此处需要将字符串分离为 2+跳转次数 个子串
$httpArr =
explode(
"\r\n\r\n",
$html, 2 +
$httpinfo[
'redirect_count']);
//倒数第二段是服务器最后一次response的http头
$header =
$httpArr[
count(
$httpArr) - 2];
//倒数第一段是服务器最后一次response的内容
$body =
$httpArr[
count(
$httpArr) - 1];
$header.=
"\r\n";
//获取最后一次response的header信息
preg_match_all(
'/([a-z0-9-_]+):\s*([^\r\n]+)\r\n/i',
$header,
$matches);
if (!
empty
empty(
$matches) &&
count(
$matches) == 3 && !
empty
empty(
$matches[1]) && !
empty
empty(
$matches[1])) {
for (
$i = 0;
$i <
count(
$matches[1]);
$i++) {
if (
array_key_exists(
$i,
$matches[2])) {
$responseHeaders[
$matches[1][
$i]] =
$matches[2][
$i];
}
}
}
//获取图片后缀名
if (0
'{(?:[^\/\\\\]+)\.(jpg|jpeg|gif|png|bmp)$}i',
$url,
$matches)) {
$originalfilename =
$matches[0];
$ext =
$matches[1];
}
else {
if (
array_key_exists(
'Content-Type',
$responseHeaders)) {
if (0
'{image/(\w+)}i',
$responseHeaders[
'Content-Type'],
$extmatches)) {
$ext =
$extmatches[1];
}
}
}
//保存文件
if (!
empty
empty(
$ext)) {
//如果目录不存在,则先要创建目录
if(!
is_dir(
$filepath)){
mkdir(
$filepath, 0777, true);
}
$filepath .=
'/'.
$filename.
".$ext";
$local_file =
fopen(
$filepath,
'w');
if (false !==
$local_file) {
if (false !== fwrite(
$local_file,
$body)) {
fclose(
$local_file);
$sizeinfo =
getimagesize(
$filepath);
return
array(
'filepath' =>
realpath(
$filepath),
'width' =>
$sizeinfo[0],
'height' =>
$sizeinfo[1],
'orginalfilename' =>
$originalfilename,
'filename' =>
pathinfo(
$filepath, PATHINFO_BASENAME));
}
}
}
}
return false;
}
/**
* 查找ip是否在某个段位里面
* @param string $ip 要查询的ip
* @param $arrIP 禁止的ip
* @return boolean
*/
public
static
function ipAccess(
$ip=
'0.0.0.0',
$arrIP =
array()){
$access = true;
$ip &&
$arr_cur_ip =
explode(
'.',
$ip);
foreach((
array)
$arrIP
as
$key=>
$value){
if(
$value ==
'*.*.*.*'){
$access = false;
//禁止所有
break;
}
$tmp_arr =
explode(
'.',
$value);
if((
$arr_cur_ip[0] ==
$tmp_arr[0]) && (
$arr_cur_ip[1] ==
$tmp_arr[1])) {
//前两段相同
if((
$arr_cur_ip[2] ==
$tmp_arr[2]) || (
$tmp_arr[2] ==
'*')){
//第三段为* 或者相同
if((
$arr_cur_ip[3] ==
$tmp_arr[3]) || (
$tmp_arr[3] ==
'*')){
//第四段为* 或者相同
$access = false;
//在禁止ip列,则禁止访问
break;
}
}
}
}
return
$access;
}
/**
* @param string $string 原文或者密文
* @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE
* @param string $key 密钥
* @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效
* @return string 处理后的 原文或者 经过 base64_encode 处理后的密文
*
* @example
*
* $a = authcode('abc', 'ENCODE', 'key');
* $b = authcode($a, 'DECODE', 'key'); // $b(abc)
*
* $a = authcode('abc', 'ENCODE', 'key', 3600); <
php
服务器
linux
windows
html
git
svn
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
int
Linux进程控制块PCBtask_struct结构体结构及作用详解
本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ...
[详细]
蜡笔小新 2023-12-13 21:31:18
int
Windows下配置PHP5.6的方法及注意事项
本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ...
[详细]
蜡笔小新 2023-12-14 12:37:25
int
Metasploit攻击渗透实践
本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ...
[详细]
蜡笔小新 2023-12-14 12:14:09
int
C#之数据集:DataSet对象的使用及相关方法详解
本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ...
[详细]
蜡笔小新 2023-12-14 12:09:13
get
OC学习笔记之@property和@synthesize
本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ...
[详细]
蜡笔小新 2023-12-14 12:05:06
get
Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ...
[详细]
蜡笔小新 2023-12-14 12:01:13
get
Hibernate基础映射
在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ...
[详细]
蜡笔小新 2023-12-14 10:57:47
get
SpringBoot集成前端模版(thymeleaf)的配置步骤
本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ...
[详细]
蜡笔小新 2023-12-14 10:11:46
web
知识图谱——机器大脑中的知识库
本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ...
[详细]
蜡笔小新 2023-12-14 10:06:19
web
测试人的性格,点火让他着急,考验婚姻问题的善意玩人
本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ...
[详细]
蜡笔小新 2023-12-14 09:10:09
c语言
PHP实现断点续传乱序合并文件的方法和源码
本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ...
[详细]
蜡笔小新 2023-12-14 04:33:19
get
java 线程死锁模拟
1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ...
[详细]
蜡笔小新 2023-12-13 19:12:25
get
解决Mac上无法使用localhost连接mysql的问题
本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ...
[详细]
蜡笔小新 2023-12-13 17:48:58
command
Webmin远程命令执行漏洞复现及防护方法
本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ...
[详细]
蜡笔小新 2023-12-13 16:14:53
int
Linux 正则表达式基础及使用注意事项
本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ...
[详细]
蜡笔小新 2023-12-13 14:24:45
郭建将_683
这个家伙很懒,什么也没留下!
Tags | 热门标签
text
int
integer
web
scala
hashcode
command
flutter
replace
settings
express
range
erlang
golang
frameworks
include
substring
eval
subset
hashtable
split
bit
runtime
c语言
web3
import
testing
iostream
get
export
RankList | 热门文章
1
如何实现微信支付宝小程序二码合一的点餐功能?
2
搜索引擎的索引库及其分类方式
3
Python连接服务器失败:使用aiohttp模拟服务器出现错误问题及解决方法
4
imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
5
MySQL表分区的创建、增加和删除方法详解
6
ch3中可视化软件pangolin的安装步骤及注意事项
7
童贯伐辽:宋军遭惨败的历史事件
8
springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
9
Python瓦片图下载、合并、绘图、标记的代码示例
10
《永嘉行》翻译及唐张籍诗歌赏析
11
工程中添加Android Dependencies
12
猜字母游戏
13
Linux环境变量函数getenv、putenv、setenv和unsetenv详解
14
PHPMailer邮件类邮件发送功能的使用教学及注意事项
15
github上_idea上传本地项目到github上(图解)
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有