递归创建目录
/**
* 递归创建目录
* @param [type] $dir [description]
* @return [type] [description]
*/
function mkdirs($dir)
{
if(!is_dir($dir)){
if(!mkdirs(dirname($dir))){
return false;
}
if(!mkdir($dir, 0777)){
return false;
} else {
chmod($dir, 0777);
}
}
return true;
}
################# 使用实例 #######################
echo mkdirs('aaa/bbb/ccc/ddd/');
mb_substr系列函数截取字符串
/**
* 截取中文字符串
* @param [type] $string [截取字符串]
* @param integer $length [截取长度]
* @param integer $start [开始位置]
* @return [type] [description]
*/
function getSubstr($string, $length = 10, $start = 0)
{
if(mb_strlen($string,'utf-8')>$length){
# 对英文或中文字符都表示一个单位
$str = mb_strcut($string, $start, $length,'utf-8');
# 对中文字符是3个单位,英文是1个单位
$str = mb_substr($string, $start, $length,'utf-8');
return $str.'...';
}else{
return $string;
}
}
################# 使用实例 #######################
echo getSubstr('这样ABc来我的abc字符串就不会有乱码^_^', 5);
exit;
字节单位换算函数
/**
* 字节单位换算函数
* @param [type] $size [资源大小]
* @param integer $digits [保留小数位]
* @return [type] [description]
*/
function size2mb($size,$digits=2)
{
$unit = array('','K','M','G','T','P'); //单位数组,是必须1024进制依次的哦。
$base = 1024; //对数的基数
$i = floor(log($size,$base)); //字节数对1024取对数,值向下取整。
return round($size/pow($base,$i),$digits).' '.$unit[$i] . 'B';
}
/**
* 容量单位计算,支持定义小数保留长度;定义起始和目标单位,或按1024自动进位
*
* @param int $size,容量计数
* @param type $unit,容量计数单位,默认为字节
* @param type $decimals,小数点后保留的位数,默认保留一位
* @param type $targetUnit,转换的目标单位,默认自动进位
* @return type 返回符合要求的带单位结果
*/
function fileSizeConv($size, $unit = 'B', $decimals = 2, $targetUnit = 'auto')
{
$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB');
$theUnit = array_search(strtoupper($unit), $units); //初始单位是哪个
//判断是否自动计算,
if ($targetUnit != 'auto')
$targetUnit = array_search(strtoupper($targetUnit), $units);
//循环计算
while ($size >= 1024) {
$size/=1024;
$theUnit++;
if ($theUnit == $targetUnit)//已符合给定则退出循环吧!
break;
}
return sprintf("%1\$.{$decimals}f", $size) . $units[$theUnit];
}
################# 使用实例 #######################
echo size2mb(10240000900);
echo '<br>';
echo fileSizeConv(10240000900);
exit;
获取页面URL地址
/**
* 获取页面URL地址
* @return [type] [description]
*/
function getUrl(){
$url="http://www.xxxx.com";
if(isset($_SERVER["REQUEST_URI"])){
$url.=$_SERVER["REQUEST_URI"];
} else{
$url.=$_SERVER["PHP_SELF"];
if(!empty($_SERVER["QUERY_STRING"])){
$url.="?".$_SERVER["QUERY_STRING"];
}
}
return $url;
}
获取上页地址
/**
* 获取上页地址
* @return [type] [description]
*/
function getReferer()
{
return $_SERVER['HTTP_REFERER'];
}
设置登录成功返回页地址
/**
* 设置返回页地址
*/
function setReturnUrl()
{
$return_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
setcookie('returnurl', $return_url,time()+3600, '/', ".xxxx.com");
}
显示友好的时间格式
/**
* [显示友好的时间格式 xx分钟前 xx小时前 xx天 超过3天显示正常时间]
* @param [type] $date [description]
* @return [type] [description]
*/
function dataStr($date){
if((time()-$date)<60*10){
//十分钟内
echo '刚刚';
}elseif(((time()-$date)<60*60)&&((time()-$date)>=60*10)){
//超过十分钟少于1小时
$s = floor((time()-$date)/60);
echo $s."分钟前";
}elseif(((time()-$date)<60*60*24)&&((time()-$date)>=60*60)){
//超过1小时少于24小时
$s = floor((time()-$date)/60/60);
echo $s."小时前";
}elseif(((time()-$date)<60*60*24*3)&&((time()-$date)>=60*60*24)){
//超过1天少于3天内
$s = floor((time()-$date)/60/60/24);
echo $s."天前";
}else{
//超过3天
echo date("Y/m/d",$date);
}
}
/**
* 显示友好的时间格式
*
* @param [type] $time [description]
* @return [type] [description]
*/
function formatTime($time)
{
//获取今天凌晨的时间戳
$day = strtotime(date('Y-m-d',time()));
//获取昨天凌晨的时间戳
$pday = strtotime(date('Y-m-d',strtotime('-1 day')));
//获取现在的时间戳
$nowtime = time();
$tc = $nowtime-$time;
if($time<$pday){
$str = date('Y-m-d H:i:s',$time);
}elseif($time<$day && $time>$pday){
$str = "昨天";
}elseif($tc>60*60){
$str = floor($tc/(60*60))."小时前";
}elseif($tc>60){
$str = floor($tc/60)."分钟前";
}else{
$str = "刚刚";
}
return $str;
}
/**
* 显示友好的时间格式
*
* @param [type] $time [description]
* @return [type] [description]
*/
function transfer_time($time)
{
$rtime = date("m-d H:i",$time);
$htime = date("H:i",$time);
$time = time() - $time;
if ($time < 60)
{
$str = '刚刚';
}
elseif ($time < 60 * 60)
{
$min = floor($time/60);
$str = $min.'分钟前';
}
elseif ($time < 60 * 60 * 24)
{
$h = floor($time/(60*60));
$str = $h.'小时前 '.$htime;
}
elseif ($time < 60 * 60 * 24 * 3)
{
$d = floor($time/(60*60*24));
if($d==1)
$str = '昨天 '.$rtime;
else
$str = '前天 '.$rtime;
}
else
{
$str = $rtime;
}
return $str;
}
################# 使用实例 #######################
echo dataStr(time()-200000);
echo '<br>';
echo formatTime(time()-200000);
echo '<br>';
echo transfer_time(time()-200000);
创建头像存放路径
/**
* 创建资源存放路径
* 格式:000/00/01/36_middle.jpg
*
* @param $uid
* @param string $size
* @return string
*/
function createSavePath($saveId, $size = '')
{
$size = in_array($size, array('big', 'middle', 'small')) ? $size : 'middle';
$saveId = abs(intval($saveId));
$saveId = sprintf("%09d", $saveId);
$dir1 = substr($saveId, 0, 3);
$dir2 = substr($saveId, 3, 2);
$dir3 = substr($saveId, 5, 2);
return "{$dir1}/{$dir2}/{$dir3}/".substr($saveId, -2)."_{$size}.jpg";
}
################# 使用实例 #######################
echo createSavePath(136);
创建安全下载地址
/**
* 创建安全下载地址
* @param $fileName
* @param int $show
* @return string
*/
function downUrl($fileName, $show = 1)
{
$expired = time() + (3600 * 1); // 过期时间
$secret = 'ADFO9834RH94'; // salt
$md5_secret = base64_encode(md5("{$secret}{$fileName}{$expired}", true));
$md5_secret = str_replace('=', '', strtr($md5_secret, '+/', '-_'));
$down_url = "http://www.xxxx.com{$fileName}?st={$md5_secret}&e={$expired}";
if ($show == 1) {
die("<a href='{$down_url}'>" . $down_url . "</a>");
} elseif ($show == 2) {
return $down_url;
exit;
}
header("Content-type:application/zip");
header("location:{$down_url}");
exit;
}
防止表单注入
/**
* 防止表单注入
* 显示的时候要用 stripslashes() 去掉反斜杠
* stripslashes()了,它能把addslashes()处理时自动加上去的(反斜杠)\去掉
* @param $str
* @return string
*/
function formSafe($str)
{
$str = strip_tags($str); //去掉html标签
if(!get_magic_quotes_gpc()) //判断设置是否开启 只有0和1两种情况
{
$str = addslashes($str); //转换sql语句特殊字符
}
return $str;
}
数组键值排序函数
/**
* 数组键值排序
* @param $arr
* @param $keys
* @param string $type
* @return array
*/
function arrayKeySort($arr,$keys,$type='asc'){
$keysvalue = $new_array = array();
foreach ($arr as $k=>$v){
$keysvalue[$k] = $v[$keys];
}
if($type == 'asc'){
asort($keysvalue);
}else{
arsort($keysvalue);
}
reset($keysvalue);
$i = 0;
foreach ($keysvalue as $k=>$v){
$new_array[$i] = $arr[$k];
$i++;
}
return $new_array;
}
################# 使用实例 #######################
$aaa = array(
['key'=>10, 'name'=>'aaaaaaaaaa'],
['key'=>4, 'name'=>'sssssssssssss'],
['key'=>7, 'name'=>'cccccccccccccccc'],
['key'=>22, 'name'=>'ddddddddddddddddd'],
['key'=>67, 'name'=>'ffffffffffffffffffffffff'],
['key'=>2, 'name'=>'ooooooooooooooooooo'],
);
$aaas = arrayKeySort($aaa, 'key');
echo '<pre>';
print_r($aaas);
获取系统真实IP地址
/**
* 获取系统真实IP地址
* @return string
*/
function getRealIP(){
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
$ip = getenv("HTTP_CLIENT_IP");
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
$ip = getenv("REMOTE_ADDR");
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
$ip = $_SERVER['REMOTE_ADDR'];
else
$ip = "unknown";
return $ip;
}
################# 使用实例 #######################
echo getRealIP();
FTP操作类 [ 拷贝、移动、删除文件/创建目录]
/**
* 作用:FTP操作类( 拷贝、移动、删除文件/创建目录 )
* 时间:2016年9月29日18:45:18
* 作者:YPHP
* QQ:418250505
*/
class Ftp
{
public $off; // 返回操作状态(成功/失败)
public $conn_id; // FTP连接
/**
* 方法:FTP连接
* @FTP_HOST -- FTP主机
* @FTP_PORT -- 端口
* @FTP_USER -- 用户名
* @FTP_PASS -- 密码
*/
public function __construct($FTP_HOST, $FTP_PORT, $FTP_USER, $FTP_PASS)
{
$this->conn_id = @ftp_connect($FTP_HOST, $FTP_PORT) or die("FTP服务器连接失败");
@ftp_login($this->conn_id, $FTP_USER, $FTP_PASS) or die("FTP服务器登陆失败");
@ftp_pasv($this->conn_id, 1); // 打开被动模拟
}
/**
* 方法:上传文件
* @path -- 本地路径
* @newpath -- 上传路径
* @type -- 若目标目录不存在则新建
*/
public function upFile($path, $newpath, $type = true)
{
if ($type) $this->createMkdir($newpath);
$this->off = @ftp_put($this->conn_id, $newpath, $path, FTP_BINARY);
if (!$this->off) echo "文件上传失败,请检查权限及路径是否正确!";
}
/**
* 方法:移动文件
* @path -- 原路径
* @newpath -- 新路径
* @type -- 若目标目录不存在则新建
*/
public function moveFile($path, $newpath, $type = true)
{
if ($type) $this->createMkdir($newpath);
$this->off = @ftp_rename($this->conn_id, $path, $newpath);
if (!$this->off) echo "文件移动失败,请检查权限及原路径是否正确!";
}
/**
* 方法:复制文件
* 说明:由于FTP无复制命令,本方法变通操作为:下载后再上传到新的路径
* @path -- 原路径
* @newpath -- 新路径
* @type -- 若目标目录不存在则新建
*/
public function copyFile($path, $newpath, $type = true)
{
$downpath = "c:/tmp.dat";
$this->off = @ftp_get($this->conn_id, $downpath, $path, FTP_BINARY);// 下载
if (!$this->off) echo "文件复制失败,请检查权限及原路径是否正确!";
$this->up_file($downpath, $newpath, $type);
}
/**
* 方法:删除文件
* @path -- 路径
*/
public function delFile($path)
{
$this->off = @ftp_delete($this->conn_id, $path);
if (!$this->off) echo "文件删除失败,请检查权限及路径是否正确!";
}
/**
* 方法:生成目录
* @path -- 路径
*/
protected function createMkdir($path)
{
$path_arr = explode('/', $path); // 取目录数组
$file_name = array_pop($path_arr); // 弹出文件名
$path_div = count($path_arr); // 取层数
foreach ($path_arr as $val) // 创建目录
{
if (@ftp_chdir($this->conn_id, $val) == FALSE) {
$tmp = @ftp_mkdir($this->conn_id, $val);
if ($tmp == FALSE) {
echo "目录创建失败,请检查权限及路径是否正确!";
exit;
}
@ftp_chdir($this->conn_id, $val);
}
}
for ($i = 1; $i = $path_div; $i++) // 回退到根
{
@ftp_cdup($this->conn_id);
}
}
/**
* 方法:关闭FTP连接
*/
public function close()
{
@ftp_close($this->conn_id);
}
}
################# 使用实例 #######################
$ftp = new class_ftp('192.168.100.143', 21, 'user', 'pwd'); // 打开FTP连接
$ftp->upFile('aa.txt', 'a/b/c/cc.txt'); // 上传文件
$ftp->moveFile('a/b/c/cc.txt', 'a/cc.txt'); // 移动文件
$ftp->copyFile('a/cc.txt', 'a/b/dd.txt'); // 复制文件
$ftp->delFile('a/b/dd.txt'); // 删除文件
$ftp->close(); // 关闭FTP连接
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。