<?php
/**
* global.func.php 公共函数库
*/
/**
* 返回经addslashes处理过的字符串或数组
* @param $string 需要处理的字符串或数组
* @return mixed
*/
function
new_addslashes(
$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
new_stripslashes(
$string
) {
if
(!
is_array
(
$string
))
return
stripslashes
(
$string
);
foreach
(
$string
as
$key
=>
$val
)
$string
[
$key
] = new_stripslashes(
$val
);
return
$string
;
}
/**
* 返回经htmlspecialchars处理过的字符串或数组
* @param $obj 需要处理的字符串或数组
* @return mixed
*/
function
new_html_special_chars(
$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
;
}
function
new_html_entity_decode(
$string
) {
$encoding
=
'utf-8'
;
if
(
strtolower
(CHARSET)==
'gbk'
)
$encoding
=
'ISO-8859-15'
;
return
html_entity_decode(
$string
,ENT_QUOTES,
$encoding
);
}
function
new_htmlentities(
$string
) {
$encoding
=
'utf-8'
;
if
(
strtolower
(CHARSET)==
'gbk'
)
$encoding
=
'ISO-8859-15'
;
return
htmlentities(
$string
,ENT_QUOTES,
$encoding
);
}
/**
* 安全过滤函数
*
* @param $string
* @return string
*/
function
safe_replace(
$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
;
}
/**
* xss过滤函数
*
* @param $string
* @return string
*/
function
remove_xss(
$string
) {
$string
= preg_replace(
'/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S'
,
''
,
$string
);
$parm1
= Array(
'javascript'
,
'vbscript'
,
'expression'
,
'applet'
,
'meta'
,
'xml'
,
'blink'
,
'link'
,
'script'
,
'embed'
,
'object'
,
'iframe'
,
'frame'
,
'frameset'
,
'ilayer'
,
'layer'
,
'bgsound'
,
'title'
,
'base'
);
$parm2
= Array(
'onabort'
,
'onactivate'
,
'onafterprint'
,
'onafterupdate'
,
'onbeforeactivate'
,
'onbeforecopy'
,
'onbeforecut'
,
'onbeforedeactivate'
,
'onbeforeeditfocus'
,
'onbeforepaste'
,
'onbeforeprint'
,
'onbeforeunload'
,
'onbeforeupdate'
,
'onblur'
,
'onbounce'
,
'oncellchange'
,
'onchange'
,
'onclick'
,
'oncontextmenu'
,
'oncontrolselect'
,
'oncopy'
,
'oncut'
,
'ondataavailable'
,
'ondatasetchanged'
,
'ondatasetcomplete'
,
'ondblclick'
,
'ondeactivate'
,
'ondrag'
,
'ondragend'
,
'ondragenter'
,
'ondragleave'
,
'ondragover'
,
'ondragstart'
,
'ondrop'
,
'onerror'
,
'onerrorupdate'
,
'onfilterchange'
,
'onfinish'
,
'onfocus'
,
'onfocusin'
,
'onfocusout'
,
'onhelp'
,
'onkeydown'
,
'onkeypress'
,
'onkeyup'
,
'onlayoutcomplete'
,
'onload'
,
'onlosecapture'
,
'onmousedown'
,
'onmouseenter'
,
'onmouseleave'
,
'onmousemove'
,
'onmouseout'
,
'onmouseover'
,
'onmouseup'
,
'onmousewheel'
,
'onmove'
,
'onmoveend'
,
'onmovestart'
,
'onpaste'
,
'onpropertychange'
,
'onreadystatechange'
,
'onreset'
,
'onresize'
,
'onresizeend'
,
'onresizestart'
,
'onrowenter'
,
'onrowexit'
,
'onrowsdelete'
,
'onrowsinserted'
,
'onscroll'
,
'onselect'
,
'onselectionchange'
,
'onselectstart'
,
'onstart'
,
'onstop'
,
'onsubmit'
,
'onunload'
);
$parm
=
array_merge
(
$parm1
,
$parm2
);
for
(
$i
= 0;
$i
< sizeof(
$parm
);
$i
++) {
$pattern
=
'/'
;
for
(
$j
= 0;
$j
<
strlen
(
$parm
[
$i
]);
$j
++) {
if
(
$j
> 0) {
$pattern
.=
'('
;
$pattern
.=
'(&#[x|X]0([9][a][b]);?)?'
;
$pattern
.=
'|(�([9][10][13]);?)?'
;
$pattern
.=
')?'
;
}
$pattern
.=
$parm
[
$i
][
$j
];
}
$pattern
.=
'/i'
;
$string
= preg_replace(
$pattern
,
' '
,
$string
);
}
return
$string
;
}
/**
* 过滤ASCII码从0-28的控制字符
* @return String
*/
function
trim_unsafe_control_chars(
$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
trim_textarea(
$string
) {
$string
=
nl2br
(
str_replace
(
' '
,
' '
,
$string
) );
return
$string
;
}
/**
* 将文本格式成适合js输出的字符串
* @param string $string 需要处理的字符串
* @param intval $isjs 是否执行字符串格式化,默认为执行
* @return string 处理后的字符串
*/
function
format_js(
$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
trim_script(
$str
) {
if
(
is_array
(
$str
)){
foreach
(
$str
as
$key
=>
$val
){
$str
[
$key
] = trim_script(
$val
);
}
}
else
{
$str
= preg_replace (
'/\<([\/]?)script([^\>]*?)\>/si'
,
'<\\1script\\2>'
,
$str
);
$str
= preg_replace (
'/\<([\/]?)iframe([^\>]*?)\>/si'
,
'<\\1iframe\\2>'
,
$str
);
$str
= preg_replace (
'/\<([\/]?)frame([^\>]*?)\>/si'
,
'<\\1frame\\2>'
,
$str
);
$str
=
str_replace
(
'javascript:'
,
'javascript:'
,
$str
);
}
return
$str
;
}
/**
* 获取当前页面完整URL地址
*/
function
get_url() {
$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
str_cut(
$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
ip() {
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] :
''
;
}
function
get_cost_time() {
$microtime
= microtime ( TRUE );
return
$microtime
- SYS_START_TIME;
}
/**
* 程序执行时间
*
* @return int 单位ms
*/
function
execute_time() {
$stime
=
explode
(
' '
, SYS_START_TIME );
$etime
=
explode
(
' '
, microtime () );
return
number_format ( (
$etime
[1] +
$etime
[0] -
$stime
[1] -
$stime
[0]), 6 );
}
/**
* 将字符串转换为数组
*
* @param string $data 字符串
* @return array 返回数组格式,如果,data为空,则返回空数组
*/
function
string2array(
$data
) {
if
(
$data
==
''
)
return
array
();
$data
=
stripslashes
(
$data
);
@
eval
(
"\$array = $data;"
);
return
$array
;
}
/**
* 将数组转换为字符串
*
* @param array $data 数组
* @param bool $isformdata 如果为0,则不使用new_stripslashes处理,可选参数,默认为1
* @return string 返回字符串,如果,data为空,则返回空
*/
function
array2string(
$data
,
$isformdata
= 1) {
if
(
$data
==
''
)
return
''
;
if
(
$isformdata
)
$data
= new_stripslashes(
$data
);
return
addslashes
(var_export(
$data
, TRUE));
}
/**
* 转换字节数为其他单位
*
*
* @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 string $txt 字符串
* @param string $operation ENCODE为加密,DECODE为解密,可选参数,默认为ENCODE,
* @param string $key 密钥:数字、字母、下划线
* @param string $expiry 过期时间
* @return string
*/
function
sys_auth(
$string
,
$operation
=
'ENCODE'
,
$key
=
''
,
$expiry
= 0) {
$key_length
= 4;
$key
= md5(
$key
!=
''
?
$key
: app_base::load_config(
'system'
,
'auth_key'
));
$fixedkey
= md5(
$key
);
$egiskeys
= md5(
substr
(
$fixedkey
, 16, 16));
$runtokey
=
$key_length
? (
$operation
==
'ENCODE'
?
substr
(md5(microtime(true)), -
$key_length
) :
substr
(
$string
, 0,
$key_length
)) :
''
;
$keys
= md5(
substr
(
$runtokey
, 0, 16) .
substr
(
$fixedkey
, 0, 16) .
substr
(
$runtokey
, 16) .
substr
(
$fixedkey
, 16));
$string
=
$operation
==
'ENCODE'
? sprintf(
'%010d'
,
$expiry
?
$expiry
+ time() : 0).
substr
(md5(
$string
.
$egiskeys
), 0, 16) .
$string
:
base64_decode
(
substr
(
$string
,
$key_length
));
$i
= 0;
$result
=
''
;
$string_length
=
strlen
(
$string
);
for
(
$i
= 0;
$i
<
$string_length
;
$i
++){
$result
.=
chr
(ord(
$string
{
$i
}) ^ ord(
$keys
{
$i
% 32}));
}
if
(
$operation
==
'ENCODE'
) {
return
$runtokey
.
str_replace
(
'='
,
''
,
base64_encode
(
$result
));
}
else
{
if
((
substr
(
$result
, 0, 10) == 0 ||
substr
(
$result
, 0, 10) - time() > 0) &&
substr
(
$result
, 10, 16) ==
substr
(md5(
substr
(
$result
, 26).
$egiskeys
), 0, 16)) {
return
substr
(
$result
, 26);
}
else
{
return
''
;
}
}
}
/**
* 语言文件处理
*
* @param string $language 标示符
* @param array $pars 转义的数组,二维数组 ,'key1'=>'value1','key2'=>'value2',
* @param string $modules 多个模块之间用半角逗号隔开,如:member,guestbook
* @return string 语言字符
*/
function
L(
$language
=
'no_language'
,
$pars
=
array
(),
$modules
=
''
) {
static
$LANG
=
array
();
static
$LANG_MODULES
=
array
();
static
$lang
=
''
;
if
(defined(
'IN_ADMIN'
)) {
$lang
= SYS_STYLE ? SYS_STYLE :
'zh-cn'
;
}
else
{
$lang
= app_base::load_config(
'system'
,
'lang'
);
}
if
(!
$LANG
) {
require_once
CODE_PATH.
'languages'
.DIRECTORY_SEPARATOR.
$lang
.DIRECTORY_SEPARATOR.
'system.lang.php'
;
if
(defined(
'IN_ADMIN'
))
require_once
CODE_PATH.
'languages'
.DIRECTORY_SEPARATOR.
$lang
.DIRECTORY_SEPARATOR.
'system_menu.lang.php'
;
if
(
file_exists
(CODE_PATH.
'languages'
.DIRECTORY_SEPARATOR.
$lang
.DIRECTORY_SEPARATOR.ROUTE_M.
'.lang.php'
))
require_once
CODE_PATH.
'languages'
.DIRECTORY_SEPARATOR.
$lang
.DIRECTORY_SEPARATOR.ROUTE_M.
'.lang.php'
;
}
if
(!
empty
(
$modules
)) {
$modules
=
explode
(
','
,
$modules
);
foreach
(
$modules
AS
$m
) {
if
(!isset(
$LANG_MODULES
[
$m
]))
require_once
CODE_PATH.
'languages'
.DIRECTORY_SEPARATOR.
$lang
.DIRECTORY_SEPARATOR.
$m
.
'.lang.php'
;
}
}
if
(!
array_key_exists
(
$language
,
$LANG
)) {
return
$language
;
}
else
{
$language
=
$LANG
[
$language
];
if
(
$pars
) {
foreach
(
$pars
AS
$_k
=>
$_v
) {
$language
=
str_replace
(
'{'
.
$_k
.
'}'
,
$_v
,
$language
);
}
}
return
$language
;
}
}
/**
* 模板调用
*
* @param $module
* @param $template
* @param $istag
* @return unknown_type
*/
function
template(
$module
=
'content'
,
$template
=
'index'
,
$style
=
''
) {
if
(
strpos
(
$module
,
'plugin/'
)!== false) {
$plugin
=
str_replace
(
'plugin/'
,
''
,
$module
);
return
p_template(
$plugin
,
$template
,
$style
);
}
$module
=
str_replace
(
'/'
, DIRECTORY_SEPARATOR,
$module
);
if
(!
empty
(
$style
) && preg_match(
'/([a-z0-9\-_]+)/is'
,
$style
)) {
}
elseif
(
empty
(
$style
) && !defined(
'STYLE'
)) {
if
(defined(
'SITEID'
)) {
$siteid
= SITEID;
}
else
{
$siteid
= param::get_cookie(
'siteid'
);
}
if
(!
$siteid
)
$siteid
= 1;
$sitelist
= getcache(
'sitelist'
,
'commons'
);
if
(!
empty
(
$siteid
)) {
$style
=
$sitelist
[
$siteid
][
'default_style'
];
}
}
elseif
(
empty
(
$style
) && defined(
'STYLE'
)) {
$style
= STYLE;
}
else
{
$style
=
'default'
;
}
if
(!
$style
)
$style
=
'default'
;
$template_cache
= app_base::load_sys_class(
'template_cache'
);
$compiledtplfile
= ROOT_PATH.
'caches'
.DIRECTORY_SEPARATOR.
'caches_template'
.DIRECTORY_SEPARATOR.
$style
.DIRECTORY_SEPARATOR.
$module
.DIRECTORY_SEPARATOR.
$template
.
'.php'
;
if
(
file_exists
(CODE_PATH.
'templates'
.DIRECTORY_SEPARATOR.
$style
.DIRECTORY_SEPARATOR.
$module
.DIRECTORY_SEPARATOR.
$template
.
'.html'
)) {
if
(!
file_exists
(
$compiledtplfile
) || (@
filemtime
(CODE_PATH.
'templates'
.DIRECTORY_SEPARATOR.
$style
.DIRECTORY_SEPARATOR.
$module
.DIRECTORY_SEPARATOR.
$template
.
'.html'
) > @
filemtime
(
$compiledtplfile
))) {
$template_cache
->template_compile(
$module
,
$template
,
$style
);
}
}
else
{
$compiledtplfile
= ROOT_PATH.
'caches'
.DIRECTORY_SEPARATOR.
'caches_template'
.DIRECTORY_SEPARATOR.
'default'
.DIRECTORY_SEPARATOR.
$module
.DIRECTORY_SEPARATOR.
$template
.
'.php'
;
if
(!
file_exists
(
$compiledtplfile
) || (
file_exists
(CODE_PATH.
'templates'
.DIRECTORY_SEPARATOR.
'default'
.DIRECTORY_SEPARATOR.
$module
.DIRECTORY_SEPARATOR.
$template
.
'.html'
) &&
filemtime
(CODE_PATH.
'templates'
.DIRECTORY_SEPARATOR.
'default'
.DIRECTORY_SEPARATOR.
$module
.DIRECTORY_SEPARATOR.
$template
.
'.html'
) >
filemtime
(
$compiledtplfile
))) {
$template_cache
->template_compile(
$module
,
$template
,
'default'
);
}
elseif
(!
file_exists
(CODE_PATH.
'templates'
.DIRECTORY_SEPARATOR.
'default'
.DIRECTORY_SEPARATOR.
$module
.DIRECTORY_SEPARATOR.
$template
.
'.html'
)) {
showmessage(
'Template does not exist.'
.DIRECTORY_SEPARATOR.
$style
.DIRECTORY_SEPARATOR.
$module
.DIRECTORY_SEPARATOR.
$template
.
'.html'
);
}
}
return
$compiledtplfile
;
}
/**
* 输出自定义错误
*
* @param $errno 错误号
* @param $errstr 错误描述
* @param $errfile 报错文件地址
* @param $errline 错误行号
* @return string 错误提示
*/
function
my_error_handler(
$errno
,
$errstr
,
$errfile
,
$errline
) {
if
(
$errno
==8)
return
''
;
$errfile
=
str_replace
(ROOT_PATH,
''
,
$errfile
);
if
(app_base::load_config(
'system'
,
'errorlog'
)) {
error_log
(
'<?php exit;?>'
.
date
(
'm-d H:i:s'
,SYS_TIME).
' | '
.
$errno
.
' | '
.
str_pad
(
$errstr
,30).
' | '
.
$errfile
.
' | '
.
$errline
.
"\r\n"
, 3, CACHE_PATH.
'error_log.php'
);
}
else
{
$str
=
'<div style="font-size:12px;text-align:left; border-bottom:1px solid #9cc9e0; border-right:1px solid #9cc9e0;padding:1px 4px;color:#000000;font-family:Arial, Helvetica,sans-serif;"><span>errorno:'
.
$errno
.
',str:'
.
$errstr
.
',file:<font color="blue">'
.
$errfile
.
'</font>,line'
.
$errline
.
'<br />Need Help?</span></div>'
;
echo
$str
;
}
}
/**
* 提示信息页面跳转,跳转地址如果传入数组,页面会提示多个地址供用户选择,默认跳转地址为数组的第一个值,时间为5秒。
* showmessage('登录成功', array('默认跳转地址'=>'http://www.baidu.com'));
* @param string $msg 提示信息
* @param mixed(string/array) $url_forward 跳转地址
* @param int $ms 跳转等待时间
*/
function
showmessage(
$msg
,
$url_forward
=
'goback'
,
$ms
= 1250,
$dialog
=
''
,
$returnjs
=
''
) {
if
(defined(
'IN_ADMIN'
)) {
include
(admin::admin_tpl(
'showmessage'
,
'admin'
));
}
else
{
include
(template(
'content'
,
'message'
));
}
exit
;
}
/**
* 查询字符是否存在于某字符串
*
* @param $haystack 字符串
* @param $needle 要查找的字符
* @return bool
*/
function
str_exists(
$haystack
,
$needle
)
{
return
!(
strpos
(
$haystack
,
$needle
) === FALSE);
}
/**
* 取得文件扩展
*
* @param $filename 文件名
* @return 扩展名
*/
function
fileext(
$filename
) {
return
strtolower
(trim(
substr
(
strrchr
(
$filename
,
'.'
), 1, 10)));
}
/**
* 加载模板标签缓存
* @param string $name 缓存名
* @param integer $times 缓存时间
*/
function
tpl_cache(
$name
,
$times
= 0) {
$filepath
=
'tpl_data'
;
$info
= getcacheinfo(
$name
,
$filepath
);
if
(SYS_TIME -
$info
[
'filemtime'
] >=
$times
) {
return
false;
}
else
{
return
getcache(
$name
,
$filepath
);
}
}
/**
* 写入缓存,默认为文件缓存,不加载缓存配置。
* @param $name 缓存名称
* @param $data 缓存数据
* @param $filepath 数据路径(模块名称) caches/cache_$filepath/
* @param $type 缓存类型[file,memcache,apc]
* @param $config 配置名称
* @param $timeout 过期时间
*/
function
setcache(
$name
,
$data
,
$filepath
=
''
,
$type
=
'file'
,
$config
=
''
,
$timeout
=0) {
app_base::load_sys_class(
'cache_factory'
,
''
,0);
if
(
$config
) {
$cacheconfig
= app_base::load_config(
'cache'
);
$cache
= cache_factory::get_instance(
$cacheconfig
)->get_cache(
$config
);
}
else
{
$cache
= cache_factory::get_instance()->get_cache(
$type
);
}
return
$cache
->set(
$name
,
$data
,
$timeout
,
''
,
$filepath
);
}
/**
* 读取缓存,默认为文件缓存,不加载缓存配置。
* @param string $name 缓存名称
* @param $filepath 数据路径(模块名称) caches/cache_$filepath/
* @param string $config 配置名称
*/
function
getcache(
$name
,
$filepath
=
''
,
$type
=
'file'
,
$config
=
''
) {
app_base::load_sys_class(
'cache_factory'
,
''
,0);
if
(
$config
) {
$cacheconfig
= app_base::load_config(
'cache'
);
$cache
= cache_factory::get_instance(
$cacheconfig
)->get_cache(
$config
);
}
else
{
$cache
= cache_factory::get_instance()->get_cache(
$type
);
}
return
$cache
->get(
$name
,
''
,
''
,
$filepath
);
}
//根据行政区划数字获取对应名称名称 如 110101 得到 北京市东城区
function
get_div(
$div
=
''
)
{
if
(
empty
(
$div
)){
return
false;
}
$regioncode
= getcache(
'1'
,
'linkage'
);
if
(
$regioncode
)
{
$l1
=
substr
(
$div
,0,2).
'0000'
;
$L1_n
=
$regioncode
[
'data'
][
$l1
][
'name'
];
$tb
=
array
(
'110000'
,
'120000'
,
'310000'
,
'500000'
);
if
(in_array(
$l1
,
$tb
)){
$l2
=
$l1
=
substr
(
$div
,0,2).
"0000-r"
;
}
else
{
$l2
=
substr
(
$div
,0,4).
"00"
;
}
$L2_n
=
$regioncode
[
'data'
][
$l2
][
'name'
];
$L3_n
=
$regioncode
[
'data'
][
$div
][
'name'
];
if
(
$L2_n
===
$L1_n
){
$res_div
=
$L1_n
.
$L3_n
;
}
else
{
$res_div
=
$L1_n
.
$L2_n
.
$L3_n
;
}
return
$res_div
;
}
else
{
return
'无行政区划地址'
;
}
}
//根据行业类型数字获取对应名称名称 如 $trade=‘1A0112’ 得到 农、林、牧、渔业-农业-谷物及其他作物的种植-薯类的种植
function
get_trade_category(
$trade
=
''
){
if
(
empty
(
$trade
)){
return
false;
}
$trade_category
= getcache(
'3'
,
'linkage'
);
if
(
$trade_category
){
$t1
=
substr
(
$trade
,0,2);
$T_1
=
$trade_category
[
'data'
][
$t1
][
'name'
]?
$trade_category
[
'data'
][
$t1
][
'name'
]:
''
;
$t2
=
substr
(
$trade
,0,4);
$T_2
=
$trade_category
[
'data'
][
$t2
][
'name'
]?
$trade_category
[
'data'
][
$t2
][
'name'
]:
''
;
$t3
=
substr
(
$trade
,0,5);
$T_3
=
$trade_category
[
'data'
][
$t3
][
'name'
]?
$trade_category
[
'data'
][
$t3
][
'name'
]:
''
;
$T_4
=
$trade_category
[
'data'
][
$trade
][
'name'
]?
$trade_category
[
'data'
][
$trade
][
'name'
]:
''
;
if
(
$T_3
===
$T_4
){
$res_trade
=
$T_1
.
'-'
.
$T_2
.
'-'
.
$T_3
;
}
else
{
$res_trade
=
$T_1
.
'-'
.
$T_2
.
'-'
.
$T_3
.
'-'
.
$T_4
;
}
if
(
empty
(
$res_trade
)){
return
'行业类型数据不存在'
;
}
return
$res_trade
;
}
else
{
return
'行业类型数据不存在'
;
}
}
/**
* 删除缓存,默认为文件缓存,不加载缓存配置。
* @param $name 缓存名称
* @param $filepath 数据路径(模块名称) caches/cache_$filepath/
* @param $type 缓存类型[file,memcache,apc]
* @param $config 配置名称
*/
function
delcache(
$name
,
$filepath
=
''
,
$type
=
'file'
,
$config
=
''
) {
app_base::load_sys_class(
'cache_factory'
,
''
,0);
if
(
$config
) {
$cacheconfig
= app_base::load_config(
'cache'
);
$cache
= cache_factory::get_instance(
$cacheconfig
)->get_cache(
$config
);
}
else
{
$cache
= cache_factory::get_instance()->get_cache(
$type
);
}
return
$cache
->
delete
(
$name
,
''
,
''
,
$filepath
);
}
/**
* 读取缓存,默认为文件缓存,不加载缓存配置。
* @param string $name 缓存名称
* @param $filepath 数据路径(模块名称) caches/cache_$filepath/
* @param string $config 配置名称
*/
function
getcacheinfo(
$name
,
$filepath
=
''
,
$type
=
'file'
,
$config
=
''
) {
app_base::load_sys_class(
'cache_factory'
);
if
(
$config
) {
$cacheconfig
= app_base::load_config(
'cache'
);
$cache
= cache_factory::get_instance(
$cacheconfig
)->get_cache(
$config
);
}
else
{
$cache
= cache_factory::get_instance()->get_cache(
$type
);
}
return
$cache
->cacheinfo(
$name
,
''
,
''
,
$filepath
);
}
/**
* 生成sql语句,如果传入$in_cloumn 生成格式为 IN('a', 'b', 'c')
* @param $data 条件数组或者字符串
* @param $front 连接符
* @param $in_column 字段名称
* @return string
*/
function
to_sqls(
$data
,
$front
=
' AND '
,
$in_column
= false) {
if
(
$in_column
&&
is_array
(
$data
)) {
$ids
=
'\''
.implode(
'\',\''
,
$data
).
'\''
;
$sql
=
"$in_column IN ($ids)"
;
return
$sql
;
}
else
{
if
(
$front
==
''
) {
$front
=
' AND '
;
}
if
(
is_array
(
$data
) &&
count
(
$data
) > 0) {
$sql
=
''
;
foreach
(
$data
as
$key
=>
$val
) {
$sql
.=
$sql
?
" $front $key = '$val' "
:
" $key = '$val' "
;
}
return
$sql
;
}
else
{
return
$data
;
}
}
}
/**
* 分页函数
*
* @param $num 信息总数
* @param $curr_page 当前分页
* @param $perpage 每页显示数
* @param $urlrule URL规则
* @param $array 需要传递的数组,用于增加额外的方法
* @return 分页
*/
function
pages(
$num
,
$curr_page
,
$perpage
= 20,
$urlrule
=
''
,
$array
=
array
(),
$setpages
= 10) {
if
(defined(
'URLRULE'
) &&
$urlrule
==
''
) {
$urlrule
= URLRULE;
$array
=
$GLOBALS
[
'URL_ARRAY'
];
}
elseif
(
$urlrule
==
''
) {
$urlrule
= url_par(
'page={$page}'
);
}
$multipage
=
''
;
if
(
$num
>
$perpage
) {
$page
=
$setpages
+1;
$offset
=
ceil
(
$setpages
/2-1);
$pages
=
ceil
(
$num
/
$perpage
);
if
(defined(
'IN_ADMIN'
) && !defined(
'PAGES'
)) define(
'PAGES'
,
$pages
);
$from
=
$curr_page
-
$offset
;
$to
=
$curr_page
+
$offset
;
$more
= 0;
if
(
$page
>=
$pages
) {
$from
= 2;
$to
=
$pages
-1;
}
else
{
if
(
$from
<= 1) {
$to
=
$page
-1;
$from
= 2;
}
elseif
(
$to
>=
$pages
) {
$from
=
$pages
-(
$page
-2);
$to
=
$pages
-1;
}
$more
= 1;
}
//$multipage .= '<a class="a1">'.$num.L('page_item').'</a>';
if
(
$curr_page
>0) {
$multipage
.=
' <a href="'
.pageurl(
$urlrule
,
$curr_page
-1,
$array
).
'" class="a1">'
.L(
'previous'
).
'</a>'
;
if
(
$curr_page
==1) {
$multipage
.=
' <span>1</span>'
;
}
elseif
(
$curr_page
>6 &&
$more
) {
$multipage
.=
' <a href="'
.pageurl(
$urlrule
, 1,
$array
).
'">1</a>..'
;
}
else
{
$multipage
.=
' <a href="'
.pageurl(
$urlrule
, 1,
$array
).
'">1</a>'
;
}
}
for
(
$i
=
$from
;
$i
<=
$to
;
$i
++) {
if
(
$i
!=
$curr_page
) {
$multipage
.=
' <a href="'
.pageurl(
$urlrule
,
$i
,
$array
).
'">'
.
$i
.
'</a>'
;
}
else
{
$multipage
.=
' <span>'
.
$i
.
'</span>'
;
}
}
if
(
$curr_page
<
$pages
) {
if
(
$curr_page
<
$pages
-5 &&
$more
) {
$multipage
.=
' ..<a href="'
.pageurl(
$urlrule
,
$pages
,
$array
).
'">'
.
$pages
.
'</a> <a href="'
.pageurl(
$urlrule
,
$curr_page
+1,
$array
).
'" class="a1">'
.L(
'next'
).
'</a>'
;
}
else
{
$multipage
.=
' <a href="'
.pageurl(
$urlrule
,
$pages
,
$array
).
'">'
.
$pages
.
'</a> <a href="'
.pageurl(
$urlrule
,
$curr_page
+1,
$array
).
'" class="a1">'
.L(
'next'
).
'</a>'
;
}
}
elseif
(
$curr_page
==
$pages
) {
$multipage
.=
' <span>'
.
$pages
.
'</span> <a href="'
.pageurl(
$urlrule
,
$curr_page
,
$array
).
'" class="a1">'
.L(
'next'
).
'</a>'
;
}
else
{
$multipage
.=
' <a href="'
.pageurl(
$urlrule
,
$pages
,
$array
).
'">'
.
$pages
.
'</a> <a href="'
.pageurl(
$urlrule
,
$curr_page
+1,
$array
).
'" class="a1">'
.L(
'next'
).
'</a>'
;
}
}
return
$multipage
;
}
function
pages1(
$num
,
$curr_page
,
$perpage
= 20,
$urlrule
=
''
,
$array
=
array
(),
$setpages
= 10) {
if
(defined(
'URLRULE'
) &&
$urlrule
==
''
) {
$urlrule
= URLRULE;
$array
=
$GLOBALS
[
'URL_ARRAY'
];
}
elseif
(
$urlrule
==
''
) {
$urlrule
= url_par(
'page={$page}'
);
}
$multipage
=
''
;
if
(
$num
>
$perpage
) {
$page
=
$setpages
+1;
$offset
=
ceil
(
$setpages
/2-1);
$pages
=
ceil
(
$num
/
$perpage
);
if
(defined(
'IN_ADMIN'
) && !defined(
'PAGES'
)) define(
'PAGES'
,
$pages
);
$from
=
$curr_page
-
$offset
;
$to
=
$curr_page
+
$offset
;
$more
= 0;
if
(
$page
>=
$pages
) {
$from
= 2;
$to
=
$pages
-1;
}
else
{
if
(
$from
<= 1) {
$to
=
$page
-1;
$from
= 2;
}
elseif
(
$to
>=
$pages
) {
$from
=
$pages
-(
$page
-2);
$to
=
$pages
-1;
}
$more
= 1;
}
//$multipage .= '<a class="a1">'.$num.L('page_item').'</a>';
if
(
$curr_page
>0) {
$multipage
.=
' <a href="###" onclick="$(\'#page\').val('
.(
$curr_page
-1).
');$(\'#pageform\').submit();" class="a1">'
.L(
'previous'
).
'</a>'
;
if
(
$curr_page
==1) {
$multipage
.=
' <span>1</span>'
;
}
elseif
(
$curr_page
>6 &&
$more
) {
$multipage
.=
' <a href="###" onclick="$(\'#page\').val(1);$(\'#pageform\').submit();">1</a>..'
;
}
else
{
$multipage
.=
' <a href="###" onclick="$(\'#page\').val(1);$(\'#pageform\').submit();">1</a>'
;
}
}
for
(
$i
=
$from
;
$i
<=
$to
;
$i
++) {
if
(
$i
!=
$curr_page
) {
$multipage
.=
' <a href="###" onclick="$(\'#page\').val('
.
$i
.
');$(\'#pageform\').submit();">'
.
$i
.
'</a>'
;
}
else
{
$multipage
.=
' <span>'
.
$i
.
'</span>'
;
}
}
if
(
$curr_page
<
$pages
) {
if
(
$curr_page
<
$pages
-5 &&
$more
) {
$multipage
.=
' ..<a href="###" onclick="$(\'#page\').val('
.
$pages
.
');$(\'#pageform\').submit();">'
.
$pages
.
'</a> <a href="###" onclick="$(\'#page\').val('
.(
$curr_page
+1).
');$(\'#pageform\').submit();" class="a1">'
.L(
'next'
).
'</a>'
;
}
else
{
$multipage
.=
' <a href="###" onclick="$(\'#page\').val('
.
$pages
.
');$(\'#pageform\').submit();">'
.
$pages
.
'</a> <a href="###" onclick="$(\'#page\').val('
.(
$curr_page
+1).
');$(\'#pageform\').submit();" class="a1">'
.L(
'next'
).
'</a>'
;
}
}
elseif
(
$curr_page
==
$pages
) {
$multipage
.=
' <span>'
.
$pages
.
'</span> <a href="###" onclick="$(\'#page\').val('
.
$curr_page
.
');$(\'#pageform\').submit();" class="a1">'
.L(
'next'
).
'</a>'
;
}
else
{
$multipage
.=
' <a href="###" onclick="$(\'#page\').val('
.
$pages
.
');$(\'#pageform\').submit();">'
.
$pages
.
'</a> <a href="###" onclick="$(\'#page\').val('
.(
$curr_page
+1).
');$(\'#pageform\').submit();" class="a1">'
.L(
'next'
).
'</a>'
;
}
}
return
$multipage
;
}
function
pages2(
$num
,
$curr_page
,
$pages
,
$urlrule
=
''
,
$array
=
array
(),
$setpages
= 10) {
if
(defined(
'URLRULE'
) &&
$urlrule
==
''
) {
$urlrule
= URLRULE;
$array
=
$GLOBALS
[
'URL_ARRAY'
];
}
elseif
(
$urlrule
==
''
) {
$urlrule
= url_par(
'page={$page}'
);
}
$multipage
=
''
;
if
(
$pages
> 1) {
$page
=
$setpages
+1;
$offset
=
ceil
(
$setpages
/2-1);
if
(defined(
'IN_ADMIN'
) && !defined(
'PAGES'
)) define(
'PAGES'
,
$pages
);
$from
=
$curr_page
-
$offset
;
$to
=
$curr_page
+
$offset
;
$more
= 0;
if
(
$page
>=
$pages
) {
$from
= 2;
$to
=
$pages
-1;
}
else
{
if
(
$from
<= 1) {
$to
=
$page
-1;
$from
= 2;
}
elseif
(
$to
>=
$pages
) {
$from
=
$pages
-(
$page
-2);
$to
=
$pages
-1;
}
$more
= 1;
}
//$multipage .= '<a class="a1">'.$num.L('page_item').'</a>';
if
(
$curr_page
>0) {
$multipage
.=
' <a href="###" onclick="$(\'#dosearch\').trigger(\'click\',['
.(
$curr_page
-1).
']);" class="a1">'
.L(
'previous'
).
'</a>'
;
if
(
$curr_page
==1) {
$multipage
.=
' <span>1</span>'
;
}
elseif
(
$curr_page
>6 &&
$more
) {
$multipage
.=
' <a href="###" onclick="$(\'#dosearch\').trigger(\'click\',[1]);">1</a>..'
;
}
else
{
$multipage
.=
' <a href="###" onclick="$(\'#dosearch\').trigger(\'click\',[1]);">1</a>'
;
}
}
for
(
$i
=
$from
;
$i
<=
$to
;
$i
++) {
if
(
$i
!=
$curr_page
) {
$multipage
.=
' <a href="###" onclick="$(\'#dosearch\').trigger(\'click\',['
.
$i
.
']);">'
.
$i
.
'</a>'
;
}
else
{
$multipage
.=
' <span>'
.
$i
.
'</span>'
;
}
}
if
(
$curr_page
<
$pages
) {
if
(
$curr_page
<
$pages
-5 &&
$more
) {
$multipage
.=
' ..<a href="###" onclick="$(\'#dosearch\').trigger(\'click\',['
.
$pages
.
']);">'
.
$pages
.
'</a> <a href="###" onclick="$(\'#dosearch\').trigger(\'click\',['
.(
$curr_page
+1).
']);" class="a1">'
.L(
'next'
).
'</a>'
;
}
else
{
$multipage
.=
' <a href="###" onclick="$(\'#dosearch\').trigger(\'click\',['
.
$pages
.
']);">'
.
$pages
.
'</a> <a href="###" onclick="$(\'#dosearch\').trigger(\'click\',['
.(
$curr_page
+1).
']);" class="a1">'
.L(
'next'
).
'</a>'
;
}
}
elseif
(
$curr_page
==
$pages
) {
$multipage
.=
' <span>'
.
$pages
.
'</span> <a href="###" onclick="$(\'#dosearch\').trigger(\'click\',['
.(
$curr_page
).
']);" class="a1">'
.L(
'next'
).
'</a>'
;
}
else
{
$multipage
.=
' <a href="###" onclick="$(\'#dosearch\').trigger(\'click\',['
.
$pages
.
']);">'
.
$pages
.
'</a> <a href="###" onclick="$(\'#dosearch\').trigger(\'click\',['
.(
$curr_page
+1).
']);" class="a1">'
.L(
'next'
).
'</a>'
;
}
}
return
$multipage
;
}
/**
* 返回分页路径
*
* @param $urlrule 分页规则
* @param $page 当前页
* @param $array 需要传递的数组,用于增加额外的方法
* @return 完整的URL路径
*/
function
pageurl(
$urlrule
,
$page
,
$array
=
array
()) {
if
(
strpos
(
$urlrule
,
'~'
)) {
$urlrules
=
explode
(
'~'
,
$urlrule
);
$urlrule
=
$page
< 2 ?
$urlrules
[0] :
$urlrules
[1];
}
$findme
=
array
(
'{$page}'
);
$replaceme
=
array
(
$page
);
if
(
is_array
(
$array
))
foreach
(
$array
as
$k
=>
$v
) {
$findme
[] =
'{$'
.
$k
.
'}'
;
$replaceme
[] =
$v
;
}
$url
=
str_replace
(
$findme
,
$replaceme
,
$urlrule
);
$url
=
str_replace
(
array
(
'http://'
,
'//'
,
'~'
),
array
(
'~'
,
'/'
,
'http://'
),
$url
);
return
$url
;
}
/**
* URL路径解析,pages 函数的辅助函数
*
* @param $par 传入需要解析的变量 默认为,page={$page}
* @param $url URL地址
* @return URL
*/
function
url_par(
$par
,
$url
=
''
) {
if
(
$url
==
''
)
$url
= get_url();
$pos
=
strpos
(
$url
,
'?'
);
if
(
$pos
=== false) {
$url
.=
'?'
.
$par
;
}
else
{
$querystring
=
substr
(
strstr
(
$url
,
'?'
), 1);
parse_str
(
$querystring
,
$pars
);
$query_array
=
array
();
foreach
(
$pars
as
$k
=>
$v
) {
if
(
$k
!=
'page'
)
$query_array
[
$k
] =
$v
;
}
$querystring
= http_build_query(
$query_array
).
'&'
.
$par
;
$url
=
substr
(
$url
, 0,
$pos
).
'?'
.
$querystring
;
}
return
$url
;
}
/**
* 判断email格式是否正确
* @param $email
*/
function
is_email(
$email
) {
return
strlen
(
$email
) > 6 && preg_match(
"/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/"
,
$email
);
}
/**
* iconv 编辑转换
*/
if
(!function_exists(
'iconv'
)) {
function
iconv(
$in_charset
,
$out_charset
,
$str
) {
$in_charset
=
strtoupper
(
$in_charset
);
$out_charset
=
strtoupper
(
$out_charset
);
if
(function_exists(
'mb_convert_encoding'
)) {
return
mb_convert_encoding(
$str
,
$out_charset
,
$in_charset
);
}
else
{
app_base::load_sys_func(
'iconv'
);
$in_charset
=
strtoupper
(
$in_charset
);
$out_charset
=
strtoupper
(
$out_charset
);
if
(
$in_charset
==
'UTF-8'
&& (
$out_charset
==
'GBK'
||
$out_charset
==
'GB2312'
)) {
return
utf8_to_gbk(
$str
);
}
if
((
$in_charset
==
'GBK'
||
$in_charset
==
'GB2312'
) &&
$out_charset
==
'UTF-8'
) {
return
gbk_to_utf8(
$str
);
}
return
$str
;
}
}
}
/**
* 代码广告展示函数
* @param intval $siteid 所属站点
* @param intval $id 广告ID
* @return 返回广告代码
*/
function
show_ad(
$siteid
,
$id
) {
$siteid
=
intval
(
$siteid
);
$id
=
intval
(
$id
);
if
(!
$id
|| !
$siteid
)
return
false;
$p
= app_base::load_model(
'poster_model'
);
$r
=
$p
->get_one(
array
(
'spaceid'
=>
$id
,
'siteid'
=>
$siteid
),
'disabled, setting'
,
'id ASC'
);
if
(
$r
[
'disabled'
])
return
''
;
if
(
$r
[
'setting'
]) {
$c
= string2array(
$r
[
'setting'
]);
}
else
{
$r
[
'code'
] =
''
;
}
return
$c
[
'code'
];
}
/**
* 获取当前的站点ID
*/
function
get_siteid() {
static
$siteid
;
if
(!
empty
(
$siteid
))
return
$siteid
;
if
(defined(
'IN_ADMIN'
)) {
if
(
$d
= param::get_cookie(
'siteid'
)) {
$siteid
=
$d
;
}
else
{
return
''
;
}
}
else
{
$data
= getcache(
'sitelist'
,
'commons'
);
if
(!
is_array
(
$data
))
return
'1'
;
$site_url
= SITE_PROTOCOL.SITE_URL;
foreach
(
$data
as
$v
) {
if
(
$v
[
'url'
] ==
$site_url
.
'/'
)
$siteid
=
$v
[
'siteid'
];
}
}
if
(
empty
(
$siteid
))
$siteid
= 1;
return
$siteid
;
}
/**
* 获取用户昵称
* 不传入userid取当前用户nickname,如果nickname为空取username
* 传入field,取用户$field字段信息
*/
function
get_nickname(
$userid
=
''
,
$field
=
''
) {
$return
=
''
;
if
(
is_numeric
(
$userid
)) {
$member_db
= app_base::load_model(
'member_model'
);
$memberinfo
=
$member_db
->get_one(
array
(
'userid'
=>
$userid
));
if
(!
empty
(
$field
) &&
$field
!=
'nickname'
&& isset(
$memberinfo
[
$field
]) &&!
empty
(
$memberinfo
[
$field
])) {
$return
=
$memberinfo
[
$field
];
}
else
{
$return
= isset(
$memberinfo
[
'nickname'
]) && !
empty
(
$memberinfo
[
'nickname'
]) ?
$memberinfo
[
'nickname'
].
'('
.
$memberinfo
[
'username'
].
')'
:
$memberinfo
[
'username'
];
}
}
else
{
if
(param::get_cookie(
'_nickname'
)) {
$return
.=
'('
.param::get_cookie(
'_nickname'
).
')'
;
}
else
{
$return
.=
'('
.param::get_cookie(
'_username'
).
')'
;
}
}
return
$return
;
}
/**
* 获取用户信息
* 不传入$field返回用户所有信息,
* 传入field,取用户$field字段信息
*/
function
get_memberinfo(
$userid
,
$field
=
''
) {
if
(!
is_numeric
(
$userid
)) {
return
false;
}
else
{
static
$memberinfo
;
if
(!isset(
$memberinfo
[
$userid
])) {
$member_db
= app_base::load_model(
'member_model'
);
$memberinfo
[
$userid
] =
$member_db
->get_one(
array
(
'userid'
=>
$userid
));
}
if
(!
empty
(
$field
) && !
empty
(
$memberinfo
[
$userid
][
$field
])) {
return
$memberinfo
[
$userid
][
$field
];
}
else
{
return
$memberinfo
[
$userid
];
}
}
}
/**
* 通过 username 值,获取用户所有信息
* 获取用户信息
* 不传入$field返回用户所有信息,
* 传入field,取用户$field字段信息
*/
function
get_memberinfo_buyusername(
$username
,
$field
=
''
) {
if
(
empty
(
$username
)){
return
false;}
static
$memberinfo
;
if
(!isset(
$memberinfo
[
$username
])) {
$member_db
= app_base::load_model(
'member_model'
);
$memberinfo
[
$username
] =
$member_db
->get_one(
array
(
'username'
=>
$username
));
}
if
(!
empty
(
$field
) && !
empty
(
$memberinfo
[
$username
][
$field
])) {
return
$memberinfo
[
$username
][
$field
];
}
else
{
return
$memberinfo
[
$username
];
}
}
/**
* 调用关联菜单
* @param $linkageid 联动菜单id
* @param $id 生成联动菜单的样式id
* @param $defaultvalue 默认值
*/
function
menu_linkage(
$linkageid
= 0,
$id
=
'linkid'
,
$defaultvalue
= 0,
$defaultlabel
=
array
()) {
$linkageid
=
intval
(
$linkageid
);
$datas
=
array
();
$datas
= getcache(
$linkageid
,
'linkage'
);
$infos
=
$datas
[
'data'
];
if
(
$datas
[
'style'
]==
'1'
) {
$title
=
$datas
[
'title'
];
$container
=
'content'
.create_randomnum(100, 999).
date
(
'is'
);
if
(!defined(
'DIALOG_INIT_1'
)) {
define(
'DIALOG_INIT_1'
, 1);
$string
.=
'<script type="text/javascript" src="'
.JS_PATH.
'dialog.js"></script>'
;
//TODO $string .= '<link href="'.CSS_PATH.'dialog.css" rel="stylesheet" type="text/css">';
}
if
(!defined(
'LINKAGE_INIT_1'
)) {
define(
'LINKAGE_INIT_1'
, 1);
$string
.=
'<script type="text/javascript" src="'
.JS_PATH.
'linkage/js/pop.js"></script>'
;
}
$var_div
=
$defaultvalue
&& (ROUTE_A==
'edit'
|| ROUTE_A==
'account_manage_info'
|| ROUTE_A==
'info_publish'
|| ROUTE_A==
'orderinfo'
) ? menu_linkage_level(
$defaultvalue
,
$linkageid
,
$infos
) :
$datas
[
'title'
];
$var_input
=
$defaultvalue
&& (ROUTE_A==
'edit'
|| ROUTE_A==
'account_manage_info'
|| ROUTE_A==
'info_publish'
) ?
'<input type="hidden" name="info['
.
$id
.
']" value="'
.
$defaultvalue
.
'">'
:
'<input type="hidden" name="info['
.
$id
.
']" value="">'
;
$string
.=
'<div name="'
.
$id
.
'" value="" id="'
.
$id
.
'" class="ib">'
.
$var_div
.
'</div>'
.
$var_input
.
' <input type="button" name="btn_'
.
$id
.
'" class="button" value="'
.L(
'linkage_select'
).
'" onclick="open_linkage(\''
.
$id
.
'\',\''
.
$title
.
'\','
.
$container
.
',\''
.
$linkageid
.
'\')">'
;
$string
.=
'<script type="text/javascript">'
;
$string
.=
'var returnid_'
.
$id
.
'= \''
.
$id
.
'\';'
;
$string
.=
'var returnkeyid_'
.
$id
.
' = \''
.
$linkageid
.
'\';'
;
$string
.=
'var '
.
$container
.
' = new Array('
;
foreach
(
$infos
AS
$k
=>
$v
) {
if
(
$v
[
'parentid'
] == 0) {
$s
[]=
'new Array(\''
.
$v
[
'linkageid'
].
'\',\''
.
$v
[
'name'
].
'\',\''
.
$v
[
'parentid'
].
'\')'
;
}
else
{
continue
;
}
}
$s
= implode(
','
,
$s
);
$string
.=
$s
;
$string
.=
')'
;
$string
.=
'</script>'
;
}
elseif
(
$datas
[
'style'
]==
'2'
) {
if
(!defined(
'LINKAGE_INIT_1'
)) {
define(
'LINKAGE_INIT_1'
, 1);
$string
.=
'<script type="text/javascript" src="'
.JS_PATH.
'linkage/js/jquery.ld.js"></script>'
;
}
$default_txt
=
''
;
if
(
$defaultvalue
) {
$default_txt
= menu_linkage_level(
$defaultvalue
,
$linkageid
,
$infos
);
$default_txt
=
'["'
.
str_replace
(
' > '
,
'","'
,
$default_txt
).
'"]'
;
}
$string
.=
$defaultvalue
&& (ROUTE_A==
'edit'
|| ROUTE_A==
'account_manage_info'
|| ROUTE_A==
'info_publish'
) ?
'<input type="hidden" name="info['
.
$id
.
']" id="'
.
$id
.
'" value="'
.
$defaultvalue
.
'">'
:
'<input type="hidden" name="info['
.
$id
.
']" id="'
.
$id
.
'" value="">'
;
for
(
$i
=1;
$i
<=
$datas
[
'setting'
][
'level'
];
$i
++) {
$txt
= isset(
$defaultlabel
[
$i
]) ?
$defaultlabel
[
$i
] :
'请选择'
;
$string
.=
'<select class="pc-select-'
.
$id
.
'" name="'
.
$id
.
'-'
.
$i
.
'" id="'
.
$id
.
'-'
.
$i
.
'" width="100"><option value="">'
.
$txt
.
'</option></select> '
;
}
$string
.= '<script type=
"text/javascript"
>
$(
function
(){
var
$ld5
= $(
".pc-select-'.$id.'"
);
$ld5
.ld({ajaxOptions : {
"url"
:
"'.APP_PATH.'api.php?op=get_linkage&act=ajax_select&keyid='.$linkageid.'"
},defaultParentId : 0,style : {
"width"
: 120}})
var
ld5_api =
$ld5
.ld(
"api"
);
//ld5_api.selected('.$default_txt.');
$ld5
.bind(
"change"
,onchange);
function
onchange(e){
var
$target
= $(e.target);
var
index =
$ld5
.index(
$target
);
$(
"#'.$id.'-'.$i.'"
).remove();
$(
"#'.$id.'"
).val(
$ld5
.eq(index).show().val());
index ++;
$ld5
.eq(index).show(); }
})
</script>';
}
else
{
$title
=
$defaultvalue
?
$infos
[
$defaultvalue
][
'name'
] :
$datas
[
'title'
];
$colObj
= create_randomnum(100, 999).
date
(
'is'
);
$string
=
''
;
if
(!defined(
'LINKAGE_INIT'
)) {
define(
'LINKAGE_INIT'
, 1);
$string
.=
'<script type="text/javascript" src="'
.JS_PATH.
'linkage/js/mln.colselect.js"></script>'
;
if
(defined(
'IN_ADMIN'
)) {
$string
.=
'<link href="'
.JS_PATH.
'linkage/style/admin.css" rel="stylesheet" type="text/css">'
;
}
else
{
$string
.=
'<link href="'
.JS_PATH.
'linkage/style/css.css" rel="stylesheet" type="text/css">'
;
}
}
$string
.=
'<input type="hidden" name="info['
.
$id
.
']" value="1"><div id="'
.
$id
.
'"></div>'
;
$string
.=
'<script type="text/javascript">'
;
$string
.=
'var colObj'
.
$colObj
.
' = {"Items":['
;
foreach
(
$infos
AS
$k
=>
$v
) {
$s
.=
'{"name":"'
.
$v
[
'name'
].
'","topid":"'
.
$v
[
'parentid'
].
'","colid":"'
.
$k
.
'","value":"'
.
$k
.
'","fun":function(){}},'
;
}
$string
.=
substr
(
$s
, 0, -1);
$string
.=
']};'
;
$string
.=
'$("#'
.
$id
.
'").mlnColsel(colObj'
.
$colObj
.
',{'
;
$string
.=
'title:"'
.
$title
.
'",'
;
$string
.=
'value:"'
.
$defaultvalue
.
'",'
;
$string
.=
'width:100'
;
$string
.=
'});'
;
$string
.=
'</script>'
;
}
return
$string
;
}
/**
* 联动菜单层级
*/
function
menu_linkage_level(
$linkageid
,
$keyid
,
$infos
,
$result
=
array
()) {
if
(
array_key_exists
(
$linkageid
,
$infos
)) {
$result
[]=
$infos
[
$linkageid
][
'name'
];
return
menu_linkage_level(
$infos
[
$linkageid
][
'parentid'
],
$keyid
,
$infos
,
$result
);
}
krsort(
$result
);
return
implode(
' > '
,
$result
);
}
/**
* 通过catid获取显示菜单完整结构
* @param $menuid 菜单ID
* @param $cache_file 菜单缓存文件名称
* @param $cache_path 缓存文件目录
* @param $key 取得缓存值的键值名称
* @param $parentkey 父级的ID
* @param $linkstring 链接字符
*/
function
menu_level(
$menuid
,
$cache_file
,
$cache_path
=
'commons'
,
$key
=
'catname'
,
$parentkey
=
'parentid'
,
$linkstring
=
' > '
,
$result
=
array
()) {
$menu_arr
= getcache(
$cache_file
,
$cache_path
);
if
(
array_key_exists
(
$menuid
,
$menu_arr
)) {
$result
[] =
$menu_arr
[
$menuid
][
$key
];
return
menu_level(
$menu_arr
[
$menuid
][
$parentkey
],
$cache_file
,
$cache_path
,
$key
,
$parentkey
,
$linkstring
,
$result
);
}
krsort(
$result
);
return
implode(
$linkstring
,
$result
);
}
/**
* 通过id获取显示联动菜单
* @param $linkageid 联动菜单ID
* @param $keyid 菜单keyid
* @param $space 菜单间隔符
* @param $tyoe 1 返回间隔符链接,完整路径名称 3 返回完整路径数组,2返回当前联动菜单名称,4 直接返回ID
* @param $result 递归使用字段1
* @param $infos 递归使用字段2
*/
function
get_linkage(
$linkageid
,
$keyid
,
$space
=
'>'
,
$type
= 1,
$result
=
array
(),
$infos
=
array
()) {
if
(
$space
==
''
|| !isset(
$space
))
$space
=
'>'
;
if
(!
$infos
) {
$datas
= getcache(
$keyid
,
'linkage'
);
$infos
=
$datas
[
'data'
];
}
if
(
$type
== 1 ||
$type
== 3 ||
$type
== 4) {
if
(
array_key_exists
(
$linkageid
,
$infos
)) {
$result
[]= (
$type
== 1) ?
$infos
[
$linkageid
][
'name'
] : ((
$type
== 4) ?
$linkageid
:
$infos
[
$linkageid
]);
return
get_linkage(
$infos
[
$linkageid
][
'parentid'
],
$keyid
,
$space
,
$type
,
$result
,
$infos
);
}
else
{
if
(
count
(
$result
)>0) {
krsort(
$result
);
if
(
$type
== 1 ||
$type
== 4)
$result
= implode(
$space
,
$result
);
return
$result
;
}
else
{
return
$result
;
}
}
}
else
{
return
$infos
[
$linkageid
][
'name'
];
}
}
/**
* IE浏览器判断
*/
function
is_ie() {
$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
file_down(
$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
is_utf8(
$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
);
}
/**
* 组装生成ID号
* @param $modules 模块名
* @param $contentid 内容ID
* @param $siteid 站点ID
*/
function
id_encode(
$modules
,
$contentid
,
$siteid
) {
return
urlencode(
$modules
.
'-'
.
$contentid
.
'-'
.
$siteid
);
}
/**
* 解析ID
* @param $id 评论ID
*/
function
id_decode(
$id
) {
return
explode
(
'-'
,
$id
);
}
/**
* 对用户的密码进行加密
* @param $password
* @param $encrypt //传入加密串,在修改密码时做认证
* @return array/password
*/
function
password(
$password
,
$encrypt
=
''
) {
$pwd
=
array
();
$pwd
[
'encrypt'
] =
$encrypt
?
$encrypt
: create_randomstr();
$pwd
[
'password'
] = md5(md5(trim(
$password
)).
$pwd
[
'encrypt'
]);
return
$encrypt
?
$pwd
[
'password'
] :
$pwd
;
}
/**
* 生成随机字符串
* @param string $lenth 长度
* @return string 字符串
*/
function
create_randomstr(
$lenth
= 6) {
//openssl_random_pseudo_bytes
$fp
= @
fopen
(
'/dev/urandom'
,
'rb'
);
$pr_bits
=
''
;
if
(
$fp
!== FALSE) {
$pr_bits
.= @
fread
(
$fp
,
$lenth
/2);
@fclose(
$fp
);
}
return
bin2hex(
$pr_bits
);
//return random($lenth, '123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ');
}
/**
* 生成随机数
* @param string $lenth 长度
* @return string 字符串
*/
function
create_randomnum(
$min
,
$max
) {
//openssl_random_pseudo_bytes
$difference
=
$max
-
$min
;
$bytesNeeded
=
ceil
(
$difference
/256);
$fp
= @
fopen
(
'/dev/urandom'
,
'rb'
);
if
(
$fp
!== FALSE) {
$randomBytes
= @
fread
(
$fp
,
$bytesNeeded
);
@fclose(
$fp
);
}
$sum
= 0;
for
(
$a
= 0;
$a
<
$bytesNeeded
;
$a
++){
$sum
+= ord(
$randomBytes
[
$a
]);
}
$sum
=
$sum
% (
$difference
);
return
$sum
+
$min
;
//return random($lenth, '123456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ');
}
/**
* 检查密码长度是否符合规定
*
* @param STRING $password
* @return TRUE or FALSE
*/
function
is_password(
$password
) {
$strlen
=
strlen
(
$password
);
if
(
$strlen
>= 6 &&
$strlen
<= 20)
return
true;
return
false;
}
/**
* 检测输入中是否含有错误字符
*
* @param char $string 要检查的字符串名称
* @return TRUE or FALSE
*/
function
is_badword(
$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
is_username(
$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;
}
/**
* 检查id是否存在于数组中
*
* @param $id
* @param $ids
* @param $s
*/
function
check_in(
$id
,
$ids
=
''
,
$s
=
','
) {
if
(!
$ids
)
return
false;
$ids
=
explode
(
$s
,
$ids
);
return
is_array
(
$id
) ?
array_intersect
(
$id
,
$ids
) : in_array(
$id
,
$ids
);
}
/**
* 对数据进行编码转换
* @param array/string $data 数组
* @param string $input 需要转换的编码
* @param string $output 转换后的编码
*/
function
array_iconv(
$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 $imgurl 图片路径
* @param $width 缩略图宽度
* @param $height 缩略图高度
* @param $autocut 是否自动裁剪 默认裁剪,当高度或宽度有一个数值为0是,自动关闭
* @param $smallpic 无图片是默认图片路径
*/
function
thumb(
$imgurl
,
$width
= 100,
$height
= 100 ,
$autocut
= 1,
$smallpic
=
'nopic.gif'
) {
global
$image
;
$upload_url
= app_base::load_config(
'system'
,
'upload_url'
);
$upload_path
= app_base::load_config(
'system'
,
'upload_path'
);
if
(
empty
(
$imgurl
))
return
IMG_PATH.
$smallpic
;
$imgurl_replace
=
str_replace
(
$upload_url
,
''
,
$imgurl
);
if
(!
extension_loaded
(
'gd'
) ||
strpos
(
$imgurl_replace
,
'://'
))
return
$imgurl
;
if
(!
file_exists
(
$upload_path
.
$imgurl_replace
))
return
IMG_PATH.
$smallpic
;
list(
$width_t
,
$height_t
,
$type
,
$attr
) =
getimagesize
(
$upload_path
.
$imgurl_replace
);
if
(
$width
>=
$width_t
||
$height
>=
$height_t
)
return
$imgurl
;
$newimgurl
= dirname(
$imgurl_replace
).
'/thumb_'
.
$width
.
'_'
.
$height
.
'_'
.
basename
(
$imgurl_replace
);
if
(
file_exists
(
$upload_path
.
$newimgurl
))
return
$upload_url
.
$newimgurl
;
if
(!
is_object
(
$image
)) {
app_base::load_sys_class(
'image'
,
''
,
'0'
);
$image
=
new
image(1,0);
}
return
$image
->thumb(
$upload_path
.
$imgurl_replace
,
$upload_path
.
$newimgurl
,
$width
,
$height
,
''
,
$autocut
) ?
$upload_url
.
$newimgurl
:
$imgurl
;
}
/**
* 水印添加
* @param $source 原图片路径
* @param $target 生成水印图片途径,默认为空,覆盖原图
* @param $siteid 站点id,系统需根据站点id获取水印信息
*/
function
watermark(
$source
,
$target
=
''
,
$siteid
) {
global
$image_w
;
if
(
empty
(
$source
))
return
$source
;
if
(!
extension_loaded
(
'gd'
) ||
strpos
(
$source
,
'://'
))
return
$source
;
if
(!
$target
)
$target
=
$source
;
if
(!
is_object
(
$image_w
)){
app_base::load_sys_class(
'image'
,
''
,
'0'
);
$image_w
=
new
image(0,
$siteid
);
}
$image_w
->watermark(
$source
,
$target
);
return
$target
;
}
/**
* 当前路径
* 返回指定栏目路径层级
* @param $catid 栏目id
* @param $symbol 栏目间隔符
*/
function
catpos(
$catid
,
$symbol
=
' > '
){
$category_arr
=
array
();
$siteids
= getcache(
'category_content'
,
'commons'
);
$siteid
=
$siteids
[
$catid
];
$category_arr
= getcache(
'category_content_'
.
$siteid
,
'commons'
);
if
(!isset(
$category_arr
[
$catid
]))
return
''
;
$pos
=
''
;
$siteurl
= siteurl(
$category_arr
[
$catid
][
'siteid'
]);
$arrparentid
=
array_filter
(
explode
(
','
,
$category_arr
[
$catid
][
'arrparentid'
].
','
.
$catid
));
foreach
(
$arrparentid
as
$catid
) {
$url
=
$category_arr
[
$catid
][
'url'
];
// if(strpos($url, '://') === false) $url = $siteurl.$url;
$pos
.=
'<a href="'
.
$url
.
'">'
.
$category_arr
[
$catid
][
'catname'
].
'</a>'
.
$symbol
;
}
return
$pos
;
}
/**
* 根据catid获取子栏目数据的sql语句
* @param string $module 缓存文件名
* @param intval $catid 栏目ID
*/
function
get_sql_catid(
$file
=
'category_content_1'
,
$catid
= 0,
$module
=
'commons'
) {
$category
= getcache(
$file
,
$module
);
$catid
=
intval
(
$catid
);
if
(!isset(
$category
[
$catid
]))
return
false;
return
$category
[
$catid
][
'child'
] ?
" catid IN("
.
$category
[
$catid
][
'arrchildid'
].
") "
:
" catid=$catid "
;
}
/**
* 获取子栏目
* @param $parentid 父级id
* @param $type 栏目类型
* @param $self 是否包含本身 0为不包含
* @param $siteid 站点id
*/
function
subcat(
$parentid
= NULL,
$type
= NULL,
$self
=
'0'
,
$siteid
=
''
) {
if
(
empty
(
$siteid
))
$siteid
= get_siteid();
$category
= getcache(
'category_content_'
.
$siteid
,
'commons'
);
foreach
(
$category
as
$id
=>
$cat
) {
if
(
$cat
[
'siteid'
] ==
$siteid
&& (
$parentid
=== NULL ||
$cat
[
'parentid'
] ==
$parentid
) && (
$type
=== NULL ||
$cat
[
'type'
] ==
$type
))
$subcat
[
$id
] =
$cat
;
if
(
$self
== 1 &&
$cat
[
'catid'
] ==
$parentid
&& !
$cat
[
'child'
])
$subcat
[
$id
] =
$cat
;
}
return
$subcat
;
}
/**
* 获取内容地址
* @param $catid 栏目ID
* @param $id 文章ID
* @param $allurl 是否以绝对路径返回
*/
function
go(
$catid
,
$id
,
$allurl
= 0) {
static
$category
;
if
(
empty
(
$category
)) {
$siteids
= getcache(
'category_content'
,
'commons'
);
$siteid
=
$siteids
[
$catid
];
$category
= getcache(
'category_content_'
.
$siteid
,
'commons'
);
}
$id
=
intval
(
$id
);
if
(!
$id
|| !isset(
$category
[
$catid
]))
return
''
;
$modelid
=
$category
[
$catid
][
'modelid'
];
if
(!
$modelid
)
return
''
;
$db
= app_base::load_model(
'content_model'
);
$db
->set_model(
$modelid
);
$r
=
$db
->setCache()->get_one(
array
(
'id'
=>
$id
),
'url'
);
if
(!
empty
(
$allurl
)) {
if
(
strpos
(
$r
[
'url'
],
'://'
)===false) {
if
(
strpos
(
$category
[
$catid
][
'url'
],
'://'
) === FALSE) {
$site
= siteinfo(
$category
[
$catid
][
'siteid'
]);
$r
[
'url'
] =
substr
(
$site
[
'domain'
], 0, -1).
$r
[
'url'
];
}
else
{
$r
[
'url'
] =
$category
[
$catid
][
'url'
].
$r
[
'url'
];
}
}
}
return
$r
[
'url'
];
}
/**
* 将附件地址转换为绝对地址
* @param $path 附件地址
*/
function
atturl(
$path
) {
if
(
strpos
(
$path
,
':/'
)) {
return
$path
;
}
else
{
$sitelist
= getcache(
'sitelist'
,
'commons'
);
$siteid
= get_siteid();
$siteurl
=
$sitelist
[
$siteid
][
'domain'
];
$domainlen
=
strlen
(
$sitelist
[
$siteid
][
'domain'
])-1;
$path
=
$siteurl
.
$path
;
$path
= substr_replace(
$path
,
'/'
,
strpos
(
$path
,
'//'
,
$domainlen
),2);
return
$path
;
}
}
/**
* 判断模块是否安装
* @param $m 模块名称
*/
function
module_exists(
$m
=
''
) {
if
(
$m
==
'admin'
)
return
true;
$modules
= getcache(
'modules'
,
'commons'
);
$modules
=
array_keys
(
$modules
);
return
in_array(
$m
,
$modules
);
}
/**
* 生成SEO
* @param $siteid 站点ID
* @param $catid 栏目ID
* @param $title 标题
* @param $description 描述
* @param $keyword 关键词
*/
function
seo(
$siteid
,
$catid
=
''
,
$title
=
''
,
$description
=
''
,
$keyword
=
''
) {
if
(!
empty
(
$title
))
$title
=
strip_tags
(
$title
);
if
(!
empty
(
$description
))
$description
=
strip_tags
(
$description
);
if
(!
empty
(
$keyword
))
$keyword
=
str_replace
(
' '
,
','
,
strip_tags
(
$keyword
));
$sites
= getcache(
'sitelist'
,
'commons'
);
$site
=
$sites
[
$siteid
];
$cat
=
array
();
if
(!
empty
(
$catid
)) {
$siteids
= getcache(
'category_content'
,
'commons'
);
$siteid
=
$siteids
[
$catid
];
$categorys
= getcache(
'category_content_'
.
$siteid
,
'commons'
);
$cat
=
$categorys
[
$catid
];
$cat
[
'setting'
] = string2array(
$cat
[
'setting'
]);
}
$seo
[
'site_title'
] =isset(
$site
[
'site_title'
]) && !
empty
(
$site
[
'site_title'
]) ?
$site
[
'site_title'
] :
$site
[
'name'
];
$seo
[
'keyword'
] = !
empty
(
$keyword
) ?
$keyword
:
$site
[
'keywords'
];
$seo
[
'description'
] = isset(
$description
) && !
empty
(
$description
) ?
$description
: (isset(
$cat
[
'setting'
][
'meta_description'
]) && !
empty
(
$cat
[
'setting'
][
'meta_description'
]) ?
$cat
[
'setting'
][
'meta_description'
] : (isset(
$site
[
'description'
]) && !
empty
(
$site
[
'description'
]) ?
$site
[
'description'
] :
''
));
$seo
[
'title'
] = (isset(
$title
) && !
empty
(
$title
) ?
$title
.
' - '
:
''
).(isset(
$cat
[
'setting'
][
'meta_title'
]) && !
empty
(
$cat
[
'setting'
][
'meta_title'
]) ?
$cat
[
'setting'
][
'meta_title'
].
' - '
: (isset(
$cat
[
'catname'
]) && !
empty
(
$cat
[
'catname'
]) ?
$cat
[
'catname'
].
' - '
:
''
));
foreach
(
$seo
as
$k
=>
$v
) {
$seo
[
$k
] =
str_replace
(
array
(
"\n"
,
"\r"
),
''
,
$v
);
}
return
$seo
;
}
/**
* 获取站点的信息
* @param $siteid 站点ID
*/
function
siteinfo(
$siteid
) {
static
$sitelist
;
if
(
empty
(
$sitelist
))
$sitelist
= getcache(
'sitelist'
,
'commons'
);
return
isset(
$sitelist
[
$siteid
]) ?
$sitelist
[
$siteid
] :
''
;
}
/**
* 生成CNZZ统计代码
*/
function
tjcode() {
if
(!module_exists(
'cnzz'
))
return
false;
$config
= getcache(
'cnzz'
,
'commons'
);
if
(
empty
(
$config
)) {
return
false;
}
else
{
return
'<script src=\'http://pw.cnzz.com/c.php?id='
.
$config
[
'siteid'
].
'&l=2\' language=\'JavaScript\' charset=\'gb2312\'></script>'
;
}
}
/**
* 生成标题样式
* @param $style 样式
* @param $html 是否显示完整的STYLE
*/
function
title_style(
$style
,
$html
= 1) {
$str
=
''
;
if
(
$html
)
$str
=
' style="'
;
$style_arr
=
explode
(
';'
,
$style
);
if
(!
empty
(
$style_arr
[0]))
$str
.=
'color:'
.
$style_arr
[0].
';'
;
if
(!
empty
(
$style_arr
[1]))
$str
.=
'font-weight:'
.
$style_arr
[1].
';'
;
if
(
$html
)
$str
.=
'" '
;
return
$str
;
}
/**
* 获取站点域名
* @param $siteid 站点id
*/
function
siteurl(
$siteid
) {
static
$sitelist
;
return
WEB_PATH;
// if(!$siteid) return WEB_PATH;
// if(empty($sitelist)) $sitelist = getcache('sitelist','commons');
// return substr($sitelist[$siteid]['domain'],0,-1);
}
/**
* 生成上传附件验证
* @param $args 参数
* @param $operation 操作类型(加密解密)
*/
function
upload_key(
$args
) {
$pc_auth_key
= md5(app_base::load_config(
'system'
,
'auth_key'
).
$_SERVER
[
'HTTP_USER_AGENT'
]);
$authkey
= md5(
$args
.
$pc_auth_key
);
return
$authkey
;
}
/**
* 文本转换为图片
* @param string $txt 图形化文本内容
* @param int $fonttype 无外部字体时生成文字大小,取值范围1-5
* @param int $fontsize 引入外部字体时,字体大小
* @param string $font 字体名称 字体请放于app\libs\data\font下
* @param string $fontcolor 字体颜色 十六进制形式 如FFFFFF,FF0000
*/
function
string2img(
$txt
,
$fonttype
= 5,
$fontsize
= 16,
$font
=
''
,
$fontcolor
=
'FF0000'
,
$transparent
=
'1'
) {
if
(
empty
(
$txt
))
return
false;
if
(function_exists(
"imagepng"
)) {
$txt
= urlencode(sys_auth(
$txt
));
$txt
=
'<img src="'
.APP_PATH.
'api.php?op=creatimg&txt='
.
$txt
.
'&fonttype='
.
$fonttype
.
'&fontsize='
.
$fontsize
.
'&font='
.
$font
.
'&fontcolor='
.
$fontcolor
.
'&transparent='
.
$transparent
.
'" align="absmiddle">'
;
}
return
$txt
;
}
/**
* 获取系统版本号
*/
function
get_pc_version(
$type
=
''
) {
$version
= app_base::load_config(
'version'
);
if
(
$type
==1) {
return
$version
[
'pc_version'
];
}
elseif
(
$type
==2) {
return
$version
[
'pc_release'
];
}
else
{
return
$version
[
'pc_version'
].
' '
.
$version
[
'pc_release'
];
}
}
/**
* 运行钩子(插件使用)
*/
function
runhook(
$method
) {
$time_start
= getmicrotime();
$data
=
''
;
$getpclass
= FALSE;
$hook_appid
= getcache(
'hook'
,
'plugins'
);
if
(!
empty
(
$hook_appid
)) {
foreach
(
$hook_appid
as
$appid
=>
$p
) {
$pluginfilepath
= CODE_PATH.
'plugin'
.DIRECTORY_SEPARATOR.
$p
.DIRECTORY_SEPARATOR.
'hook.class.php'
;
$getpclass
= TRUE;
include_once
$pluginfilepath
;
}
$hook_appid
=
array_flip
(
$hook_appid
);
if
(
$getpclass
) {
$pclass
=
new
ReflectionClass(
'hook'
);
foreach
(
$pclass
->getMethods()
as
$r
) {
$legalmethods
[] =
$r
->getName();
}
}
if
(in_array(
$method
,
$legalmethods
)) {
foreach
(get_declared_classes()
as
$class
){
$refclass
=
new
ReflectionClass(
$class
);
if
(
$refclass
->isSubclassOf(
'hook'
)){
if
(
$_method
=
$refclass
->getMethod(
$method
)) {
$classname
=
$refclass
->getName();
if
(
$_method
->isPublic() &&
$_method
->isFinal()) {
plugin_stat(
$hook_appid
[
$classname
]);
$data
.=
$_method
->invoke(null);
}
}
}
}
}
return
$data
;
}
}
function
getmicrotime() {
list(
$usec
,
$sec
) =
explode
(
" "
,microtime());
return
((float)
$usec
+ (float)
$sec
);
}
/**
* 插件前台模板加载
* Enter description here ...
* @param unknown_type $module
* @param unknown_type $template
* @param unknown_type $style
*/
function
p_template(
$plugin
=
'content'
,
$template
=
'index'
,
$style
=
'default'
) {
if
(!
$style
)
$style
=
'default'
;
$template_cache
= app_base::load_sys_class(
'template_cache'
);
$compiledtplfile
= ROOT_PATH.
'caches'
.DIRECTORY_SEPARATOR.
'caches_template'
.DIRECTORY_SEPARATOR.
$style
.DIRECTORY_SEPARATOR.
'plugin'
.DIRECTORY_SEPARATOR.
$plugin
.DIRECTORY_SEPARATOR.
$template
.
'.php'
;
if
(!
file_exists
(
$compiledtplfile
) || (
file_exists
(CODE_PATH.
'plugin'
.DIRECTORY_SEPARATOR.
$plugin
.DIRECTORY_SEPARATOR.
'templates'
.DIRECTORY_SEPARATOR.
$template
.
'.html'
) &&
filemtime
(CODE_PATH.
'plugin'
.DIRECTORY_SEPARATOR.
$plugin
.DIRECTORY_SEPARATOR.
'templates'
.DIRECTORY_SEPARATOR.
$template
.
'.html'
) >
filemtime
(
$compiledtplfile
))) {
$template_cache
->template_compile(
'plugin/'
.
$plugin
,
$template
,
'default'
);
}
elseif
(!
file_exists
(CODE_PATH.
'plugin'
.DIRECTORY_SEPARATOR.
$plugin
.DIRECTORY_SEPARATOR.
'templates'
.DIRECTORY_SEPARATOR.
$template
.
'.html'
)) {
showmessage(
'Template does not exist.'
.DIRECTORY_SEPARATOR.
'plugin'
.DIRECTORY_SEPARATOR.
$plugin
.DIRECTORY_SEPARATOR.
$template
.
'.html'
);
}
return
$compiledtplfile
;
}
/**
* 读取缓存动态页面
*/
function
cache_page_start() {
$relate_url
= isset(
$_SERVER
[
'REQUEST_URI'
]) ? safe_replace(
$_SERVER
[
'REQUEST_URI'
]) :
$php_self
.(isset(
$_SERVER
[
'QUERY_STRING'
]) ?
'?'
.safe_replace(
$_SERVER
[
'QUERY_STRING'
]) :
$path_info
);
define(
'CACHE_PAGE_ID'
, md5(
$relate_url
));
$contents
= getcache(CACHE_PAGE_ID,
'page_tmp/'
.
substr
(CACHE_PAGE_ID, 0, 2));
if
(
$contents
&&
intval
(
substr
(
$contents
, 15, 10)) > SYS_TIME) {
echo
substr
(
$contents
, 29);
exit
;
}
if
(!defined(
'HTML'
)) define(
'HTML'
,true);
return
true;
}
/**
* 写入缓存动态页面
*/
function
cache_page(
$ttl
= 360,
$isjs
= 0) {
if
(
$ttl
== 0 || !defined(
'CACHE_PAGE_ID'
))
return
false;
$contents
= ob_get_contents();
if
(
$isjs
)
$contents
= format_js(
$contents
);
$contents
=
"<!--expiretime:"
.(SYS_TIME +
$ttl
).
"-->\n"
.
$contents
;
setcache(CACHE_PAGE_ID,
$contents
,
'page_tmp/'
.
substr
(CACHE_PAGE_ID, 0, 2));
}
/**
*
* 获取远程内容
* @param $url 接口url地址
* @param $timeout 超时时间
*/
function
pc_file_get_contents(
$url
,
$timeout
=30) {
$stream
= stream_context_create(
array
(
'http'
=>
array
(
'timeout'
=>
$timeout
)));
return
@
file_get_contents
(
$url
, 0,
$stream
);
}
/**
* Function get_vid
* 获取视频信息
* @param int $contentid 内容ID 必须
* @param int $catid 栏目id 取内容里面视频信息时必须
* @param int $isspecial 是否取专题的视频信息
*/
function
get_vid(
$contentid
= 0,
$catid
= 0,
$isspecial
= 0) {
static
$categorys
;
if
(!
$contentid
)
return
false;
if
(!
$isspecial
) {
if
(!
$catid
)
return
false;
$contentid
=
intval
(
$contentid
);
$catid
=
intval
(
$catid
);
$siteid
= get_siteid();
if
(!
$categorys
) {
$categorys
= getcache(
'category_content_'
.
$siteid
,
'commons'
);
}
$modelid
=
$categorys
[
$catid
][
'modelid'
];
$video_content
= app_base::load_model(
'video_content_model'
);
$r
=
$video_content
->get_one(
array
(
'contentid'
=>
$contentid
,
'modelid'
=>
$modelid
),
'videoid'
,
'listorder ASC'
);
$video_store
=app_base::load_model(
'video_store_model'
);
return
$video_store
->get_one(
array
(
'videoid'
=>
$r
[
'videoid'
]));
}
else
{
$special_content
= app_base::load_model(
'special_content_model'
);
$contentid
=
intval
(
$contentid
);
$video_store
=app_base::load_model(
'video_store_model'
);
$r
=
$special_content
->get_one(
array
(
'id'
=>
$contentid
),
'videoid'
);
return
$video_store
->get_one(
array
(
'videoid'
=>
$r
[
'videoid'
]));
}
}
/**
* 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
;
}
}
function
httpResponse(
$status
,
$msg
=
''
){
$m
= app_base::load_model(
'category_model'
);
$CATEGORYS
=
$m
->select(
array
(
'parentid'
=>0),
'*'
,
''
,
'listorder'
);
include
CODE_PATH .
'libs'
.DIRECTORY_SEPARATOR.
'data'
.DIRECTORY_SEPARATOR.
'http'
.DIRECTORY_SEPARATOR.
$status
.
'.php'
;
}
function
array_change_key_case_recursive(
$arr
)
{
if
(!
$arr
|| !
is_array
(
$arr
))
return
array
();
return
array_map
(
function
(
$item
){
if
(
is_array
(
$item
))
$item
= array_change_key_case_recursive(
$item
);
return
$item
;
},
array_change_key_case
(
$arr
));
}
function
visitauth(){
$vtime
= time();
$vsign
= md5(
"cuichuande@ideadata.com.cn#$%"
.
$vtime
);
return
"tm={$vtime}&sn={$vsign}"
;
}
?>