自定义PHP常用功能函数
https://www.php.cn/php-weizijiaocheng-395312.html
// +----------------------------------------------------------------------
// | PHP公共函数库
// +----------------------------------------------------------------------
// | Date : 2018-05-04
// +----------------------------------------------------------------------
// | create by: sublime text 3
// +----------------------------------------------------------------------
// | Author: deng
// +----------------------------------------------------------------------
/\*\*
\* 预定义常量
\*/
define("CHARSET", "utf-8");
/\*\*
\* 冒泡排序
\* @param Array 排序数组
\* @return Array 排序号的数组
\*/
function bubbleSort($arr)
{
$len=count($arr);
//该层循环控制 需要冒泡的轮数
for($i=1;$i<$len;$i++)
{ //该层循环用来控制每轮 冒出一个数 需要比较的次数
for($k=0;$k<$len-$i;$k++)
{
if($arr\[$k\]>$arr\[$k+1\])
{
$tmp=$arr\[$k+1\];
$arr\[$k+1\]=$arr\[$k\];
$arr\[$k\]=$tmp;
}
}
}
return $arr;
}
/\*\*
\* 选择排序
\* @param Array
\* @return Array
\*/
function selectSort($arr) {
//双重循环完成,外层控制轮数,内层控制比较次数
$len=count($arr);
for($i=0; $i<$len-1; $i++) {
//先假设最小的值的位置
$p = $i;
for($j=$i+1; $j<$len; $j++) {
//$arr\[$p\] 是当前已知的最小值
if($arr\[$p\] > $arr\[$j\]) {
//比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
$p = $j;
}
}
//已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
if($p != $i) {
$tmp = $arr\[$p\];
$arr\[$p\] = $arr\[$i\];
$arr\[$i\] = $tmp;
}
}
//返回最终结果
return $arr;
}
/\*\*
\* 插入排序
\* @param Array
\* @return Array
\*/
function insertSort($arr) {
$len=count($arr);
for($i=1; $i<$len; $i++) {
$tmp = $arr\[$i\];
//内层循环控制,比较并插入
for($j=$i-1;$j>=0;$j--) {
if($tmp < $arr\[$j\]) {
//发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
$arr\[$j+1\] = $arr\[$j\];
$arr\[$j\] = $tmp;
}
else {
//如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
break;
}
}
}
return $arr;
}
/\*\*
\* 快速排序
\* @param Array
\* @return Array
\*/
function quickSort($arr) {
//先判断是否需要继续进行
$length = count($arr);
if($length <= 1) {
return $arr;
}
//选择第一个元素作为基准
$base\_num = $arr\[0\];
//遍历除了标尺外的所有元素,按照大小关系放入两个数组内
//初始化两个数组
$left\_array = array(); //小于基准的
$right\_array = array(); //大于基准的
for($i=1; $i<$length; $i++) {
if($base\_num > $arr\[$i\]) {
//放入左边数组
$left\_array\[\] = $arr\[$i\];
}
else{
//放入右边
$right\_array\[\] = $arr\[$i\];
}
}
//再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数
$left\_array = quick\_sort($left\_array);
$right\_array = quick\_sort($right\_array);
//合并
return array\_merge($left\_array, array($base\_num), $right\_array);
}
/\*\*
\* 随机生成几位数字
\* @param $num Int
\* @return Int
\*/
function randomInt($num){
if(is\_null($num) || empty($num) || !isset($num)){
$num = 6;
}
else{
$param = str\_pad(mt\_rand(0, 999999), $num, "0", STR\_PAD\_BOTH);// 返回 input 被从左端、右端或者同时两端被填充到制定长度后的结果。如果可选的 pad\_string 参数没有被指定,input 将被空格字符填充,否则它将被 pad\_string 填充到指定长度
}
return $param;
}
/\*\*
\* 生成随机字符串,可以自己扩展 //若想唯一,只需在开头加上用户id
\* $type可以为:upper(只生成大写字母),lower(只生成小写字母),number(只生成数字)
\* $len为长度,定义字符串长度
\* @param $len int 指定字符串长度
\* @param $type 类型
\* @param return 随机字符串
\*/
function randomString($type, $len = 0) {
$new = '';
$string = '123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ'; //数据池
if ($type == 'upper') {
for ($i = 0; $i < $len; $i++) {
$new .= $string\[mt\_rand(36, 61)\];
}
return $new;
}
if ($type == 'lower') {
for ($i = 0; $i < $len; $i++) {
$new .= $string\[mt\_rand(10, 35)\];
}
return $new;
}
if ($type == 'number') {
for ($i = 0; $i < $len; $i++) {
$new .= $string\[mt\_rand(0, 9)\];
}
return $new;
}
}
/\*\*
\* 正则验证邮箱地址
\* @param $email String
\* @return Bool
\*/
function matchEmail($email){
if(!preg\_match('/^(\\w-\*\\.\*)+@(\\w-?)+(\\.\\w{2,})+$/', $email)){
return false;
}
else{
return true;
}
}
/\*\*
\* 正则匹配电话号码
\* @param Int $phone
\* @return Bool
\*/
function matchPhone($phone)
{
if(!preg\_match('/^(13\[0-9\]|14\[5|7\]|15\[0-9\]|16\[0-9\]|17\[0-9\]|18\[0-9\]|19\[0-9\])\\d{8}$/', $phone)){
return false;
}
else{
return true;
}
}
/\*\*
\* 图片转base64
\* @param ImageFile String 图片路径
\* @return 转为base64的图片
\*/
function Base64EncodeImage($ImageFile) {
if(file\_exists($ImageFile) || is\_file($ImageFile)){
$base64\_image = '';
$image\_info = getimagesize($image\_file);
$image\_data = fread(fopen($image\_file, 'r'), filesize($image\_file));
$base64\_image = 'data:' . $image\_info\['mime'\] . ';base64,' . chunk\_split(base64\_encode($image\_data));
return $base64\_image;
}
else{
return false;
}
}
/\*\*
\* 返回经addslashes处理过的字符串或数组
\* @param $string 需要处理的字符串或数组
\* @return mixed
\*/
function newAddslashes($string){
if(!is\_array($string)) return addslashes($string);
foreach($string as $key => $val) $string\[$key\] = new\_addslashes($val);
return $string;
}
/\*\*
\* 返回经stripslashes处理过的字符串或数组
\* @param $string 需要处理的字符串或数组
\* @return mixed
\*/
function newStripslashes($string) {
if(!is\_array($string)) return stripslashes($string);
foreach($string as $key => $val) $string\[$key\] = new\_stripslashes($val);
return $string;
}
/\*\*
\* 返回经htmlspecialchars处理过的字符串或数组
\* @param $string 需要处理的字符串或数组
\* @return mixed
\*/
function newHtmlSpecialChars($string) {
$encoding = 'utf-8';
if(strtolower(CHARSET)=='gbk') $encoding = 'ISO-8859-15';
if(!is\_array($string)) return htmlspecialchars($string,ENT\_QUOTES,$encoding);
foreach($string as $key => $val) $string\[$key\] = new\_html\_special\_chars($val);
return $string;
}
/\*\*
\* 返回经html\_entity\_decode处理过的字符串或数组
\* @param $string 需要处理的字符串或数组
\* @return mixed
\*/
function newHtmlEentityDdecode($string) {
$encoding = 'utf-8';
if(strtolower(CHARSET)=='gbk') $encoding = 'ISO-8859-15';
return html\_entity\_decode($string,ENT\_QUOTES,$encoding);
}
/\*\*
\* 返回经htmlentities处理过的字符串或数组
\* @param $string 需要处理的字符串或数组
\* @return mixed
\*/
function newHtmlentities($string) {
$encoding = 'utf-8';
if(strtolower(CHARSET)=='gbk') $encoding = 'ISO-8859-15';
return htmlentities($string,ENT\_QUOTES,$encoding);
}
/\*\*
\* 安全过滤函数
\*
\* @param $string
\* @return string
\*/
function safeReplace($string) {
$string = str\_replace('%20','',$string);
$string = str\_replace('%27','',$string);
$string = str\_replace('%2527','',$string);
$string = str\_replace('\*','',$string);
$string = str\_replace('"','"',$string);
$string = str\_replace("'",'',$string);
$string = str\_replace('"','',$string);
$string = str\_replace(';','',$string);
$string = str\_replace('<','<',$string);
$string = str\_replace('>','>',$string);
$string = str\_replace("{",'',$string);
$string = str\_replace('}','',$string);
$string = str\_replace('\\\\','',$string);
return $string;
}
/\*\*
\* 过滤ASCII码从0-28的控制字符
\* @return String
\*/
function trimUnsafeControlChars($str) {
$rule = '/\[' . chr ( 1 ) . '-' . chr ( 8 ) . chr ( 11 ) . '-' . chr ( 12 ) . chr ( 14 ) . '-' . chr ( 31 ) . '\]\*/';
return str\_replace ( chr ( 0 ), '', preg\_replace ( $rule, '', $str ) );
}
/\*\*
\* 格式化文本域内容
\*
\* @param $string 文本域内容
\* @return string
\*/
function trimTextarea($string) {
$string = nl2br ( str\_replace ( ' ', ' ', $string ) );
return $string;
}
\---------------------
/\*\*
\* 将文本格式成适合js输出的字符串
\* @param string $string 需要处理的字符串
\* @param intval $isjs 是否执行字符串格式化,默认为执行
\* @return string 处理后的字符串
\*/
function formatJs($string, $isjs = 1) {
$string = addslashes(str\_replace(array("\\r", "\\n", "\\t"), array('', '', ''), $string));
return $isjs ? 'document.write("'.$string.'");' : $string;
}
/\*\*
\* 转义 javascript 代码标记
\*
\* @param $str
\* @return mixed
\*/
function trimScript($str) {
if(is\_array($str)){
foreach ($str as $key => $val){
$str\[$key\] = trim\_script($val);
}
}
else{
$str = preg\_replace ( '/\\\]\*?)\\>/si', '', $str );
$str = preg\_replace ( '/\\\]\*?)\\>/si', '', $str );
$str = preg\_replace ( '/\\\]\*?)\\>/si', '', $str );
$str = str\_replace ( 'javascript:', 'javascript:', $str );
}
return $str;
}
/\*\*
\* 获取当前页面完整URL地址
\* @return url
\*/
function getUrl() {
$sys\_protocal = isset($\_SERVER\['SERVER\_PORT'\]) && $\_SERVER\['SERVER\_PORT'\] == '443' ? 'https://' : 'http://';
$php\_self = $\_SERVER\['PHP\_SELF'\] ? safe\_replace($\_SERVER\['PHP\_SELF'\]) : safe\_replace($\_SERVER\['SCRIPT\_NAME'\]);
$path\_info = isset($\_SERVER\['PATH\_INFO'\]) ? safe\_replace($\_SERVER\['PATH\_INFO'\]) : '';
$relate\_url = isset($\_SERVER\['REQUEST\_URI'\]) ? safe\_replace($\_SERVER\['REQUEST\_URI'\]) : $php\_self.(isset($\_SERVER\['QUERY\_STRING'\]) ? '?'.safe\_replace($\_SERVER\['QUERY\_STRING'\]) : $path\_info);
return $sys\_protocal.(isset($\_SERVER\['HTTP\_HOST'\]) ? $\_SERVER\['HTTP\_HOST'\] : '').$relate\_url;
}
/\*\*
\* 字符截取 支持UTF8/GBK
\* @param $string 截取的字符串
\* @param $length 截取长度
\* @param $dot
\*/
function strCut($string, $length, $dot = '...') {
$strlen = strlen($string);
if($strlen <= $length) return $string;
$string = str\_replace(array(' ',' ', '&', '"', ''', '“', '”', '—', '', '·', '…'), array('∵',' ', '&', '"', "'", '“', '”', '—', '', '·', '…'), $string);
$strcut = '';
if(strtolower(CHARSET) == 'utf-8') {
$length = intval($length-strlen($dot)-$length/3);
$n = $tn = $noc = 0;
while($n < strlen($string)) {
$t = ord($string\[$n\]);
if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
$tn = 1; $n++; $noc++;
} elseif(194 <= $t && $t <= 223) {
$tn = 2; $n += 2; $noc += 2;
} elseif(224 <= $t && $t <= 239) {
$tn = 3; $n += 3; $noc += 2;
} elseif(240 <= $t && $t <= 247) {
$tn = 4; $n += 4; $noc += 2;
} elseif(248 <= $t && $t <= 251) {
$tn = 5; $n += 5; $noc += 2;
} elseif($t == 252 || $t == 253) {
$tn = 6; $n += 6; $noc += 2;
} else {
$n++;
}
if($noc >= $length) {
break;
}
}
if($noc > $length) {
$n -= $tn;
}
$strcut = substr($string, 0, $n);
$strcut = str\_replace(array('∵', '&', '"', "'", '“', '”', '—', '', '·', '…'), array(' ', '&', '"', ''', '“', '”', '—', '', '·', '…'), $strcut);
}
else{
$dotlen = strlen($dot);
$maxi = $length - $dotlen - 1;
$current\_str = '';
$search\_arr = array('&',' ', '"', "'", '“', '”', '—', '', '·', '…','∵');
$replace\_arr = array('&',' ', '"', ''', '“', '”', '—', '', '·', '…',' ');
$search\_flip = array\_flip($search\_arr);
for ($i = 0; $i < $maxi; $i++) {
$current\_str = ord($string\[$i\]) > 127 ? $string\[$i\].$string\[++$i\] : $string\[$i\];
if (in\_array($current\_str, $search\_arr)) {
$key = $search\_flip\[$current\_str\];
$current\_str = str\_replace($search\_arr\[$key\], $replace\_arr\[$key\], $current\_str);
}
$strcut .= $current\_str;
}
}
return $strcut.$dot;
}
/\*\*
\* 获取请求ip
\* @return ip地址
\*/
function getIp() {
if(getenv('HTTP\_CLIENT\_IP') && strcasecmp(getenv('HTTP\_CLIENT\_IP'), 'unknown')) {
$ip = getenv('HTTP\_CLIENT\_IP');
} elseif(getenv('HTTP\_X\_FORWARDED\_FOR') && strcasecmp(getenv('HTTP\_X\_FORWARDED\_FOR'), 'unknown')) {
$ip = getenv('HTTP\_X\_FORWARDED\_FOR');
} elseif(getenv('REMOTE\_ADDR') && strcasecmp(getenv('REMOTE\_ADDR'), 'unknown')) {
$ip = getenv('REMOTE\_ADDR');
} elseif(isset($\_SERVER\['REMOTE\_ADDR'\]) && $\_SERVER\['REMOTE\_ADDR'\] && strcasecmp($\_SERVER\['REMOTE\_ADDR'\], 'unknown')) {
$ip = $\_SERVER\['REMOTE\_ADDR'\];
}
return preg\_match ( '/\[\\d\\.\]{7,15}/', $ip, $matches ) ? $matches \[0\] : '';
}
/\*\*
\* 字节换算
\* @param string $filesize 字节大小
\* @return string 返回大小
\*/
function sizeCount($filesize) {
if ($filesize >= 1073741824) {
$filesize = round($filesize / 1073741824 \* 100) / 100 .' GB';
} elseif ($filesize >= 1048576) {
$filesize = round($filesize / 1048576 \* 100) / 100 .' MB';
} elseif($filesize >= 1024) {
$filesize = round($filesize / 1024 \* 100) / 100 . ' KB';
} else {
$filesize = $filesize.' Bytes';
}
return $filesize;
}
/\*\*
\* 获取下个月第一天和最后一天
\* @param 上月时间
\* @return 返回下月最后一天
\*/
function getNextMonthDays($date){
$timestamp=strtotime($date);
$arr=getdate($timestamp);
if($arr\['mon'\] == 12){
$year=$arr\['year'\] +1;
$month=$arr\['mon'\] -11;
$firstday=$year.'-0'.$month.'-01';
$lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
}else{
$firstday=date('Y-m-01',strtotime(date('Y',$timestamp).'-'.(date('m',$timestamp)+1).'-01'));
$lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
}
return array($firstday,$lastday);
}
/\*\*
\* 获取给定月份的天数
\* @param Int $month 需要获取天数的月份
\* @param Int $year 需要获取天数的年份
\* @return Int 天数
\*/
function getDays($month,$year){
switch($month){
case '1':
case '3':
case '5':
case '7':
case '8':
case '10':
case '12':
return 31;
break;
case '4':
case '6':
case '9':
case '11':
return 30;
break;
case '2':
if(($year%4==0 && $year%100!=0) || $year%400==0){//整百的年份要同时满足400的倍数才算闰年
return 29;
}else{
return 28;
}
break;
}
}
/\*\*
\* 获取指定日期的前/后多少天,月,年
\* @param Date $vdate 指定的日期
\* @param Int $num 向前还是向后
\* @param string $vtype 天/月/年
\* @return Date 获取的时间
\*/
function dateCount($vdate,$vnum,$vtype){
$day = date('j',strtotime($vdate));
$month = date('n',strtotime($vdate));
$year = date('Y',strtotime($vdate));
switch($vtype){
case 'day':
if($vnum >= 0){
$day = $day + abs($vnum);
}else{
$day = $day - abs($vnum);
}
break;
case 'month':
if($vnum >= 0){
$month = $month+ abs($vnum);
}else{
$month = $month- abs($vnum);
}
$next = getDays($month,$year);//获取变换后月份的总天数
if($next<$day){
$day = $next;
}
break;
case 'year':
if($vnum >= 0){
$year = $year+ abs($vnum);
}else{
$year = $year - abs($vnum);
}
break;
default :
break;
}
$time = mktime(0,0,0,$month,$day,$year);
return date('Y-m-d',$time);
}
/\*\*
\* 查询字符是否存在于某字符串
\* @param $haystack 字符串
\* @param $needle 要查找的字符
\* @return bool
\*/
function strExists($haystack, $needle){
return !(strpos($haystack, $needle) === FALSE);
}
/\*\*
\* 取得文件扩展
\* @param $filename 文件名
\* @return 扩展名
\*/
function fileExt($filename) {
return strtolower(trim(substr(strrchr($filename, '.'), 1, 10)));
}
/\*\*
\* IE浏览器判断
\*/
function isIe() {
$useragent = strtolower($\_SERVER\['HTTP\_USER\_AGENT'\]);
if((strpos($useragent, 'opera') !== false) || (strpos($useragent, 'konqueror') !== false)) return false;
if(strpos($useragent, 'msie ') !== false) return true;
return false;
}
/\*\*
\* 文件下载
\* @param $filepath 文件路径
\* @param $filename 文件名称
\*/
function fileDown($filepath, $filename = '') {
if(!$filename) $filename = basename($filepath);
if(is\_ie()) $filename = rawurlencode($filename);
$filetype = fileext($filename);
$filesize = sprintf("%u", filesize($filepath));
if(ob\_get\_length() !== false) @ob\_end\_clean();
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: pre-check=0, post-check=0, max-age=0');
header('Content-Transfer-Encoding: binary');
header('Content-Encoding: none');
header('Content-type: '.$filetype);
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-length: '.$filesize);
readfile($filepath);
exit;
}
/\*\*
\* 判断字符串是否为utf8编码,英文和半角字符返回ture
\* @param $string
\* @return bool
\*/
function isUtf8($string) {
return preg\_match('%^(?:
\[\\x09\\x0A\\x0D\\x20-\\x7E\] # ASCII
| \[\\xC2-\\xDF\]\[\\x80-\\xBF\] # non-overlong 2-byte
| \\xE0\[\\xA0-\\xBF\]\[\\x80-\\xBF\] # excluding overlongs
| \[\\xE1-\\xEC\\xEE\\xEF\]\[\\x80-\\xBF\]{2} # straight 3-byte
| \\xED\[\\x80-\\x9F\]\[\\x80-\\xBF\] # excluding surrogates
| \\xF0\[\\x90-\\xBF\]\[\\x80-\\xBF\]{2} # planes 1-3
| \[\\xF1-\\xF3\]\[\\x80-\\xBF\]{3} # planes 4-15
| \\xF4\[\\x80-\\x8F\]\[\\x80-\\xBF\]{2} # plane 16
)\*$%xs', $string);
}
/\*\*
\* 检查密码长度是否符合规定
\*
\* @param STRING $password
\* @return TRUE or FALSE
\*/
function isPassword($password) {
$strlen = strlen($password);
if($strlen >= 6 && $strlen <= 20) return true;
return false;
}
/\*\*
\* 检测输入中是否含有特殊字符
\*
\* @param char $string 要检查的字符串名称
\* @return TRUE or FALSE
\*/
function isBadword($string) {
$badwords = array("\\\\",'&',' ',"'",'"','/','\*',',','',"\\r","\\t","\\n","#");
foreach($badwords as $value){
if(strpos($string, $value) !== FALSE) {
return TRUE;
}
}
return FALSE;
}
/\*\*
\* 检查用户名是否符合规定
\*
\* @param STRING $username 要检查的用户名
\* @return TRUE or FALSE
\*/
function isUsername($username) {
$strlen = strlen($username);
if(is\_badword($username) || !preg\_match("/^\[a-zA-Z0-9\_\\x7f-\\xff\]\[a-zA-Z0-9\_\\x7f-\\xff\]+$/", $username)){
return false;
}
elseif ( 20 < $strlen || $strlen < 2 ) {
return false;
}
return true;
}
/\*\*
\* 对数据进行编码转换
\* @param array/string $data 数组
\* @param string $input 需要转换的编码
\* @param string $output 转换后的编码
\*/
function arrayIconv($data, $input = 'gbk', $output = 'utf-8') {
if (!is\_array($data)) {
return iconv($input, $output, $data);
}
else{
foreach ($data as $key=>$val) {
if(is\_array($val)) {
$data\[$key\] = array\_iconv($val, $input, $output);
} else {
$data\[$key\] = iconv($input, $output, $val);
}
}
return $data;
}
}
/\*\*
\*
\* 抓取远程内容
\* @param $url 接口url地址
\* @param $timeout 超时时间
\*/
function pcFileGetContents($url, $timeout=30) {
$stream = stream\_context\_create(array('http' => array('timeout' => $timeout)));
return @file\_get\_contents($url, 0, $stream);
}
/\*\*
\* Function dataformat
\* 时间转换
\* @param $n INT时间
\*/
function dataFormat($n) {
$hours = floor($n/3600);
$minite = floor($n%3600/60);
$secend = floor($n%3600%60);
$minite = $minite < 10 ? "0".$minite : $minite;
$secend = $secend < 10 ? "0".$secend : $secend;
if($n >= 3600){
return $hours.":".$minite.":".$secend;
}else{
return $minite.":".$secend;
}
}
\---------------------
/\*\*
\* 生成订单15位
\*/
function setUpOrder($ord = 0) {
//自动生成订单号 传入参数为0 或者1 0为本地 1为线上订单
if ($ord == 0) {
$str = '00' . time() . rand(1000, 9999); //00 本地订单
}
else {
$str = '99' . time() . rand(1000, 9999); //11 线上订单
}
return $str;
}
/\*\*
\* 处理json字符中的特殊字符
\* @param 需要处理的json PHP > 5.2 json\_encode 知道转义
\*/
function getJsonToArr($value) {
$escapers = array("\\\\", "/", "\\"", "\\n", "\\r", "\\t", "\\x08", "\\x0c");
$replacements = array("\\\\\\\\", "\\\\/", "\\\\\\"", "\\\\n", "\\\\r", "\\\\t", "\\\\f", "\\\\b");
$result = str\_replace($escapers, $replacements, $value);
return $result;
}
/\*\*
\* 非法字符过滤函数
\* @param 过滤字符串
\*/
function hasUnsafeword($str) {
$regex = "/\\/|\\~|\\!|\\@|\\#|\\\\$|\\%|\\^|\\&|\\\*|\\(|\\)|\\\_|\\+|\\{|\\}|\\:|\\|\\?|\\\[|\\\]|\\.|\\/|\\;|\\'|\\`|\\=|\\\\\\|\\|/";
return preg\_replace($regex,"",$str);
}
/\*\*
\* 去空格,以及字符添加斜杠
\*/
function clearTrim(&$value) {
Return addslashes(trim($value));
}
/\*\*
\* 数组降维
\* @param Array $arr
\* @return Array
\*/
function arrMd2Ud($arr) {
#将数值第一元素作为容器,作地址赋值。
$ar\_room = &$arr\[key($arr)\];
#第一容器不是数组进去转呀
if (!is\_array($ar\_room)) {
#转为成数组
$ar\_room = array($ar\_room);
}
#指针下移
next($arr);
#遍历
while (list($k, $v) = each($arr)) {
#是数组就递归深挖,不是就转成数组
$v = is\_array($v) ? call\_user\_func(\_\_FUNCTION\_\_, $v) : array($v);
#递归合并
$ar\_room = array\_merge\_recursive($ar\_room, $v);
#释放当前下标的数组元素
unset($arr\[$k\]);
}
return $ar\_room;
}
/\*\*
\* 判断是PC端还是wap端访问
\* @return type判断手机移动设备访问
\*/
function isMobile()
{
// 如果有HTTP\_X\_WAP\_PROFILE则一定是移动设备
if (isset ($\_SERVER\['HTTP\_X\_WAP\_PROFILE'\]))
{
return true;
}
// 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset ($\_SERVER\['HTTP\_VIA'\]))
{
// 找不到为flase,否则为true
return stristr($\_SERVER\['HTTP\_VIA'\], "wap") ? true : false;
}
// 脑残法,判断手机发送的客户端标志,兼容性有待提高
if (isset ($\_SERVER\['HTTP\_USER\_AGENT'\]))
{
$clientkeywords = array ('nokia',
'sony',
'ericsson',
'mot',
'samsung',
'htc',
'sgh',
'lg',
'sharp',
'sie-',
'philips',
'panasonic',
'alcatel',
'lenovo',
'iphone',
'ipod',
'blackberry',
'meizu',
'android',
'netfront',
'symbian',
'ucweb',
'windowsce',
'palm',
'operamini',
'operamobi',
'openwave',
'nexusone',
'cldc',
'midp',
'wap',
'mobile'
);
// 从HTTP\_USER\_AGENT中查找手机浏览器的关键字
if (preg\_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($\_SERVER\['HTTP\_USER\_AGENT'\])))
{
return true;
}
}
// 协议法,因为有可能不准确,放到最后判断
if (isset ($\_SERVER\['HTTP\_ACCEPT'\]))
{
// 如果只支持wml并且不支持html那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
if ((strpos($\_SERVER\['HTTP\_ACCEPT'\], 'vnd.wap.wml') !== false) && (strpos($\_SERVER\['HTTP\_ACCEPT'\], 'text/html') === false || (strpos($\_SERVER\['HTTP\_ACCEPT'\], 'vnd.wap.wml') < strpos($\_SERVER\['HTTP\_ACCEPT'\], 'text/html'))))
{
return true;
}
}
return false;
}
/\*\*
\* 判断是否为安卓手机
\*/
function isAndroid()
{
if(isset($\_SERVER\['HTTP\_USER\_AGENT'\])){
$agent = strtolower($\_SERVER\['HTTP\_USER\_AGENT'\]);
if(strpos($agent,'android') !== false)
return true;
}
return false;
}
/\*\*
\* 判断是否为iphone或者ipad
\*/
function isIos()
{
if(isset($\_SERVER\['HTTP\_USER\_AGENT'\])){
$agent = strtolower($\_SERVER\['HTTP\_USER\_AGENT'\]);
if(strpos($agent, 'iphone')||strpos($agent, 'ipad'))
return true;
}
return false;
}
/\*\*
\* 判断是否是微信浏览器还是企业微信浏览器
\*/
function isWxbrowser()
{
if ( strpos($\_SERVER\['HTTP\_USER\_AGENT'\], 'MicroMessenger') !== false ) {
return true;
}
else{
return false;
}
}
/\*\*
\* 判断是否是企业微信浏览器
\*/
function isWxCompany()
{
if( strpos($\_SERVER\['HTTP\_USER\_AGENT'\], 'wxwork') !== false ) {
return true;
}
else{
return false;
}
}
/\*\*
\* 整合到一起,判断当前设备,1:安卓;2:IOS;3:微信;0:未知
\*/
function isDevice()
{
if($\_SERVER\['HTTP\_USER\_AGENT'\]){
$agent = strtolower($\_SERVER\['HTTP\_USER\_AGENT'\]);
if(strpos($agent, 'micromessenger') !== false)
return 3;
elseif(strpos($agent, 'iphone')||strpos($agent, 'ipad'))
return 2;
else
return 1;
}
return 0;
}
/\*\*
\* 日期转换成几分钟前
\*/
function formatTime($date) {
$timer = strtotime($date);
$diff = $\_SERVER\['REQUEST\_TIME'\] - $timer;
$day = floor($diff / 86400);
$free = $diff % 86400;
if($day > 0) {
if(15 < $day && $day <30){
return "半个月前";
}elseif(30 <= $day && $day <90){
return "1个月前";
}elseif(90 <= $day && $day <187){
return "3个月前";
}elseif(187 <= $day && $day <365){
return "半年前";
}elseif(365 <= $day){
return "1年前";
}else{
return $day."天前";
}
}else{
if($free>0){
$hour = floor($free / 3600);
$free = $free % 3600;
if($hour>0){
return $hour."小时前";
}else{
if($free>0){
$min = floor($free / 60);
$free = $free % 60;
if($min>0){
return $min."分钟前";
}else{
if($free>0){
return $free."秒前";
}else{
return '刚刚';
}
}
}else{
return '刚刚';
}
}
}else{
return '刚刚';
}
}
}
/\*\*
\* 字符串截取
\* @param String 被截取的字符串
\* @param Int 截取长度
\*/
function getStrTruncate($string, $length = '', $etc = ''){
if ($length == 0) return '';
mb\_internal\_encoding("UTF-8");
$string = str\_replace("\\n","",$string);
$strlen = mb\_strwidth($string);
if ($strlen > $length) {
$etclen = mb\_strwidth($etc);
$length = $length - $etclen;
$str=''; $n = 0;
for($i=0; $i<$length; $i++) {
$c = mb\_substr($string, $i, 1);
$n += mb\_strwidth($c);
if ($n>$length) { break; }
$str .= $c;
}
return $str.$etc;
}
else{
return $string;
}
}
/\*\*
\* 删除目录 比如缓存
\* @param $dir 目录
\*/
function destroyDir($dir, $virtual = false){
$ds = DIRECTORY\_SEPARATOR;
$dir = $virtual ? realpath($dir) : $dir;
$dir = substr($dir, -1) == $ds ? substr($dir, 0, -1) : $dir;
if (is\_dir($dir) && $handle = opendir($dir))
{
while ($file = readdir($handle))
{
if ($file == '.' || $file == '..')
{
continue;
}
elseif (is\_dir($dir.$ds.$file)){
destroyDir($dir.$ds.$file);
}
else{
unlink($dir.$ds.$file);
}
}
closedir($handle);
rmdir($dir);
return true;
}
else{
return false;
}
}
/\*\*
\* 防SQL 注入
\*/
function injCheck($sql\_str) {
$check = preg\_match('/select|insert|update|delete|\\'|\\/\\\*|\\\*|\\.\\.\\/|\\.\\/|union|into|load\_file|outfile/', $sql\_str);
if ($check) {
echo '非法字符!!';
exit;
}
else{
return $sql\_str;
}
}
/\*\*
\* 对象转数组
\*/
function objectToArray($obj){
$\_arr = is\_object($obj) ? get\_object\_vars($obj) : $obj;
foreach ($\_arr as $key => $val){
$val = (is\_array($val) || is\_object($val)) ? object\_to\_array($val) : $val;
$arr\[$key\] = $val;
}
return $arr;
}
/\*\*
\* 判断两个字符串是否相等
\*/
function stringEqual($str1,$str2){
if(strcmp($str1,$str2) == 0){
return true;
}
else{
return false;
}
}
/\*\*
\* 递归重组信息为多维
\* @param string $dirName 路径
\* @param boolean $fileFlag 是否删除目录
\* @return void
\*/
function nodeMerge($attr, $arr) {
foreach($attr as $v){
if (is\_array($arr)){
$v\['access'\] = in\_array($v\['id'\],$arr) ? 1: 0;
}
}
return $attr;
}
/\*\*
\* 获取文件信息
\* @param string $filepath 路径
\* @param string $key 指定返回某个键值信息
\* @return array
\*/
function get\_file\_info($filepath='', $key=''){
//打开文件,r表示以只读方式打开
$handle = fopen($filepath,"r");
//获取文件的统计信息
$fstat = fstat($handle);
fclose($handle);
$fstat\['filename'\] = basename($filepath);
if(!empty($key)){
return $fstat\[$key\];
}else{
return $fstat;
}
}
/\*\*
\* 对查询结果集进行排序
\* @param array $list 查询结果
\* @param string $field 排序的字段名
\* @param array $sortby 排序类型
\* asc正向排序 desc逆向排序 nat自然排序
\* @return array
\*/
function listSortBy($list,$field, $sortby='asc') {
if(is\_array($list)){
$refer = $resultSet = array();
foreach ($list as $i => $data)
$refer\[$i\] = &$data\[$field\];
switch ($sortby) {
case 'asc': // 正向排序
asort($refer);
break;
case 'desc':// 逆向排序
arsort($refer);
break;
case 'nat': // 自然排序
natcasesort($refer);
break;
}
foreach ( $refer as $key=> $val)
$resultSet\[\] = &$list\[$key\];
return $resultSet;
}
return false;
}
/\*\*
\* 把返回的数据集转换成Tree
\* @param array $list 要转换的数据集
\* @param string $pid parent标记字段
\* @param string $level level标记字段
\* @return array
\*/
function listToTree($list, $pk='id', $pid = 'pid', $child = '\_child', $root = 0) {
// 创建Tree
$tree = array();
if(is\_array($list)) {
// 创建基于主键的数组引用
$refer = array();
foreach ($list as $key => $val) {
$refer\[$val\[$pk\]\] =& $list\[$key\];
}
foreach ($list as $key => $val) {
// 判断是否存在parent
$parentId = $val\[$pid\];
if ($root == $parentId) {
$tree\[\] =& $list\[$key\];
}else{
if (isset($refer\[$parentId\])) {
$parent =& $refer\[$parentId\];
$parent\[$child\]\[\] =& $list\[$key\];
}
}
}
}
return $tree;
}
/\*\*
\* 将list\_to\_tree的树还原成列表
\* @param array $tree 原来的树
\* @param string $child 孩子节点的键
\* @param string $order 排序显示的键,一般是主键 升序排列
\* @param array $list 过渡用的中间数组,
\* @return array 返回排过序的列表数组
\*/
function treeToList($tree, $child = '\_child', $order='id', &$list = array()){
if(is\_array($tree)) {
$refer = array();
foreach ($tree as $key => $value) {
$reffer = $value;
if(isset($reffer\[$child\])){
unset($reffer\[$child\]);
tree\_to\_list($value\[$child\], $child, $order, $list);
}
$list\[\] = $reffer;
}
$list = list\_sort\_by($list, $order, $sortby='asc');
}
return $list;
}
\---------------------
- 空白目录
- 常用功能
- PHP中常用的header头部定义
- 压缩包下载1
- 压缩包下载2
- 文件下载
- php常用加密函数总结
- url请求参数加解密
- PHP操作大全
- 指定月份的第某个月
- PHP 数组和字符串互相转换实现方法
- php字符串截取的简单方法
- php 根据子分类循环获取其父级分类
- PHP文件操作功能函数大全
- PHP常用到的功能函数
- 自定义php常用函数110个
- 自定义PHP常用功能函数
- 开发中常用自定义小功能函数
- PHP判断远程文件是否存在
- PHP写文件函数
- PHP生成GUID的函数
- PHP常用正则表达式汇总
- php字符串压缩
- PHP无限分组
- PHP简单 对象(object) 与 数组(array) 的转换
- PHP数组常用函数
- PHP调式测试函数
- PHP常用字符串的操作函数
- mysql 常用内置函数
- PHP通用请求函数CURL封装
- 裁剪图片PHP代码
- PDO操作MYSQL封装类
- 10个实用的PHP代码片段
- 获取访问者IP地址
- PHP实现发红包程序
- PHP把文本转换成图片
- curl重写php file_get_contents
- PHP生成一个随机字符串
- PHP读文件和写文件
- PHP根据key 给二维数组分组
- php中curl模拟post提交多维数组
- 33个超级有用必须要收藏的PHP代码样例
- PHP防XSS 防SQL注入的代码
- php常用数组array函数实例总结
- 用PHP遍历目录下的全部文件
- GBK2UTF8
- php函数类库
- 一、php一些常用的校验
- 1.1、校验是否为空(null/空串)1
- 1.2、校验是否为纯数字1
- 1.3、校验是否为纯数字(正则)1
- 1.4、检验手机号1
- 1.5、校验邮箱格式1
- 1.6、检查密码长度是否符合规定1
- 二、手机类型访问判断
- 三、字符集文件转换
- 3.1、utf8转gbk
- 3.2、gbk转utf8
- 3.3、繁体转简体
- 3.4、简体转繁体
- 3.5、unicode转utf8
- 3.6、utf8转unicode
- 3.7、Ascii转拼音
- 3.8、gbk转拼音
- 3.9、数组 utf8转gbk
- 3.10、数组 gbk转utf8
- 3.11、json 处理gbk转码utf-8问题( json_encode转换数组,值为null)
- 3.12、Unicode解码
- 四、文档目录操作
- 4.1、转化 \ 为 /
- 4.2、创建目录
- 4.3、拷贝目录及下面所有文件
- 4.4、转换目录下面的所有文件编码格式
- 4.5、列出目录下所有文件
- 4.6、设置目录下面的所有文件的访问和修改时间
- 4.7、目录列表
- 4.8、删除目录及目录下面的所有文件
- 4.9、取得文件扩展
- 4.10、查询字符是否存在于某字符串
- 4.11、获取文件目录列表
- 4.12、删除一个路径下的所有文件夹和文件的方法
- 4.13、文件下载
- 五、session与cookie
- 5.1、设置session
- 5.2、读取session
- 5.3、清除session
- 六、CURL操作
- 6.1、发起get请求
- 6.2、发起post请求
- 6.3、curl获取跳转后的网址的url
- 6.4、curl判断远程图片是否加防盗链
- 6.5、curl获取301页面的内容
- 6.6、curl判断文件是否存在(404)
- 6.7、php的curl封装类
- 七、日期、时间与字节转换
- 7.1、转换字节数为其他单位(Gb、Mb等)
- 7.2、时间转换(将秒转换为时间)
- 7.3、将秒转换成 天-时分秒
- 7.4、时间转换(将时分秒转换为秒)
- 7.5、计算两个时间相差的天
- 7.6、获取文件大小并格式化
- 7.7、返回13位时间戳
- 7.8、返回与当前时间的差距,如1分钟前,2小时前,5月前等
- 7.8、PHP中DateTime的常用方法
- 八、对象、数组、字符串、转义等
- 8.1、将数组转换为对象
- 8.2、将对象转换为数组
- 8.3、将字符串转换为数组
- 8.4、将数组转换为字符串
- 8.5、将文本格式成适合js输出的字符串
- 8.6、返回经addslashes(转义)处理过的字符串或数组
- 8.7、返回经stripslashes(删除反斜杠)处理过的字符串或数组
- 8.8、返回经htmlspecialchars(字符转html)处理过的字符串或数组
- 8.9、安全过滤函数
- 8.10、xss过滤函数
- 8.11、过滤ASCII码从0-28的控制字符
- 8.12、格式化文本域内容
- 8.13、将文本格式成适合js输出的字符串
- 8.14、转义 javascript 代码标记
- 8.15、数组转码
- 8.16、php用逗号格式化数字
- 8.17、数组去重
- 8.18、字符串去重
- 8.19、数组排序
- 九、加密扩展
- 9.1、简单的字符串加密、解密函数
- 9.2、简单的加密解密类
- 9.3、简单对称加密算法2
- 9.4、常用对称加密算法(DES/AES)类
- 9.5、3des加密解密类-三重数据加密算法
- 十、随机数、获取请求ip等
- 10.1、产生随机字符串
- 10.2、获取请求ip
- 10.3、生成一定范围内的随机数字
- 10.4、生成不重复的随机数
- 10.5、生成一定数量的随机数,并且不重复
- 10.6、生成32位随机数
- 10.7、生成9位随机数字(可以做qq用)
- 十一、其他
- 11.1、php对html页面压缩函数
- 11.2、构建层级(树状)数组、
- 11.3、获取内容中的图片
- 11.4、生成sql语句,如果传入$in_cloumn 生成格式为 IN('a', 'b', 'c')
- 11.5、打印各种类型的数据,调试程序时使用。
- 11.6、URL重定向
- 11.7、替换html代码里的所有图片的url,新增url
- 11.8、去除html里的p标签
- 11.9、去除字符串中所有html代码(格式化代码html)
- 11.10、将number_format的输出转换为php数字
- 11.7、内容里批量替换图片的url地址为自己的地址
- 十二、类库
- 1、php 5.6.3PHP封装的数据库模型Model类完整示例【基于PDO】
- 2、Curl类库
- 3、php PDO数据库类库
- 4、获取网站title
- 字符串配置转数组
- 数组助手类1
- 获取随机字符串
- 获取头像存储路径
- 单位转换函数
- 获取字符串长度
- 获取中文字符拼音首字母
- 获取当前页面URL地址
- 获取n天前的时间戳
- 获取n天前0点的时间戳
- 获取ip地址所在的区域
- 邮箱验证
- PHP常用函数总结(160多个)
- PHP判断输入数据是否合法常用的类
- 无限极分类
- php ajax实现分页功能
- 代码
- html
- sendAjax.js
- data.js
- page.js
- page.css
- php基础
- 字符串
- 字符串1
- 字符串常用函数
- 数组
- 数组简介
- 数组的定义
- 数组的操作
- 1 数组的计算
- 2 for循环遍历索引数组
- 3 foreach遍历关联数组
- 4 list、each函数遍历数组
- 5 常用操作数组函数
- 数组的常用函数
- 时间
- PHP的日期和时间
- 1 获取时期时间信息函数
- 2 日期验证函数
- 3 获取本地化时间戳函数
- 4 程序执行时间检测
- 文件操作
- 文件处理系统
- 1 读取文件
- 2 创建和修改文件内容
- 3 创建临时文件
- 4 移动、拷贝和删除文件
- 5 检测文件属性函数
- 6 文件常用函数和常量
- 7 文件锁处机制
- 8 目录处理函数
- 9 文件权限设置
- 10文件路径函数
- 11 小小文件留言本
- 12 修改配置文件的实例
- 流程控制
- 流程控制结构
- if条件结构流程
- 1 if语句
- 2 嵌套if...else...elseif结构
- 3 if语句多种嵌套
- 分支结构switch语句的使用
- 循环语句的使用
- 1 while循环
- 2 do...while循环的区别
- 3 for循环控制语句
- 4 goto语法
- 5 declare 语法
- 函数
- PHP函数
- 自定义函数
- 自定义函数高级调用
- 1 回调函数
- 2 变量函数
- 3 匿名函数
- 4 内部函数
- 5 变量作用域
- 6 参数的引用
- 7 递归函数
- 8 静态变量
- 使用系统内置函数
- 文件包含函数
- 数学常用函数
- 正则
- PHP正则表达式
- 1 正则表达示的定界符
- 2 正则表达示中的原子
- 3 正则表示中的元字符
- 4 正则达达示中的模式修正符
- 5 写正则的诀窍和常用正则
- 6 用正则写一个UBB文本编辑器
- 常用正则
- 错误处理
- 1 禁止显示错误
- 2 错误报告级别
- 3 错误记录日志
- 4 自定义错误处理函数
- 错误及异常处理机制、错误日志
- 过滤器
- 表达式
- PHP基本语法
- PHP基本语法(一)
- PHP基本语法(二)
- GD库图像处理
- 文件上传和下载
- PHP文件上传
- 1 文件上传需要注意php.ini文件
- 2 文件上传的步骤
- 3 文件上传表单注意事项
- 4 按照数组和步骤完成文件上传
- 5 多文件上传
- 6 文件上传进度处理
- PHP图像处理
- 1 学习前的准备工作
- 2 用图片处理函数画一张图
- 3 生成验证码
- 4 图像缩放和裁剪技术
- 5 图片水印处理
- 常量和变量
- 1 用常量限制用户跳过某些文件
- .2 可变变量
- 3 外部变量
- 4 环境变量
- 5 变量引用
- PHP表达式与运算符
- 1 算术运算
- 2 赋值运算
- 3 自加、自减运算
- 4 比较运算
- 5 逻辑运算
- 6 位运算
- 7 运算符优先级
- 8 三元运算符和其它运算符
- 会话管理和控制
- 1 Cookie概述
- 2PHP中的Cookie
- 3 session概述
- 4 PHP中使用session
- 5 SESSION应用实例
- 会话技术(cookie session)
- 会话技术 session场景使用介绍!
- PHP.in中session和cookie的配置说明
- 通过cURL来做小偷程序
- 1 curl的使用步骤
- 2 自定义get方法抓取网页
- 3 使用post发送数据
- PHP基础数据类型及运算符介绍
- 数据类型
- 1 整型就是整数
- 2 布尔就是易经的知识
- 3 字符串
- 4 浮点型
- 5 重要:if和else语法
- 6 NULL类型
- 7对象以后会学
- 8 数组会有单纯的一个章节
- 9 资源类型
- 10 眼前了解回调类型即可
- 11 查看和判断数据类型
- 12 数据类型的自动转换和强制转换
- PHP版本
- php自动加载
- xml的介绍
- openssl的介绍
- php文件管理
- 数据库Mysql
- 数据库之MySQL(概述)
- PHP数据库编程
- 数据库编程(2)
- SQL常见的可优化点
- Mysql设计与优化专题
- mysql的最佳索引攻略
- 详解慢查询
- ER图,数据建模与数据字典
- 数据中设计中的范式与反范式
- 字段类型与合理的选择字段类型
- 表的垂直拆分和水平拆分
- 21分钟 MySQL 入门教程
- 一、MySQL的相关概念介绍
- 二、Windows下MySQL的配置
- 三、MySQL脚本的基本组成
- 四、MySQL中的数据类型
- 五、使用MySQL数据库
- 六、操作MySQL数据库
- 七、创建后的修改
- 八、附录
- 3天入门MySQL
- 前言1
- 01. 数据库的用途和概念
- 02. 娱乐化讲解表关系
- 03. mysql 数据库安装
- 04. 数据语句操作类型
- 05. 连接数据库
- 06. 数据库结构定义语句
- 6.2 数据表操作
- 6.1 数据库操作
- 6.3 数据字段操作
- 07. 类型、字符集、引擎和索引
- 7.1 数据类型
- 7.2 字符集
- 7.3 表引擎
- 7.4 索引
- 08. 增删改查
- 12.8.1 插入记录
- 12.8.2 查询记录
- 12.8.3 多表联合查询
- 12.8.4 更新记录
- 12.8.5 删除记录
- 09. DCL语句
- 10. 常用工具简介
- 附录1 . 学习MySQL常用的英文单词
- MySQL 超新手入门
- (1) 重新开始
- (2) 数据库概论和 MySQL 安装
- (3) SELECT 基础查询
- (4) 运算式和函数
- (5) JOIN 和 UNION 查询
- (6) CRUD 和资料维护
- (7) 字符集和数据库
- (8) 存储引擎和数据类型
- (9) 表格和索引
- (10) 子查询
- (11) 视图
- (12) 预处理语句
- (13) 存储过程入门
- (14) 存储过程的变量和流程
- (15) 存储过程进阶
- (16) 触发器
- (17) 资料库资讯
- (18) 错误处理和查询
- (19) 导入和导出数据
- (20) 性能
- php常用类
- 面向对象
- 面向对象(OOP)编程完全教程
- 1.什么是面向对象
- 2.什么是类,什么是对象,类和对象这间的关系
- 3.什么是面向对象编程呢
- 4.如何抽象出一个类
- 5.如何实例化对象
- 6.如何去使用对象中的成员
- 7.特殊的引用this的使用
- 8.构造方法__construct()与析构方法__destruct()
- 9.封装性(var与public,protected,private的关系)
- 10.__set(),__get(),__isset(),__unset()四个方法的应用
- 11.类的继承
- 12.重载新的方法(parent::)
- 13.访问类型(public,protected,private)
- 14.final关键字的应用
- 15.static和const关键字的使用(self::)
- 16.__toString()方法
- 17.克隆对象__clone()方法
- 18.__call()处理调用错误
- 19.抽象方法和抽象类(abstract)
- 20.PHP5接口技术(interface)
- 21.多态的应用
- 22.把对象串行化serialize()方法,__sleep()方法,__wakeup()方法
- 23.自动加载类 __autoload()函数
- PHPer进阶
- 单例模式
- 工厂方法模式
- 适配器模式
- 建造者模式(通过选择mysql,mongo数据库链接类型做说明)
- 委托模式
- 对象基础实践
- 深入了解面向对象高级特性
- 抽象类和接口类的实际作用
- PHP解决问题进化论(整理笔记)
- PHP7新特性整理介绍篇
- php-fpm 与 Nginx优化总结
- Centos+Nginx+PHP7.0编译安装(和PHP5.6老版本共存)
- PHP7:Mongodb API使用
- PHP之include/require深入了解
- PHP内核了解:生命周期及运行模式
- 面向对象总结
- 基础概念
- 什么是类
- 什么是对象
- 静态属性
- 三大特征
- 封装
- 继承
- 多态
- 9个常用的魔术方法
- __construct
- __destruct
- __call
- __get
- __set
- __sleep
- __toString
- __clone
- __autoload
- 抽象类
- 对象接口
- 面向对象设计模式
- 前言
- (一),单例模式
- (二),Builder模式
- (三),原型模式
- (四),工厂方法模式
- (五),策略模式
- (六),状态模式
- (七),观察者模式
- (八),责任链模式
- (九),适配器模式
- (十),代理模式
- (十一),装饰模式
- (十二),外观模式
- (十三),解释器模式
- PHP开发第一步,PHP5.6 + MySQL5.5 + Apache2.4环境搭建
- 面向对象1
- 类和对象
- 面向对象高级
- php编程总结
- PHP学习笔记
- MySQL学习笔记
- php基础知识
- javascript
- javascript DOM总结
- JavaScript (JS) 函数补充 (含arguments、eval()、四种调用模式)
- JavaScript (JS) 面向对象编程 浅析 (含对象、函数原型链、闭包解析)
- JavaScript (JS)基础:BOM 浅析 (含window对象相关基本方法、属性解析)
- JavaScript (JS)基础:DOM 浅析 (含数组Array、字符串String基本方法解析)
- JavaScript (JS)基础:ECMAScript 浅析 (含Math基本方法解析)
- js功能函数
- 一、js一些常用的校验
- 1.1、校验是否为空(null/空串)
- 1.2、校验是否为纯数字
- 1.3、校验是否为纯数字(正则)
- 1.4、检验手机号
- 1.5、验证座机号
- 1.6、校验ip
- 1.7、检验url地址
- 1.8、检验身份证
- 1.9、检验邮箱
- 1.10、检验日期
- 1.11、检验金额
- 1.12、检验否是汉字
- 1.13、校验数字的表达式
- 1.14、校验字符的表达式
- 1.15、特殊需求表达式
- 1.16、检测密码强度
- 二、手机类型判断
- 三、返回字符串长度,汉子计数为2
- 四、获取url中的参数
- 五、js 绑定事件 适用于任何浏览器的元素绑定
- 六、获得当前浏览器JS的版本
- 七、获取当前点击事件的Object对象
- 八、字符串截取方法
- 九、JS 弹出新窗口全屏
- 十、全选/全不选
- 十一、js 判断浏览器
- 十二、JS判断两个日期大小
- 十三、移除事件
- 十四、回车提交
- 十五、JS 执行计时器
- 十六、JS 写Cookie
- 十七、JS 读Cookie
- 十八、Ajax 请求
- 十九、JS StringBuilder 用法
- 二十、JS 加载到顶部LoadJS
- 二十一、清空 LoadJS 加载到顶部的js引用
- 二十二、JS 替换非法字符
- 二十三、按Ctrl + Entert 直接提交表单
- 二十四、获取当前时间
- 二十五、Js 去掉空格方法
- 二十六、js 动态移除 head 里的 js 引用
- 二十七、整个URL 点击事件 加在URL里的onclick里
- 二十八、判断浏览器使用的是哪个 JS 版本
- 二十九、加入收藏夹
- 三十、动态加载 CSS 样式文件
- 三十一、返回脚本内容
- 三十二、清除脚本内容
- 三十三、返回按ID检索的元素对象
- 三十四、显示元素 待验证
- 三十五、与insertBefore方法(已存在)对应的insertAfter方法
- 三十六、光标停在文字的后面,文本框获得焦点时调用
- 三十七、检验URL链接是否有效
- 三十八、格式化CSS样式代码
- 三十九、压缩CSS样式代码
- 四十、 获取当前路径
- 四十一、ip 转 整型
- 四十二、整型解析为IP地址
- 四十三、删除cookies
- 四十四、判断是否以某个字符串结束
- 四十五、判断是否以某个字符串开头
- 四十六、根据样式名称检索元素对象
- 四十七、 获取移动设备初始化大小
- 四十八、 获取移动设备最大化大小
- 四十九、获取移动设备屏幕宽度
- 五十、获取页面scrollLeft
- 六十、获取页面宽度
- 六十一、获取页面scrollTop
- 六十二、获取页面可视高度
- 六十三、判断数组元素是否重复
- 六十四、生成随机数
- 六十五、数组去重
- 六十六、深度拷贝对象
- 六十七、全部替换replaceAll
- 六十八、阻止冒泡
- 六十九、返回顶部
- 七十、jsonp跨域请求
- 七十一、到某一个时间的倒计时
- 七十二、清除对象中值为空的属性
- 七十三、获取文件后缀名的方法
- 七十四、判断一个对象是不是数组类型
- 七十五、冒泡排序
- 七十六、实现一个最简单的模板引擎
- 七十七、数组最大值最小值
- 七十八、数组求和,平均值
- 七十九、从数组中随机获取元素
- 八十、返回对应元素在数组中的下标
- 八十一、返回数组(字符串)一个元素出现的次数
- 八十二、得到n1-n2下标的数组,即返回数组下标arr[n1]到数组arr[n2]的值
- 八十三、筛选数组,这里所做的就只是删除相应的数组
- 八十四、去除字符串空格
- 八十五、字母大小写切换
- 八十六、字符串循环复制,前面的要循环的字符串,后面的要循环的次数
- 八十七、字符串替换,这里的要替换的字符串必须是连续的
- 八十九、将时间戳转换成日期格式
- 九十、检验字符串是否超过某个值,超出出现省略号
- 九十一、随机码,这里的参数count必须是 2 ~ 36 之间的整数
- 九十二、查找字符串中某字符出现的次数
- 九十三、JS插入排序
- 九十四、获取前num天的日期
- 九十五、js实时计算rem,宽度大于1920px时1rem=100px
- 九十六、原生JS获取鼠标XY轴的值
- 九十七、转成XML对象
- 九十八、Js身份证验证函数
- 九十九、格式化数字串
- 一百、原生Ajax 请求
- 一百零一、两条直角边算角度
- 一百零二、禁止readonly和disabled的input退格键返回上一页
- 一百零三、生成随机字母字符串
- 一百零四、float偏移处理
- 一百零五、根据月份获取起止时间戳
- 一百零六、工具函数对象书写例子,可自己扩展
- 一百零七、js字符串压缩算法与解压
- 一百零八、指定数组元素排序(正序倒序)
- 一百零九、js所有的内置方法
- JavaScript 常用函数总结
- js常用函数整理
- JavaScript基础
- javaScript基础&DOM(一)
- javaScript基础&DOM(二)
- JavaScript语法基础1
- javascript数组对象
- javascript字符串函数
- jquery、javascript实现(get、post两种方式)跨域解决方法
- php MVC原理
- php基础知识(语法与原理)
- PHP编程经验
- 第一章 代码风格
- 第二章 代码注释
- 第三章 目录结构
- 第四章 文件管理
- 第五章 代码整理
- 第六章 路径和路由
- 第七章 实用表格
- 第八章 实用开发软件
- 第九章 技术提升心得
- 第十章 实用插件搭配
- 第十一章 常用设计模式
- PHP编码规范文档
- PHP加快执行效率的写法规范
- VUE避坑指南
- 从零开始学Vue
- Vue-cli
- PHP工具类
- 数组助手类
- 通用助手类
- 时间助手类
- 图像
- 拼音助手类
- 字符串助手类
- 验证助手类
- 时间类封装
- 数据库链式调用封装
- curl 封装 / 发送文件 / 远程下载到服务器
- php Captcha 驗證碼類
- php 替换敏感字符串
- php返回数据格式化类
- php XML文件解释类
- php CSS Update Class
- PHPMailer - PHP email transport class
- PHP 遍历文件夹及文件类及处理类
- 自动登入google play下载app report
- php click captcha 验证码类
- php 获取页面中的指定内容类
- php 支持断点续传的文件下载类
- php 缩略图生成类,支持imagemagick及gd库两种处理
- php 根据url自动生成缩略图
- php 过滤html标记属性类
- php HTTP请求类,支持GET,POST,Multipart/form-data
- php Cookies 操作类
- php 密码生成类
- php main 与 iframe 相互通讯类(同域/跨域)
- php 根据url自动生成缩略图,并处理高并发问题
- php Timer 页面运行时间监测类
- php 双向队列类
- php 导出CSV抽象类
- php zip文件内容比较类
- php 获取/设置用户访问页面语言类
- php 获取Youtube某个User所有Video信息
- php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换
- php 版本处理类
- TP5
- 验证器
- 内置规则
- tp5数据库操作
- 数据添加或更新
- 静态增删改查 / 关联操作
- 日志操作
- 路由
- taglib-自制标签
- migrations 数据库迁移
- TP3.2
- 数据库操作
- 发送邮箱
- Tp6
- Redis
- 字符串 / 列表 / Hash / Set / Zet / 基数统计算法
- 队列 /订阅发布 php实例
- 事务 / bitmap 位图 / 地理位置
- 备份与恢复 / 性能测试
- 设置密码 / 模糊查询
- 性能优化
- php+redis实现高并发模拟下单、秒杀、抢购操作
- Redis 的简单介绍
- Redis 最常见的问题
- 扩展thinkphp5的redis类方法
- php for redis
- 前言11
- 字符串11
- 集合
- 有序集合
- 列表
- 哈希
- key操作
- Redis 基础教程
- 简介
- 递增
- 过期
- 列表1
- 集合1
- 可排序集合
- 哈希表
- Redis学习文档
- 序言
- 简介1
- Window 下安装
- 执行
- Linux 下安装
- 数据类型1
- String
- Hash
- List
- Set
- zset
- 区别和详解
- 命令
- Keys
- flushall
- del
- ping
- 设置密码
- 实例
- PHP+Redis 实例【一】点赞 + 热度
- Thinkphp+Redis
- 数据队列
- 字符串111
- 列表11
- 集合11
- 哈希1
- 有序集合1
- 添加redis函数助手
- 基础知识
- Redis的7个应用场景
- 深入解析Redis中常见的应用场景
- MongoDB和Redis的区别
- 相关书籍
- 函数整理
- redis知识总结
- redis学习文档
- 常用命令
- 运维常用命令
- 通用操作相关命令
- 字符串相关命令
- 链表list相关命令
- 集合set相关命令
- 有序集合相关指令
- 哈希hash
- 事务
- 订阅和发布
- rdb快照持久化
- aof日志持久化
- redis集群 主从配置
- sentinel监视
- key的设计
- Redis实践技巧
- 前言111
- 第1章 keys键操作
- 第2章 string类型
- 第3章 list类型
- 第4章 set类型
- 第5章 sort set排序类型
- 第6章 hash类型
- 第7章 redis备份
- 第8章 主从复制
- 第9章 设置密码
- 第10章 事务
- 第11章 php操作redis
- Redis常见7种使用场景(PHP实战)
- redis
- jQuery学习总结
- jquery总结2
- Git
- php微信接口开发
- php微信接口开发(卷一)
- 开发心得
- 申请微信测试号
- 打通服务器与微信之间的通信
- 接受微信发送的信息
- 回复微信发送的信息
- 微信回复单图文消息
- 微信回复多图文消息
- curl用法小测试
- 获取access_token
- 获取微信的media_id
- 微信回复图片消息
- 关注自动回复
- 微信生成自定义菜单
- 【实战】后台管理自定义菜单
- 1.页面数据提交并展示
- 2.组装一、二级菜单
- 3.完成简略自定义菜单
- 【实战】thinkphp框架开发微信接口
- 1.相关东西下载地址
- 2.配置thinkphp3.2.3
- 3.微信回复文本消息
- 4.微信获取个人基本信息
- php微信接口开发(卷二)
- 网页授权获取用户基本信息
- 1.输出回调地址
- 2.获取用户信息页面
- 3.数据写入数据库
- 用户分组接口的使用
- 1.对上节代码的优化处理
- 2.获取所有用户组
- 3.创建一个分组
- 4.查询指定用户的分组
- 群发消息的接口的使用
- 1.创建新控制器
- 2.预览群发消息接口
- 3.群发消息
- 生成带参数的二维码
- 长连接转短连接
- 微信js-SDK的引入
- 1.获取jsapi_ticket
- 2.判断当前客户端版本是否支持指定JS接口
- 图像接口的使用
- 扫一扫二维码接口
- php微信接口开发(卷三)
- 微信公众号
- 1.前提条件
- 2.微信公众平台需要做的设置
- 微信支付商户平台
- 1.操作证书
- 2.配置密钥
- 3.配置支付授权目录
- 公众号支付(Jsapi支付)
- 1.SDK与demo下载
- 2.测试DEMO
- 3.将支付接口更为真实公众号信息
- 微信商城
- 1.tp3+bootstrap使用实战
- 2.图片上传实战
- 3.商城后台实战
- 4.购买商城实战
- 5.下订单后使用微信支付
- 小程序基础
- 简介12
- 接入指南
- 开发者工具的使用
- 代码审核与发布
- 小程序申请微信认证
- 小程序申请微信支付
- 小程序绑定微信开放平台帐号
- app.json配置
- 配置demo
- pages
- window
- tabBar
- networkTimeout
- debug
- page.json
- API
- 发起网络请求
- 网络请求提交表单
- 引入
- WeUI
