技术标签: php 常用的common function库
<?php
//因为前后台都要用到,所以放在supermario文件夹下方便重用
/**
* 喔~可爱滴小数点~喔~可爱滴千位数~
* 如果位数超过4位,则将第3位前增加,
* @param int $gold
* @return string
*/
function showGold($gold) {
return number_format($gold);
}
/**
* 页面压缩输出
*/
function ob_callback($buffer) {
header('Etag: '.md5($buffer));
if( extension_loaded('zlib') AND strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip") ) {
$buffer = gzencode($buffer,9);
header('Content-Encoding: gzip');
header('Vary: Accept-Encoding');
//header('Via: www.guangxitravel.cn');
header('Content-Length: '.strlen($buffer));
}
return $buffer;
}
/**
* 没有提示的情况下跳转页面
* @param string $url
* @param string $target
*/
function go($url='', $target='parent') {
if ($url != "") {
echo('<script language="javascript">window.location="' . $url . '";</script>');
} else {
echo('<script language="javascript">window.location=self.location;"</script>');
}
}
/**
* 清除缓存,ECHO,然后DIE(可恶的javascript+php……纯文本输出,总会有一些空字符……)
* @param string $msg
*/
function justSay($msg) {
ob_clean();
die($msg);
}
/**
* 将符合第二个参数的第一个参数里的内容替换为红色
* @param string $data
* @param array $keyword
* @return string
*/
function change_keyword($data, $keywords) {
if (is_array($keywords)) {
foreach ($keywords as $k => $v) {
$data = str_replace($v, '<span class="red b">' . $v . '</span>', $data);
}
return $data;
} else {
return str_replace($keywords, '<span class="red b">' . $keywords . '</span>', $data);
}
}
/**
* 创建完全随机的颜色
* @return string
*/
function makeColor() {
$key = '#';
for ($i = 0; $i < 6; $i++)
$key.= rand(0, 9);//生成php随机数
return $key;
}
/**
* 自动加载模型和第三方功能类
* @param string $className
*/
function autoLoad($className) {
if (strstr($_SERVER['REQUEST_URI'], "/operator/") == false) { //服务器不支持SCRIPT_URL
if (file_exists(siteRoot . '/client/model/' . $className . '.php')) {
require_once siteRoot . '/client/model/' . $className . '.php';
return;
}
} else {
if (file_exists(siteRoot . '/manager/model/' . $className . '.php')) {
require_once siteRoot . '/manager/model/' . $className . '.php';
return;
}
}
if (file_exists(siteRoot . '/public/modules/' . $className . '.php')) {
require_once siteRoot . '/public/modules/' . $className . '.php';
return;
}
if (file_exists(siteRoot . '/client/order/model/' . $className . '.php')) {
require_once siteRoot . '/client/order/model/' . $className . '.php';
return;
}
}
/**
* 用javascript弹出一条信息
* @param <string> $message
*/
function message($message='') {
echo('<script language="javascript">alert("' . $message . '");</script>');
}
/**
* 模拟strstr()的第三个参数,返回$h中,$n之前的数据
* //$h = haystack, $n = needle
* @param <string> $h
* @param <string> $n
* @return <string>
*/
function strstrb($h, $n) {
return array_shift(explode($n, $h, 2));
}
/**
* 显示错误信息,并跳转至$pageurl,含有样式
*
* @param string $messages
* @param string $pageurl
* @param int $msc 秒数
*/
function msg($messages, $pageurl='javascript:history.back();', $msc=5) {
echo '<title>System Message</title>
<style type="text/css">
*{margin:0;padding:0px}
body{background:#fff;color:#333;font:12px Verdana, Tahoma, sans-serif;text-align:center;margin:0 auto;}
a{text-decoration:none;color:#29458C}
a:hover{text-decoration:underline;color:#f90}
#msg{border:1px solid #c5d7ef;text-align:left;margin:10% auto; width:50%}
#msgtitle{padding:5px 10px;background:#f0f6fb;border-bottom:1px #c5d7ef solid}
#msgtitle h1{font-size:14px;font-weight:bold;padding-left:10px;border-left:3px solid #acb4be;color:#1f3a87}
#msgcontent {padding:20px 50px;}
#msgcontent li{display:block;padding:5px;list-style:none;}
#msgcontent p{text-align:center;margin-top:10px;padding:0}
</style>
</head>
<body>
<div id="msg">
<div id="msgtitle">
<h1>Web System Message</h1>
</div>
<div id="msgcontent">
', $messages, '
<p><a href="', $pageurl, '">>>>请点此处返回</a></p>
</div>
</div>
<meta http-equiv="refresh" content="' . $msc . ';URL=', $pageurl, '">';
exit();
}
/**
* 检查后面的日期是否大于前面的日期
* @param type $datecome 前面的日期
* @param type $datego 后面的日期
* @return type
*/
function sub_date($datecome, $datego) {
$d1 = strtotime($datecome);
$d2 = strtotime($datego);
$days = round(($d2 - $d1) / 3600 / 24);
$days = $days < 1 ? 0 : $days;
return $days;
}
/**
* 将$string的$length后边的内容用$dot替换
* @param string $string
* @param int $length
* @param string $dot
* @return string
*/
function cutstr($string, $length, $dot = '...') {
@extract($string);
if (strlen($string) <= $length) {
return $string;
}
$string = htmlspecialchars($string);
$string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);
$strcut = '';
$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);
return $strcut . $dot;
}
/**
+----------------------------------------------------------
* 如果 magic_quotes_gpc 为开启状态,则使用此方法使用为特殊符号前增加转移符号
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $value 可以为数组
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
function kaddslashes($value) {
return $value = is_array($value) ? array_map('kaddslashes', $value) : addslashes($value);
}
/**
+----------------------------------------------------------
* 为特殊符号前去除转移符号
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $value 可以为数组
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
function kstripcslashes($value) {
return $value = is_array($value) ? array_map('kstripcslashes', $value) : stripcslashes($value);
}
/**
* 将字符串内容html实体化,避免一些非法信息直接执行。如果参数是数组,则递归。
* @param string $value
* @return array
*/
function khtmlspecialchars($value) {
return is_array($value) ? array_map('khtmlspecialchars', $value) :
preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1', str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $value));
}
/**
* 将字符串中的html去除,如果参数是数组,则递归。
* @param string $value
* @return array
*/
function striptags($value) {
return $value = is_array($value) ? array_map('striptags', $value) : strip_tags($value);
}
/**
* 检查email的合法性
*
* @param string $email
* @return bool
*/
function check_email($email) {
if (preg_match("/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i", $email)) {
return true;
} else {
return false;
}
}
/**
* 安全电子邮件地址
*
* @param string $email
* @param string $title
* @param <type> $attributes
* @return <type>
*/
function safe_mailto($email, $title = '', $attributes = '') {
if (is_array($email)) {
$tmp = $email;
unset($email);
extract($tmp);
}
$title = (string) $title;
if ($title == "") {
$title = $email;
}
for ($i = 0; $i < 16; $i++) {
$x[] = substr('<a href="mailto:', $i, 1);
}
for ($i = 0; $i < strlen($email); $i++) {
$x[] = "|" . ord(substr($email, $i, 1));
}
$x[] = '"';
if ($attributes != '') {
if (is_array($attributes)) {
foreach ($attributes as $key => $val) {
$x[] = ' ' . $key . '="';
for ($i = 0; $i < strlen($val); $i++) {
$x[] = "|" . ord(substr($val, $i, 1));
}
$x[] = '"';
}
} else {
for ($i = 0; $i < strlen($attributes); $i++) {
$x[] = substr($attributes, $i, 1);
}
}
}
$x[] = '>';
$temp = array();
for ($i = 0; $i < strlen($title); $i++) {
$ordinal = ord($title[$i]);
if ($ordinal < 128) {
$x[] = "|" . $ordinal;
} else {
if (count($temp) == 0) {
$count = ($ordinal < 224) ? 2 : 3;
}
$temp[] = $ordinal;
if (count($temp) == $count) {
$number = ($count == 3) ? (($temp['0'] % 16) * 4096) + (($temp['1'] % 64) * 64) + ($temp['2'] % 64) : (($temp['0'] % 32) * 64) + ($temp['1'] % 64);
$x[] = "|" . $number;
$count = 1;
$temp = array();
}
}
}
$x[] = '<';
$x[] = '/';
$x[] = 'a';
$x[] = '>';
$x = array_reverse($x);
ob_start();
?><script type="text/javascript">
//<![CDATA[
var l=new Array();
<?php
$i = 0;
foreach ($x as $val) {
?>l[<?php echo $i++; ?>]='<?php echo $val; ?>';<?php } ?>
for (var i = l.length-1; i >= 0; i=i-1){
if (l[i].substring(0, 1) == '|') document.write("&#"+unescape(l[i].substring(1))+";");
else document.write(unescape(l[i]));}
//]]>
</script><?php
$buffer = ob_get_contents();
ob_end_clean();
if ($tmp == '' || $tmp == NULL) {
return $buffer;
} else {
echo $buffer;
}
}
/**
+----------------------------------------------------------
* 转换文字中的超链接为可点击连接
+----------------------------------------------------------
* @access public
+----------------------------------------------------------
* @param string $text 要处理的字符串
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
function makeLink($string) {
$validChars = "a-z0-9\/\-_+=.~!%@?#&;:$\|";
$patterns = array(
"/(^|[^]_a-z0-9-=\"'\/])([a-z]+?):\/\/([{$validChars}]+)/ei",
"/(^|[^]_a-z0-9-=\"'\/])www\.([a-z0-9\-]+)\.([{$validChars}]+)/ei",
"/(^|[^]_a-z0-9-=\"'\/])ftp\.([a-z0-9\-]+)\.([{$validChars}]+)/ei",
"/(^|[^]_a-z0-9-=\"'\/:\.])([a-z0-9\-_\.]+?)@([{$validChars}]+)/ei");
$replacements = array(
"'\\1<a href=\"\\2://\\3\" title=\"\\2://\\3\" rel=\"external\">\\2://'.Input::truncate( '\\3' ).'</a>'",
"'\\1<a href=\"http://www.\\2.\\3\" title=\"www.\\2.\\3\" rel=\"external\">'.Input::truncate( 'www.\\2.\\3' ).'</a>'",
"'\\1<a href=\"ftp://ftp.\\2.\\3\" title=\"ftp.\\2.\\3\" rel=\"external\">'.Input::truncate( 'ftp.\\2.\\3' ).'</a>'",
"'\\1<a href=\"mailto:\\2@\\3\" title=\"\\2@\\3\">'.Input::truncate( '\\2@\\3' ).'</a>'");
return preg_replace($patterns, $replacements, $string);
}
/**
* 获取客户端浏览器
* @return string
*/
function browse_info() {
$browser = "";
$browserver = "";
$Browsers = array("Lynx", "MOSAIC", "AOL", "Opera", "JAVA", "MacWeb", "WebExplorer", "OmniWeb");
$Agent = $_SERVER["HTTP_USER_AGENT"]; //浏览器的全局变量
for ($i = 0; $i <= 7; $i++) {
if (strpos($Agent, $Browsers[$i])) {
$browser = $Browsers[$i];
$browserver = "";
}
}
if (ereg("Mozilla", $Agent) && ereg("MSIE", $Agent)) {
$temp = explode("(", $Agent);
$Part = $temp[1];
$temp = explode(";", $Part);
$Part = $temp[1];
$temp = explode(" ", $Part);
$browserver = $temp[2];
//$browserver =preg_replace("/([d.]+)/","1",$browserver);
$browserver = "IE" . $browserver;
$browser = "IE";
}
if (ereg("Mozilla", $Agent) && !ereg("MSIE", $Agent)) {
$temp = explode("(", $Agent);
$Part = $temp[0];
$temp = explode("/", $Part);
$browserver = $temp[1];
$temp = explode(" ", $browserver);
$browserver = $temp[0];
$browserver = preg_replace("/([d.]+)/", "1", $browserver);
$browserver = " $browserver";
$browser = "Netscape Navigator";
}
if (ereg("Mozilla", $Agent) && ereg("Opera", $Agent)) {
$temp = explode("(", $Agent);
$Part = $temp[1];
$temp = explode(")", $Part);
$browserver = $temp[1];
$temp = explode(" ", $browserver);
$browserver = $temp[2];
$browserver = preg_replace("/([\d\.]+)/", "1", $browserver);
$browserver = " $browserver";
$browser = "Opera";
}
//火狐浏览器
if (ereg("Mozilla", $Agent) && ereg("Firefox", $Agent)) {
$temp = explode("(", $Agent);
$Part = $temp[1];
$temp = explode(")", $Part);
$browserver = $temp[1];
$temp = explode(" ", $browserver);
$browserver = $temp[2];
$browser = "火狐";
}
//谷歌浏览器
if (ereg("Mozilla", $Agent) && ereg("Chrome", $Agent)) {
$temp = explode("(", $Agent);
$temp = explode(" ", $temp[2]);
$browserver = $temp['3']; //如果以后google升级不变位置的话就是它了
$browser = "谷歌";
}
//360safe浏览器
if (ereg("Mozilla", $Agent) && ereg("360SE", $Agent)) {
//因为360浏览器,没有版本……
$browserver = $browser = "360安全卫士";
}
if ($browser != "") {
//$browseinfo = $browser.$browserver;
$browseinfo = $browserver;
} else {
$browseinfo = "Unknown";
}
return $browseinfo;
}
/**
* 返回时间格式
* @name: prepareDate
* @desc: prepares a date in the proper format for specific database types
* given a UNIX timestamp
* @param: $timestamp: a UNIX timestamp
* @param: $fieldType: the type of field to format the date for
* (in MySQL, you have DATE, TIME, YEAR, and DATETIME)
*/
function prepareDate($timestamp, $fieldType = 'DATETIME') {
$date = '';
if (!$timestamp === false && $timestamp > 0) {
switch ($fieldType) {
case 'DATE' :
$date = date('Y-m-d', $timestamp);
break;
case 'TIME' :
$date = date('H:i:s', $timestamp);
break;
case 'YEAR' :
$date = date('Y', $timestamp);
break;
default :
$date = date('Y-m-d H:i:s', $timestamp);
break;
}
}
return $date;
}
/**
* 适应多维数组的递归,并将其中重复的值去掉后返回
* @param array $array
* @return array
*/
function super_unique($array) {
$result = array_map("unserialize", array_unique(array_map("serialize", $array)));
foreach ($result as $key => $value) {
if (is_array($value)) {
$result[$key] = super_unique($value);
}
}
return $result;
}
/**
* 如果数值不满足2位,自动补零
* @param int $num
* @return int
*/
function fullzero($num){
if(strlen($num)!=2){
return '0'.$num;
}else{
return $num;
}
}
//返回上一个url
function get_visit_url(){
return $_SERVER['HTTP_REFERER'];
}
?>
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数