查看php 类的详情:方法、常量、属性( type(new \Illuminate\Http\Request());)
/**
* fixme 打印类详情
* @param $class object 对象
*/
function type($class){
$ref = new \ReflectionClass($class);
$br = '<br>';
$consts = $ref->getConstants(); //返回所有常量名和值
echo "----------------consts:---------------" . $br;
foreach ($consts as $key => $val)
{
echo "$key : $val" . $br;
} $props = $ref->getDefaultProperties(); //返回类中所有属性与值类型
echo "--------------------props:--------------" . $br . $br;
foreach ($props as $key => $val)
{
echo "$key ::" . gettype($val) . $br; // 属性名和属性值
} $methods = $ref->getMethods(); //返回类中所有方法与参数
echo "-----------------methods:---------------" . $br . $br;
foreach ($methods as $method) {
$getParam = $method->getParameters();
if(!count($getParam))echo $method->getName();
foreach ($getParam as $key=>$value){
echo $method->getName() ."::".$value.' + ';
}
echo $br;
}
}
core.php:
/**
* 产生验证码
*
* @param string $nchash 哈希数
* @return string
*/
function makeSeccode($nchash){
$seccode = random(6, 1);
$seccodeunits = ''; $s = sprintf('%04s', base_convert($seccode, 10, 23));
$seccodeunits = 'ABCEFGHJKMPRTVXY2346789';
if($seccodeunits) {
$seccode = '';
for($i = 0; $i < 4; $i++) {
$unit = ord($s{$i});
$seccode .= ($unit >= 0x30 && $unit <= 0x39) ? $seccodeunits[$unit - 0x30] : $seccodeunits[$unit - 0x57];
}
}
setNcCookie('seccode'.$nchash, encrypt(strtoupper($seccode)."\t".(time())."\t".$nchash,MD5_KEY),3600);
return $seccode;
}
function getFlexigridArray($in_array, $fields_array, $data, $format_array)//多频道
{
$out_array = $in_array;
if ($out_array["operation"]) {
$out_array["operation"] = "--";
} if ($fields_array && is_array($fields_array)) {
foreach ($fields_array as $key => $value ) {
$k = ""; if (is_int($key)) {
$k = $value;
}
else {
$k = $key;
}
if (is_array($data) && array_key_exists($k, $data)) {
$out_array[$k] = $data[$k];
if ($format_array && in_array($k, $format_array)) {
$out_array[$k] = ncpriceformatb($data[$k]);
}
}
else {
$out_array[$k] = "--";
}
}
} return $out_array;
}
function ncPriceFormatb($price)//多频道
{
return number_format($price, 2, ".", "");
}
/**
* 验证验证码
*
* @param string $nchash 哈希数
* @param string $value 待验证值
* @return boolean
*/
function checkSeccode($nchash,$value){
list($checkvalue, $checktime, $checkidhash) = explode("\t", decrypt(cookie('seccode'.$nchash),MD5_KEY));
$return = $checkvalue == strtoupper($value) && $checkidhash == $nchash;
if (!$return) setNcCookie('seccode'.$nchash,'',-3600);
return $return;
} /**
* 设置cookie QQ wap 登录 by 33h ao.co m
*
* @param string $name cookie 的名称
* @param string $value cookie 的值
* @param int $expire cookie 有效周期
* @param string $path cookie 的服务器路径 默认为 /
* @param string $domain cookie 的域名
* @param string $secure 是否通过安全的 HTTPS 连接来传输 cookie,默认为false
*/
function setNc2Cookie($name, $value, $expire='3600', $path='', $domain='', $secure=false){
if (empty($path)) $path = '/';
if (empty($domain)) $domain = SUBDOMAIN_SUFFIX ? SUBDOMAIN_SUFFIX : '';
$expire = intval($expire)?intval($expire):(intval(SESSION_EXPIRE)?intval(SESSION_EXPIRE):3600);
$result = setcookie($name, $value, time()+$expire, $path, $domain, $secure);
$_COOKIE[$name] = $value;
} /**
* 设置cookie
*
* @param string $name cookie 的名称
* @param string $value cookie 的值
* @param int $expire cookie 有效周期
* @param string $path cookie 的服务器路径 默认为 /
* @param string $domain cookie 的域名
* @param string $secure 是否通过安全的 HTTPS 连接来传输 cookie,默认为false
*/
function setNcCookie($name, $value, $expire='3600', $path='', $domain='', $secure=false){
if (empty($path)) $path = '/';
if (empty($domain)) $domain = SUBDOMAIN_SUFFIX ? SUBDOMAIN_SUFFIX : '';
$name = defined('COOKIE_PRE') ? COOKIE_PRE.$name : strtoupper(substr(md5(MD5_KEY),0,4)).'_'.$name;
$expire = intval($expire)?intval($expire):(intval(SESSION_EXPIRE)?intval(SESSION_EXPIRE):3600);
$result = setcookie($name, $value, time()+$expire, $path, $domain, $secure);
$_COOKIE[$name] = $value;
} /**
* 取得COOKIE的值
*
* @param string $name
* @return unknown
*/
function cookie($name= ''){
$name = defined('COOKIE_PRE') ? COOKIE_PRE.$name : strtoupper(substr(md5(MD5_KEY),0,4)).'_'.$name;
return $_COOKIE[$name];
} /**
* 当访问的act或op不存在时调用此函数并退出脚本
*
* @param string $act
* @param string $op
* @return void
*/
function requestNotFound($act = null, $op = null) {
showMessage('您访问的页面不存在!', SHOP_SITE_URL, 'exception', 'error', 1, 3000);
exit;
} /**
* 输出信息
*
* @param string $msg 输出信息
* @param string/array $url 跳转地址 当$url为数组时,结构为 array('msg'=>'跳转连接文字','url'=>'跳转连接');
* @param string $show_type 输出格式 默认为html
* @param string $msg_type 信息类型 succ 为成功,error为失败/错误
* @param string $is_show 是否显示跳转链接,默认是为1,显示
* @param int $time 跳转时间,默认为2秒
* @return string 字符串类型的返回结果
*/
function showMessage($msg,$url='',$show_type='html',$msg_type='succ',$is_show=1,$time=2000){
if (!class_exists('Language')) import('libraries.language');
Language::read('core_lang_index');
$lang = Language::getLangContent();
/**
* 如果默认为空,则跳转至上一步链接
*/
$url = ($url!='' ? $url : getReferer()); $msg_type = in_array($msg_type,array('succ','error')) ? $msg_type : 'error'; /**
* 输出类型
*/
switch ($show_type){
case 'json':
$return = '{';
$return .= '"msg":"'.$msg.'",';
$return .= '"url":"'.$url.'"';
$return .= '}';
echo $return;
break;
case 'exception':
echo '<!DOCTYPE html>';
echo '<html>';
echo '<head>';
echo '<meta http-equiv="Content-Type" content="text/html; charset='.CHARSET.'" />';
echo '<title></title>';
echo '<style type="text/css">';
echo 'body { font-family: "Verdana";padding: 0; margin: 0;}';
echo 'h2 { font-size: 12px; line-height: 30px; border-bottom: 1px dashed #CCC; padding-bottom: 8px;width:800px; margin: 20px 0 0 150px;}';
echo 'dl { float: left; display: inline; clear: both; padding: 0; margin: 10px 20px 20px 150px;}';
echo 'dt { font-size: 14px; font-weight: bold; line-height: 40px; color: #333; padding: 0; margin: 0; border-width: 0px;}';
echo 'dd { font-size: 12px; line-height: 40px; color: #333; padding: 0px; margin:0;}';
echo '</style>';
echo '</head>';
echo '<body>';
echo '<h2>'.$lang['error_info'].'</h2>';
echo '<dl>';
echo '<dd>'.$msg.'</dd>';
echo '<dt><p /></dt>';
echo '<dd>'.$lang['error_notice_operate'].'</dd>';
echo '<dd><p /><p /><p /><p /></dd>';
echo '<dd><p /><p /><p /><p /></dd>';
echo '</dl>';
echo '</body>';
echo '</html>';
exit;
break;
case 'javascript':
echo "<script>";
echo "alert('". $msg ."');";
echo "location.href='". $url ."'";
echo "</script>";
exit;
break;
case 'tenpay':
echo "<html><head>";
echo "<meta name=\"TENCENT_ONLINE_PAYMENT\" content=\"China TENCENT\">";
echo "<script language=\"javascript\">";
echo "window.location.href='" . $url . "';";
echo "</script>";
echo "</head><body></body></html>";
exit;
break;
default:
/**
* 不显示右侧工具条
*/
Tpl::output('hidden_nctoolbar', 1);
if (is_array($url)){
foreach ($url as $k => $v){
$url[$k]['url'] = $v['url']?$v['url']:getReferer();
}
}
/**
* 读取信息布局的语言包
*/
Language::read("msg");
/**
* html输出形式
* 指定为指定项目目录下的error模板文件
*/
Tpl::setDir('');
Tpl::output('html_title',Language::get('nc_html_title'));
Tpl::output('msg',$msg);
Tpl::output('url',$url);
Tpl::output('msg_type',$msg_type);
Tpl::output('is_show',$is_show);
Tpl::showpage('msg','msg_layout',$time);
}
exit;
} /**
* 消息提示,主要适用于普通页面AJAX提交的情况
*
* @param string $message 消息内容
* @param string $url 提示完后的URL去向
* @param stting $alert_type 提示类型 error/succ/notice 分别为错误/成功/警示
* @param string $extrajs 扩展JS
* @param int $time 停留时间
*/
function showDialog($message = '', $url = '', $alert_type = 'error', $extrajs = '', $time = 2){
if (empty($_GET['inajax'])){
if ($url == 'reload') $url = '';
showMessage($message.$extrajs,$url,'html',$alert_type,1,$time*1000);
}
$message = str_replace("'", "\\'", strip_tags($message)); $paramjs = null;
if ($url == 'reload'){
$paramjs = 'window.location.reload()';
}elseif ($url != ''){
$paramjs = 'window.location.href =\''.$url.'\'';
}
if ($paramjs){
$paramjs = 'function (){'.$paramjs.'}';
}else{
$paramjs = 'null';
}
$modes = array('error' => 'alert', 'succ' => 'succ', 'notice' => 'notice','js'=>'js');
$cover = $alert_type == 'error' ? 1 : 0;
$extra .= 'showDialog(\''.$message.'\', \''.$modes[$alert_type].'\', null, '.($paramjs ? $paramjs : 'null').', '.$cover.', null, null, null, null, '.(is_numeric($time) ? $time : 'null').', null);';
$extra = $extra ? '<script type="text/javascript" reload="1">'.$extra.'</script>' : '';
if ($extrajs != '' && substr(trim($extrajs),0,7) != '<script'){
$extrajs = '<script type="text/javascript" reload="1">'.$extrajs.'</script>';
}
$extra .= $extrajs;
ob_end_clean();
@header("Expires: -1");
@header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
@header("Content-type: text/xml; charset=".CHARSET); $string = '<?xml version="1.0" encoding="'.CHARSET.'"?>'."\r\n";
$string .= '<root><![CDATA['.$message.$extra.']]></root>';
echo $string;exit;
} /**
* 不显示信息直接跳转
*
* @param string $url
*/
function redirect($url = ''){
if (empty($url)){
if(!empty($_REQUEST['ref_url'])){
$url = $_REQUEST['ref_url'];
}else{
$url = getReferer();
}
}
header('Location: '.$url);exit();
} /**
* 取上一步来源地址
*
* @param
* @return string 字符串类型的返回结果
*/
function getReferer(){
return empty($_SERVER['HTTP_REFERER'])?'':$_SERVER['HTTP_REFERER'];
} /**
* 取验证码hash值
*
* @param
* @return string 字符串类型的返回结果
*/
function getNchash($act = '', $op = ''){
$act = $act ? $act : $_GET['act'];
$op = $op ? $op : $_GET['op'];
if (C('captcha_status_login')){
return substr(md5(SHOP_SITE_URL.$act.$op),0,8);
} else {
return '';
}
} /**
* 加密函数
*
* @param string $txt 需要加密的字符串
* @param string $key 密钥
* @return string 返回加密结果
*/
function encrypt($txt, $key = ''){
if (empty($txt)) return $txt;
if (empty($key)) $key = md5(MD5_KEY);
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
$ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
$nh1 = rand(0,64);
$nh2 = rand(0,64);
$nh3 = rand(0,64);
$ch1 = $chars{$nh1};
$ch2 = $chars{$nh2};
$ch3 = $chars{$nh3};
$nhnum = $nh1 + $nh2 + $nh3;
$knum = 0;$i = 0;
while(isset($key{$i})) $knum +=ord($key{$i++});
$mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum%8,$knum%8 + 16);
$txt = base64_encode(time().'_'.$txt);
$txt = str_replace(array('+','/','='),array('-','_','.'),$txt);
$tmp = '';
$j=0;$k = 0;
$tlen = strlen($txt);
$klen = strlen($mdKey);
for ($i=0; $i<$tlen; $i++) {
$k = $k == $klen ? 0 : $k;
$j = ($nhnum+strpos($chars,$txt{$i})+ord($mdKey{$k++}))%64;
$tmp .= $chars{$j};
}
$tmplen = strlen($tmp);
$tmp = substr_replace($tmp,$ch3,$nh2 % ++$tmplen,0);
$tmp = substr_replace($tmp,$ch2,$nh1 % ++$tmplen,0);
$tmp = substr_replace($tmp,$ch1,$knum % ++$tmplen,0);
return $tmp;
} /**
* 解密函数
*
* @param string $txt 需要解密的字符串
* @param string $key 密匙
* @return string 字符串类型的返回结果
*/
function decrypt($txt, $key = '', $ttl = 0){
if (empty($txt)) return $txt;
if (empty($key)) $key = md5(MD5_KEY); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
$ikey ="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
$knum = 0;$i = 0;
$tlen = @strlen($txt);
while(isset($key{$i})) $knum +=ord($key{$i++});
$ch1 = @$txt{$knum % $tlen};
$nh1 = strpos($chars,$ch1);
$txt = @substr_replace($txt,'',$knum % $tlen--,1);
$ch2 = @$txt{$nh1 % $tlen};
$nh2 = @strpos($chars,$ch2);
$txt = @substr_replace($txt,'',$nh1 % $tlen--,1);
$ch3 = @$txt{$nh2 % $tlen};
$nh3 = @strpos($chars,$ch3);
$txt = @substr_replace($txt,'',$nh2 % $tlen--,1);
$nhnum = $nh1 + $nh2 + $nh3;
$mdKey = substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum % 8,$knum % 8 + 16);
$tmp = '';
$j=0; $k = 0;
$tlen = @strlen($txt);
$klen = @strlen($mdKey);
for ($i=0; $i<$tlen; $i++) {
$k = $k == $klen ? 0 : $k;
$j = strpos($chars,$txt{$i})-$nhnum - ord($mdKey{$k++});
while ($j<0) $j+=64;
$tmp .= $chars{$j};
}
$tmp = str_replace(array('-','_','.'),array('+','/','='),$tmp);
$tmp = trim(base64_decode($tmp)); if (preg_match("/\d{10}_/s",substr($tmp,0,11))){
if ($ttl > 0 && (time() - substr($tmp,0,11) > $ttl)){
$tmp = null;
}else{
$tmp = substr($tmp,11);
}
}
return $tmp;
} /**
* 取得IP
*
*
* @return string 字符串类型的返回结果
*/
function getIp(){
if (@$_SERVER['HTTP_CLIENT_IP'] && $_SERVER['HTTP_CLIENT_IP']!='unknown') {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (@$_SERVER['HTTP_X_FORWARDED_FOR'] && $_SERVER['HTTP_X_FORWARDED_FOR']!='unknown') {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match('/^\d[\d.]+\d$/', $ip) ? $ip : '';
} /**
* 数据库模型实例化入口
*
* @param string $model 模型名称
* @return obj 对象形式的返回结果
*/
function Model($model = null, $base_path = null){
static $_cache = array();
$cache_key = $model.'.'.$base_path;
if (!is_null($model) && isset($_cache[$cache_key])) return $_cache[$cache_key];
$base_path = $base_path == null ? BASE_DATA_PATH : $base_path;
$file_name = $base_path.'/model/'.$model.'.model.php';
$class_name = $model.'Model';
if (!file_exists($file_name)){
return $_cache[$cache_key] = new Model($model);
}else{
require_once($file_name);
if (!class_exists($class_name)){
$error = 'Model Error: Class '.$class_name.' is not exists!';
throw_exception($error);
}else{
return $_cache[$cache_key] = new $class_name();
}
}
} /**
* 行为模型实例
*
* @param string $model 模型名称
* @return obj 对象形式的返回结果
*/
function Logic($model = null, $base_path = null){
static $_cache = array();
$cache_key = $model.'.'.$base_path;
if (!is_null($model) && isset($_cache[$cache_key])) return $_cache[$cache_key];
$base_path = $base_path == null ? BASE_DATA_PATH : $base_path;
$file_name = $base_path.'/logic/'.$model.'.logic.php';
$class_name = $model.'Logic';
if (!file_exists($file_name)){
return $_cache[$cache_key] = new Model($model);
}else{
require_once($file_name);
if (!class_exists($class_name)){
$error = 'Logic Error: Class '.$class_name.' is not exists!';
throw_exception($error);
}else{
return $_cache[$cache_key] = new $class_name();
}
}
} /**
* 读取目录列表
* 不包括 . .. 文件 三部分
*
* @param string $path 路径
* @return array 数组格式的返回结果
*/
function readDirList($path){
if (is_dir($path)) {
$handle = @opendir($path);
$dir_list = array();
if ($handle){
while (false !== ($dir = readdir($handle))){
if ($dir != '.' && $dir != '..' && is_dir($path.DS.$dir)){
$dir_list[] = $dir;
}
}
return $dir_list;
}else {
return false;
}
}else {
return false;
}
} /**
* 转换特殊字符
*
* @param string $string 要转换的字符串
* @return string 字符串类型的返回结果
*/
function replaceSpecialChar($string){
$str = str_replace("\r\n", "", $string);
$str = str_replace("\t", " ", $string);
$str = str_replace("\n", "", $string);
return $string;
} /**
* 编辑器内容
*
* @param int $id 编辑器id名称,与name同名
* @param string $value 编辑器内容
* @param string $width 宽 带px
* @param string $height 高 带px
* @param string $style 样式内容
* @param string $upload_state 上传状态,默认是开启
*/
function showEditor($id, $value='', $width='700px', $height='300px', $style='visibility:hidden;',$upload_state="true", $media_open=false, $type='all'){
//是否开启多媒体
$media = '';
if ($media_open){
$media = ", 'flash', 'media'";
}
switch($type) {
case 'basic':
$items = "['source', '|', 'fullscreen', 'undo', 'redo', 'cut', 'copy', 'paste', '|', 'about']";
break;
case 'simple':
$items = "['source', '|', 'fullscreen', 'undo', 'redo', 'cut', 'copy', 'paste', '|',
'fontname', 'fontsize', 'forecolor', 'hilitecolor', 'bold', 'italic', 'underline',
'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist',
'insertunorderedlist', '|', 'emoticons', 'image', 'link', '|', 'about']";
break;
default:
$items = "['source', '|', 'fullscreen', 'undo', 'redo', 'print', 'cut', 'copy', 'paste',
'plainpaste', 'wordpaste', '|', 'justifyleft', 'justifycenter', 'justifyright',
'justifyfull', 'insertorderedlist', 'insertunorderedlist', 'indent', 'outdent', 'subscript',
'superscript', '|', 'selectall', 'clearhtml','quickformat','|',
'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold',
'italic', 'underline', 'strikethrough', 'lineheight', 'removeformat', '|', 'image'".$media.", 'table', 'hr', 'emoticons', 'link', 'unlink', '|', 'about']";
break;
}
//图片、Flash、视频、文件的本地上传都可开启。默认只有图片,要启用其它的需要修改resource\kindeditor\php下的upload_json.php的相关参数
echo '<textarea id="'. $id .'" name="'. $id .'" style="width:'. $width .';height:'. $height .';'. $style .'">'.$value.'</textarea>';
echo '
<script src="'. RESOURCE_SITE_URL .'/kindeditor/kindeditor-min.js" charset="utf-8"></script>
<script src="'. RESOURCE_SITE_URL .'/kindeditor/lang/zh_CN.js" charset="utf-8"></script>
<script>
var KE;
KindEditor.ready(function(K) {
KE = K.create("textarea[name=\''.$id.'\']", {
items : '.$items.',
cssPath : "' . RESOURCE_SITE_URL . '/kindeditor/themes/default/default.css",
allowImageUpload : '.$upload_state.',
allowFlashUpload : false,
allowMediaUpload : false,
allowFileManager : false,
syncType:"form",
afterCreate : function() {
var self = this;
self.sync();
},
afterChange : function() {
var self = this;
self.sync();
},
afterBlur : function() {
var self = this;
self.sync();
}
});
KE.appendHtml = function(id,val) {
this.html(this.html() + val);
if (this.isCreated) {
var cmd = this.cmd;
cmd.range.selectNodeContents(cmd.doc.body).collapse(false);
cmd.select();
}
return this;
}
});
</script>
';
return true;
} /**
* 获取目录大小
*
* @param string $path 目录
* @param int $size 目录大小
* @return int 整型类型的返回结果
*/
function getDirSize($path, $size=0){
$dir = @dir($path);
if (!empty($dir->path) && !empty($dir->handle)){
while($filename = $dir->read()){
if($filename != '.' && $filename != '..'){
if (is_dir($path.DS.$filename)){
$size += getDirSize($path.DS.$filename);
}else {
$size += filesize($path.DS.$filename);
}
}
}
}
return $size ? $size : 0 ;
} /**
* 删除缓存目录下的文件或子目录文件
*
* @param string $dir 目录名或文件名
* @return boolean
*/
function delCacheFile($dir){
//防止删除cache以外的文件
if (strpos($dir,'..') !== false) return false;
$path = BASE_DATA_PATH.DS.'cache'.DS.$dir;
if (is_dir($path)){
$file_list = array();
readFileList($path,$file_list);
if (!empty($file_list)){
foreach ($file_list as $v){
if (basename($v) != 'index.html')@unlink($v);
}
}
}else{
if (basename($path) != 'index.html') @unlink($path);
}
return true;
} /**
* 获取文件列表(所有子目录文件)
*
* @param string $path 目录
* @param array $file_list 存放所有子文件的数组
* @param array $ignore_dir 需要忽略的目录或文件
* @return array 数据格式的返回结果
*/
function readFileList($path,&$file_list,$ignore_dir=array()){
$path = rtrim($path,'/');
if (is_dir($path)) {
$handle = @opendir($path);
if ($handle){
while (false !== ($dir = readdir($handle))){
if ($dir != '.' && $dir != '..'){
if (!in_array($dir,$ignore_dir)){
if (is_file($path.DS.$dir)){
$file_list[] = $path.DS.$dir;
}elseif(is_dir($path.DS.$dir)){
readFileList($path.DS.$dir,$file_list,$ignore_dir);
}
}
}
}
@closedir($handle);
// return $file_list;
}else {
return false;
}
}else {
return false;
}
} /**
* 价格格式化
*
* @param int $price
* @return string $price_format
*/
function ncPriceFormat($price) {
$price_format = number_format($price,2,'.','');
return $price_format;
} /**
* 价格格式化
*
* @param int $price
* @return string $price_format
*/
function ncPriceFormatForList($price) {
if ($price >= 10000) {
return number_format(floor($price/100)/100,2,'.','').L('ten_thousand');
} else {
return L('currency').$price;
}
} /**
* 二级域名解析
* @return int 店铺id
*/
function subdomain(){
$store_id = 0;
/**
* 获得系统配置,二级域名功能是否开启
*/
if (C('enabled_subdomain')=='1'){//开启了二级域名
$line = @explode(SUBDOMAIN_SUFFIX,$_SERVER['HTTP_HOST']);
$line = trim($line[0],'.');
if(empty($line) || strtolower($line) == 'www') return 0; $model_store = Model('store');
$store_info = $model_store->getStoreInfo(array('store_domain'=>$line));
//二级域名存在
if ($store_info['store_id'] > 0){
$store_id = $store_info['store_id'];
$_GET['store_id'] = $store_info['store_id'];
}
}
return $store_id;
} /**
* 通知邮件/通知消息 内容转换函数
*
* @param string $message 内容模板
* @param array $param 内容参数数组
* @return string 通知内容
*/
function ncReplaceText($message,$param){
if(!is_array($param))return false;
foreach ($param as $k=>$v){
$message = str_replace('{$'.$k.'}',$v,$message);
}
return $message;
} /**
* 字符串切割函数,一个字母算一个位置,一个字算2个位置
*
* @param string $string 待切割的字符串
* @param int $length 切割长度
* @param string $dot 尾缀
*/
function str_cut($string, $length, $dot = '')
{
$string = str_replace(array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', "'", '“', '”', '—', '<', '>', '·', '…'), $string);
$strlen = strlen($string);
if($strlen <= $length) return $string;
$maxi = $length - strlen($dot);
$strcut = '';
if(strtolower(CHARSET) == 'utf-8')
{
$n = $tn = $noc = 0;
while($n < $strlen)
{
$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 >= $maxi) break;
}
if($noc > $maxi) $n -= $tn;
$strcut = substr($string, 0, $n);
}
else
{
$dotlen = strlen($dot);
$maxi = $length - $dotlen;
for($i = 0; $i < $maxi; $i++)
{
$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
}
}
$strcut = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''', '<', '>'), $strcut);
return $strcut.$dot;
} /**
* unicode转为utf8
* @param string $str 待转的字符串
* @return string
*/
function unicodeToUtf8($str, $order = "little")
{
$utf8string ="";
$n=strlen($str);
for ($i=0;$i<$n ;$i++ )
{
if ($order=="little")
{
$val = str_pad(dechex(ord($str[$i+1])), 2, 0, STR_PAD_LEFT) .
str_pad(dechex(ord($str[$i])), 2, 0, STR_PAD_LEFT);
}
else
{
$val = str_pad(dechex(ord($str[$i])), 2, 0, STR_PAD_LEFT) .
str_pad(dechex(ord($str[$i+1])), 2, 0, STR_PAD_LEFT);
}
$val = intval($val,16); // 由于上次的.连接,导致$val变为字符串,这里得转回来。
$i++; // 两个字节表示一个unicode字符。
$c = "";
if($val < 0x7F)
{ // 0000-007F
$c .= chr($val);
}
elseif($val < 0x800)
{ // 0080-07F0
$c .= chr(0xC0 | ($val / 64));
$c .= chr(0x80 | ($val % 64));
}
else
{ // 0800-FFFF
$c .= chr(0xE0 | (($val / 64) / 64));
$c .= chr(0x80 | (($val / 64) % 64));
$c .= chr(0x80 | ($val % 64));
}
$utf8string .= $c;
}
/* 去除bom标记 才能使内置的iconv函数正确转换 */
if (ord(substr($utf8string,0,1)) == 0xEF && ord(substr($utf8string,1,2)) == 0xBB && ord(substr($utf8string,2,1)) == 0xBF)
{
$utf8string = substr($utf8string,3);
}
return $utf8string;
} /*
* 重写$_SERVER['REQUREST_URI']
*/
function request_uri()
{
if (isset($_SERVER['REQUEST_URI']))
{
$uri = $_SERVER['REQUEST_URI'];
}
else
{
if (isset($_SERVER['argv']))
{
$uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0];
}
else
{
$uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING'];
}
}
return $uri;
} /*
* 自定义memory_get_usage()
*
* @return 内存使用额度,如果该方法无效,返回0
*/
if(!function_exists('memory_get_usage')){
function memory_get_usage(){//目前程序不兼容5以下的版本
return 0;
}
} // 记录和统计时间(微秒)
function addUpTime($start,$end='',$dec=3) {
static $_info = array();
if(!empty($end)) { // 统计时间
if(!isset($_info[$end])) {
$_info[$end] = microtime(TRUE);
}
return number_format(($_info[$end]-$_info[$start]),$dec);
}else{ // 记录时间
$_info[$start] = microtime(TRUE);
}
} /**
* 取得系统配置信息
*
* @param string $key 取得下标值
* @return mixed
*/
function C($key){
if (strpos($key,'.')){
$key = explode('.',$key);
if (isset($key[2])){
return $GLOBALS['setting_config'][$key[0]][$key[1]][$key[2]];
}else{
return $GLOBALS['setting_config'][$key[0]][$key[1]];
}
}else{
return $GLOBALS['setting_config'][$key];
}
} /**
* 取得商品默认大小图片
*
* @param string $key 图片大小 small tiny
* @return string
*/
function defaultGoodsImage($key){
$file = str_ireplace('.', '_' . $key . '.', C('default_goods_image'));
return ATTACH_COMMON.DS.$file;
} /**
* 取得用户头像图片
*
* @param string $member_avatar
* @return string
*/
function getMemberAvatar($member_avatar){
if (empty($member_avatar)) {
return UPLOAD_SITE_URL.DS.ATTACH_COMMON.DS.C('default_user_portrait');
} else {
if (file_exists(BASE_UPLOAD_PATH.DS.ATTACH_AVATAR.DS.$member_avatar)){
return UPLOAD_SITE_URL.DS.ATTACH_AVATAR.DS.$member_avatar;
} else {
return UPLOAD_SITE_URL.DS.ATTACH_COMMON.DS.C('default_user_portrait');
} }
}
/**
* 成员头像
* @param string $member_id
* @return string
*/
function getMemberAvatarForID($id){
if(file_exists(BASE_UPLOAD_PATH.'/'.ATTACH_AVATAR.'/avatar_'.$id.'.jpg')){
return UPLOAD_SITE_URL.'/'.ATTACH_AVATAR.'/avatar_'.$id.'.jpg';
}else{
return UPLOAD_SITE_URL.'/'.ATTACH_COMMON.DS.C('default_user_portrait');
}
}
/**
* 成员头像 v3-b12-1
* @param string $member_id
* @return string
*/ function getMemberAvatarHttps($member_avatar)
{
if (empty($member_avatar)) {
return UPLOAD_SITE_URL_HTTPS . DS . ATTACH_COMMON . DS . c('default_user_portrait');
}
else if (file_exists(BASE_UPLOAD_PATH . DS . ATTACH_AVATAR . DS . $member_avatar)) {
return UPLOAD_SITE_URL_HTTPS . DS . ATTACH_AVATAR . DS . $member_avatar;
}
else {
return UPLOAD_SITE_URL_HTTPS . DS . ATTACH_COMMON . DS . c('default_user_portrait');
}
}
/**
* 取得店铺标志
*
* @param string $img 图片名
* @param string $type 查询类型 store_logo/store_avatar
* @return string
*/
function getStoreLogo($img, $type = 'store_avatar'){
if ($type == 'store_avatar') {
if (empty($img)) {
return UPLOAD_SITE_URL.DS.ATTACH_COMMON.DS.C('default_store_avatar');
} else {
return UPLOAD_SITE_URL.DS.ATTACH_STORE.DS.$img;
}
}elseif ($type == 'store_logo') {
if (empty($img)) {
return UPLOAD_SITE_URL.DS.ATTACH_COMMON.DS.C('default_store_logo');
} else {
return UPLOAD_SITE_URL.DS.ATTACH_STORE.DS.$img;
}
}
} /**
* 获取文章URL
*/
function getCMSArticleUrl($article_id) {
if(URL_MODEL) {
// 开启伪静态
return CMS_SITE_URL.DS.'article-'.$article_id.'.html';
} else {
return CMS_SITE_URL.DS.'index.php?act=article&op=article_detail&article_id='.$article_id;
}
} /**
* 获取画报URL
*/
function getCMSPictureUrl($picture_id) {
if(URL_MODEL) {
// 开启伪静态
return CMS_SITE_URL.DS.'picture-'.$picture_id.'.html';
} else {
return CMS_SITE_URL.DS.'index.php?act=picture&op=picture_detail&picture_id='.$picture_id;
}
} /**
* 获取文章图片URL
*/
function getCMSArticleImageUrl($image_path, $image_name, $type='list') {
if(empty($image_name)) {
return UPLOAD_SITE_URL.DS.ATTACH_CMS.DS.'no_cover.png';
} else {
$image_array = unserialize($image_name);
if(!empty($image_array['name'])) {
$image_name = $image_array['name'];
}
if(!empty($image_array['path'])) {
$image_path = $image_array['path'];
}
$ext_array = array('list','max');
$file_path = ATTACH_CMS.DS.'article'.DS.$image_path.DS.str_ireplace('.', '_'.$type.'.', $image_name);
if(file_exists(BASE_PATH.DS.$file_name)) {
$image_name = UPLOAD_SITE_URL.DS.$file_path;
} else {
$image_name = UPLOAD_SITE_URL.DS.ATTACH_CMS.DS.'no_cover.png';
}
return $image_name;
}
} /**
* 获取文章图片URL
*/
function getCMSImageName($image_name_string) {
$image_array = unserialize($image_name_string);
if(!empty($image_array['name'])) {
$image_name = $image_array['name'];
} else {
$image_name = $image_name_string;
}
return $image_name;
} /**
* 获取CMS专题图片
*/
function getCMSSpecialImageUrl($image_name='') {
return UPLOAD_SITE_URL.DS.ATTACH_CMS.DS.'special'.DS.$image_name;
} /**
* 获取CMS专题路径
*/
function getCMSSpecialImagePath($image_name='') {
return BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.'special'.DS.$image_name;
} /**
* 获取CMS首页图片
*/
function getCMSIndexImageUrl($image_name='') {
return UPLOAD_SITE_URL.DS.ATTACH_CMS.DS.'index'.DS.$image_name;
} /**
* 获取CMS首页图片路径
*/
function getCMSIndexImagePath($image_name='') {
return BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.'index'.DS.$image_name;
} /**
* 获取CMS专题Url
*/
function getCMSSpecialUrl($special_id) {
return CMS_SITE_URL.DS.'index.php?act=special&op=special_detail&special_id='.$special_id;
} /**
* 获取商城专题Url
*/
function getShopSpecialUrl($special_id) {
return SHOP_SITE_URL.DS.'index.php?act=special&op=special_detail&special_id='.$special_id;
} /**
* 获取CMS专题静态文件
*/
function getCMSSpecialHtml($special_id) {
$special_file = BASE_UPLOAD_PATH.DS.ATTACH_CMS.DS.'special_html'.DS.md5('special'.intval($special_id)).'.html';
if(is_file($special_file)) {
return $special_file;
} else {
return false;
}
} /**
* 获取微商城个人秀图片地址
*/
function getMicroshopPersonalImageUrl($personal_info,$type=''){
$ext_array = array('list','tiny');
$personal_image_array = array();
$personal_image_list = explode(',',$personal_info['commend_image']);
if(!empty($personal_image_list)){
foreach ($personal_image_list as $value) {
if(!empty($type) && in_array($type,$ext_array)) {
$file_name = str_replace('.', '_'.$type.'.', $value);
} else {
$file_name = $value;
}
$file_path = $personal_info['commend_member_id'].DS.$file_name;
if(is_file(BASE_UPLOAD_PATH.DS.ATTACH_MICROSHOP.DS.$file_path)) {
$personal_image_array[] = UPLOAD_SITE_URL.DS.ATTACH_MICROSHOP.DS.$file_path;
} else {
$personal_image_array[] = getMicroshopDefaultImage();
}
}
} else {
$personal_image_array[] = getMicroshopDefaultImage();
}
return $personal_image_array; } function getMicroshopDefaultImage() {
return UPLOAD_SITE_URL.'/'.defaultGoodsImage('240');
} /**
* 获取开店申请图片
*/
function getStoreJoininImageUrl($image_name='') {
return UPLOAD_SITE_URL.DS.ATTACH_STORE_JOININ.DS.$image_name;
} /**
* 获取开店装修图片地址
*/
function getStoreDecorationImageUrl($image_name = '', $store_id = null) {
if(empty($store_id)) {
$image_name_array = explode('_', $image_name);
$store_id = $image_name_array[0];
} $image_path = DS . ATTACH_STORE_DECORATION . DS . $store_id . DS . $image_name;
if(is_file(BASE_UPLOAD_PATH . $image_path)) {
return UPLOAD_SITE_URL . $image_path;
} else {
return '';
}
} /**
* 获取运单图片地址
*/
function getWaybillImageUrl($image_name = '') {
$image_path = DS . ATTACH_WAYBILL . DS . $image_name;
if(is_file(BASE_UPLOAD_PATH . $image_path)) {
return UPLOAD_SITE_URL . $image_path;
} else {
return UPLOAD_SITE_URL.'/'.defaultGoodsImage('240');
}
} /**
* 获取运单图片地址
*/
function getMbSpecialImageUrl($image_name = '') {
$name_array = explode('_', $image_name);
if(count($name_array) == 2) {
$image_path = DS . ATTACH_MOBILE . DS . 'special' . DS . $name_array[0] . DS . $image_name;
} else {
$image_path = DS . ATTACH_MOBILE . DS . 'special' . DS . $image_name;
}
if(is_file(BASE_UPLOAD_PATH . $image_path)) {
return UPLOAD_SITE_URL . $image_path;
} else {
return UPLOAD_SITE_URL.'/'.defaultGoodsImage('240');
}
} /**
* 加载文件
*
* 使用require_once函数,只适用于加载框架内类库文件
* 如果文件名中包含"_"使用"#"代替
*
* @example import('cache'); //require_once(BASE_PATH.'/framework/libraries/cache.php');
* @example import('libraries.cache'); //require_once(BASE_PATH.'/framework/libraries/cache.php');
* @example import('function.core'); //require_once(BASE_PATH.'/framework/function/core.php');
* @example import('.control.adv') //require_once(BASE_PATH.'/control/adv.php');
*
* @param 要加载的文件 $libname
* @param 文件扩展名 $file_ext
*/
function import($libname,$file_ext='.php'){
//替换为目录符号/
if (strstr($libname,'.')){
$path = str_replace('.','/',$libname);
}else{
$path = 'libraries/'.$libname;
}
// 基准目录,如果是*目录
if(substr($libname,0,1) == '.'){
$base_dir = BASE_CORE_PATH.'/';
$path = ltrim(str_replace('libraries/','',$path),'/');
}else{
$base_dir = BASE_CORE_PATH.'/framework/';
}
//如果文件名中含有.使用#代替
if (strstr($path,'#')){
$path = str_replace('#','.',$path);
}
//返回安全路径
if(preg_match('/^[\w\d\/_.]+$/i', $path)){
$file = realpath($base_dir.$path.$file_ext);
}else{
$file = false;
}
if (!$file){
exit($path.$file_ext.' isn\'t exists!');
}else{
require_once($file);
} } /**
* 取得随机数
*
* @param int $length 生成随机数的长度
* @param int $numeric 是否只产生数字随机数 1是0否
* @return string
*/
function random($length, $numeric = 0) {
$seed = base_convert(md5(microtime().$_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35);
$seed = $numeric ? (str_replace('0', '', $seed).'012340567890') : ($seed.'zZ'.strtoupper($seed));
$hash = '';
$max = strlen($seed) - 1;
for($i = 0; $i < $length; $i++) {
$hash .= $seed{mt_rand(0, $max)};
}
return $hash;
} /**
* 返回模板文件所在完整目录
*
* @param str $tplpath
* @return string
*/
function template($tplpath){
if (strpos($tplpath,':') !== false){
$tpltmp = explode(':',$tplpath);
return BASE_DATA_PATH.'/'.$tpltmp[0].'/tpl/'.$tpltmp[1].'.php';
}else{
return BASE_PATH.'/templates/'.TPL_NAME.'/'.$tplpath.'.php';
}
} /**
* 检测FORM是否提交
* @param $check_token 是否验证token
* @param $check_captcha 是否验证验证码
* @param $return_type 'alert','num'
* @return boolean
*/
function chksubmit($check_token = false, $check_captcha = false, $return_type = 'alert'){
$submit = isset($_POST['form_submit']) ? $_POST['form_submit'] : $_GET['form_submit'];
if ($submit != 'ok') return false;
if ($check_token && !Security::checkToken()){
if ($return_type == 'alert'){
showDialog('Token error!');
}else{
return -11;
}
}
if ($check_captcha){
if (!checkSeccode($_POST['nchash'],$_POST['captcha'])){
setNcCookie('seccode'.$_POST['nchash'],'',-3600);
if ($return_type == 'alert'){
showDialog('验证码错误!');
}else{
return -12;
}
}
setNcCookie('seccode'.$_POST['nchash'],'',-3600);
}
return true;
} /**
* sns表情标示符替换为html
*/
function parsesmiles($message) {
$smilescache_file = BASE_DATA_PATH.DS.'smilies'.DS.'smilies.php';
if (file_exists($smilescache_file)){
include $smilescache_file;
if (strtoupper(CHARSET) == 'GBK') {
$smilies_array = Language::getGBK($smilies_array);
}
if(!empty($smilies_array) && is_array($smilies_array)) {
$imagesurl = RESOURCE_SITE_URL.DS.'js'.DS.'smilies'.DS.'images'.DS;
$replace_arr = array();
foreach($smilies_array['replacearray'] AS $key => $smiley) {
$replace_arr[$key] = '<img src="'.$imagesurl.$smiley['imagename'].'" title="'.$smiley['desc'].'" border="0" alt="'.$imagesurl.$smiley['desc'].'" />';
} $message = preg_replace($smilies_array['searcharray'], $replace_arr, $message);
}
}
return $message;
} /**
* 输出validate的验证信息
*
* @param array/string $error
*/
function showValidateError($error){
if (!empty($_GET['inajax'])){
foreach (explode('<br/>',$error) as $v) {
if (trim($v != '')){
showDialog($v,'','error','',3);
}
}
}else{
showDialog($error,'','error','',3);
}
} /**
* 延时加载分页功能,判断是否有更多连接和limitstart值和经过验证修改的$delay_eachnum值
* @param int $delay_eachnum 延时分页每页显示的条数
* @param int $delay_page 延时分页当前页数
* @param int $count 总记录数
* @param bool $ispage 是否在分页模式中实现延时分页(前台显示的两种不同效果)
* @param int $page_nowpage 分页当前页数
* @param int $page_eachnum 分页每页显示条数
* @param int $page_limitstart 分页初始limit值
* @return array array('hasmore'=>'是否显示更多连接','limitstart'=>'加载的limit开始值','delay_eachnum'=>'经过验证修改的$delay_eachnum值');
*/
function lazypage($delay_eachnum,$delay_page,$count,$ispage=false,$page_nowpage=1,$page_eachnum=1,$page_limitstart=1){
//是否有多余
$hasmore = true;
$limitstart = 0;
if ($ispage == true){
if ($delay_eachnum < $page_eachnum){//当延时加载每页条数小于分页的每页条数时候实现延时加载,否则按照普通分页程序流程处理
$page_totlepage = ceil($count/$page_eachnum);
//计算limit的开始值
$limitstart = $page_limitstart + ($delay_page-1)*$delay_eachnum;
if ($page_totlepage > $page_nowpage){//当前不为最后一页
if ($delay_page >= $page_eachnum/$delay_eachnum){
$hasmore = false;
}
//判断如果分页的每页条数与延时加载每页的条数不能整除的处理
if ($hasmore == false && $page_eachnum%$delay_eachnum >0){
$delay_eachnum = $page_eachnum%$delay_eachnum;
}
}else {//当前最后一页
$showcount = ($page_totlepage-1)*$page_eachnum+$delay_eachnum*$delay_page;//已经显示的记录总数
if ($count <= $showcount){
$hasmore = false;
}
}
}else {
$hasmore = false;
}
}else {
if ($count <= $delay_page*$delay_eachnum){
$hasmore = false;
}
//计算limit的开始值
$limitstart = ($delay_page-1)*$delay_eachnum;
} return array('hasmore'=>$hasmore,'limitstart'=>$limitstart,'delay_eachnum'=>$delay_eachnum);
} /**
* 文件数据读取和保存 字符串、数组
*
* @param string $name 文件名称(不含扩展名)
* @param mixed $value 待写入文件的内容
* @param string $path 写入cache的目录
* @param string $ext 文件扩展名
* @return mixed
*/
function F($name, $value = null, $path = 'cache', $ext = '.php') {
if (strtolower(substr($path,0,5)) == 'cache'){
$path = 'data/'.$path;
}
static $_cache = array();
if (isset($_cache[$name.$path])) return $_cache[$name.$path];
$filename = BASE_ROOT_PATH.'/'.$path.'/'.$name.$ext;
if (!is_null($value)) {
$dir = dirname($filename);
if (!is_dir($dir)) mkdir($dir);
return write_file($filename,$value);
} if (is_file($filename)) {
$_cache[$name.$path] = $value = include $filename;
} else {
$value = false;
}
return $value;
} /**
* 内容写入文件
*
* @param string $filepath 待写入内容的文件路径
* @param string/array $data 待写入的内容
* @param string $mode 写入模式,如果是追加,可传入“append”
* @return bool
*/
function write_file($filepath, $data, $mode = null)
{
if (!is_array($data) && !is_scalar($data)) {
return false;
} $data = var_export($data, true); $data = "<?php defined('InShopNC') or exit('Access Invalid!'); return ".$data.";";
$mode = $mode == 'append' ? FILE_APPEND : null;
if (false === file_put_contents($filepath,($data),$mode)){
return false;
}else{
return true;
}
} /**
* 循环创建目录
*
* @param string $dir 待创建的目录
* @param $mode 权限
* @return boolean
*/
function mk_dir($dir, $mode = '0777') {
if (is_dir($dir) || @mkdir($dir, $mode))
return true;
if (!mk_dir(dirname($dir), $mode))
return false;
return @mkdir($dir, $mode);
} /**
* 封装分页操作到函数,方便调用
*
* @param string $cmd 命令类型
* @param mixed $arg 参数
* @return mixed
*/
function pagecmd($cmd ='', $arg = ''){
if (!class_exists('page')) import('page');
static $page;
if ($page == null){
$page = new Page();
} switch (strtolower($cmd)) {
case 'seteachnum': $page->setEachNum($arg);break;
case 'settotalnum': $page->setTotalNum($arg);break;
case 'setstyle': $page->setStyle($arg);break;
case 'show': return $page->show($arg);break;
case 'obj': return $page;break;
case 'gettotalnum': return $page->getTotalNum();break;
case 'gettotalpage': return $page->getTotalPage();break;
default: break;
}
} /**
* 抛出异常
*
* @param string $error 异常信息
*/
function throw_exception($error){
if (!defined('IGNORE_EXCEPTION')){
showMessage($error,'','exception');
}else{
exit();
}
} /**
* 输出错误信息
*
* @param string $error 错误信息
*/
function halt($error){
showMessage($error,'','exception');
} /**
* 去除代码中的空白和注释
*
* @param string $content 待压缩的内容
* @return string
*/
function compress_code($content) {
$stripStr = '';
//分析php源码
$tokens = token_get_all($content);
$last_space = false;
for ($i = 0, $j = count($tokens); $i < $j; $i++) {
if (is_string($tokens[$i])) {
$last_space = false;
$stripStr .= $tokens[$i];
} else {
switch ($tokens[$i][0]) {
case T_COMMENT: //过滤各种PHP注释
case T_DOC_COMMENT:
break;
case T_WHITESPACE: //过滤空格
if (!$last_space) {
$stripStr .= ' ';
$last_space = true;
}
break;
default:
$last_space = false;
$stripStr .= $tokens[$i][1];
}
}
}
return $stripStr;
} /**
* 取得对象实例
*
* @param object $class
* @param string $method
* @param array $args
* @return object
*/
function get_obj_instance($class, $method='', $args = array()){
static $_cache = array();
$key = $class.$method.(empty($args) ? null : md5(serialize($args)));
if (isset($_cache[$key])){
return $_cache[$key];
}else{
if (class_exists($class)){
$obj = new $class;
if (method_exists($obj,$method)){
if (empty($args)){
$_cache[$key] = $obj->$method();
}else{
$_cache[$key] = call_user_func_array(array(&$obj, $method), $args);
}
}else{
$_cache[$key] = $obj;
}
return $_cache[$key];
}else{
throw_exception('Class '.$class.' isn\'t exists!');
}
}
} /**
* 返回以原数组某个值为下标的新数据
*
* @param array $array
* @param string $key
* @param int $type 1一维数组2二维数组
* @return array
*/
function array_under_reset($array, $key, $type=1){
if (is_array($array)){
$tmp = array();
foreach ($array as $v) {
if ($type === 1){
$tmp[$v[$key]] = $v;
}elseif($type === 2){
$tmp[$v[$key]][] = $v;
}
}
return $tmp;
}else{
return $array;
}
} /**
* KV缓存 读
*
* @param string $key 缓存名称
* @param boolean $callback 缓存读取失败时是否使用回调 true代表使用cache.model中预定义的缓存项 默认不使用回调
* @param callable $callback 传递非boolean值时 通过is_callable进行判断 失败抛出异常 成功则将$key作为参数进行回调
* @return mixed
*/
function rkcache($key, $callback = false)
{
if (C('cache_open')) {
$cacher = Cache::getInstance('cacheredis');
} else {
$cacher = Cache::getInstance('file', null);
}
if (!$cacher) {
throw new Exception('Cannot fetch cache object!');
} $value = $cacher->get($key); if ($value === false && $callback !== false) {
if ($callback === true) {
$callback = array(Model('cache'), 'call');
} if (!is_callable($callback)) {
throw new Exception('Invalid rkcache callback!');
} $value = call_user_func($callback, $key);
wkcache($key, $value);
} return $value;
} /**
* KV缓存 写
*
* @param string $key 缓存名称
* @param mixed $value 缓存数据 若设为否 则下次读取该缓存时会触发回调(如果有)
* @param int $expire 缓存时间 单位秒 null代表不过期
* @return boolean
*/
function wkcache($key, $value, $expire = null)
{
if (C('cache_open')) {
$cacher = Cache::getInstance('cacheredis');
} else {
$cacher = Cache::getInstance('file', null);
}
if (!$cacher) {
throw new Exception('Cannot fetch cache object!');
} return $cacher->set($key, $value, null, $expire);
}
/**
* KV缓存 删
*
* @param string $key 缓存名称
* @return boolean
*/
function dkcache($key)
{
if (C('cache_open')) {
$cacher = Cache::getInstance('cacheredis');
} else {
$cacher = Cache::getInstance('file', null);
}
if (!$cacher) {
throw new Exception('Cannot fetch cache object!');
} return $cacher->rm($key);
} /**
* 读取缓存信息
*
* @param string $key 要取得缓存键
* @param string $prefix 键值前缀
* @param string $fields 所需要的字段
* @return array/bool
*/
function rcache($key = null, $prefix = '', $fields = '*'){
if ($key===null || !C('cache_open')) return array();
$ins = Cache::getInstance('cacheredis');
$cache_info = $ins->hget($key,$prefix,$fields);
if ($cache_info === false) {
//取单个字段且未被缓存
$data = array();
} elseif (is_array($cache_info)) {
//如果有一个键值为false(即未缓存),则整个函数返回空,让系统重新生成全部缓存
$data = $cache_info;
foreach ($cache_info as $k => $v) {
if ($v === false) {
$data = array();break;
}
}
} else {
//string 取单个字段且被缓存
$data = array($fields => $cache_info);
}
// 验证缓存是否过期
if (isset($data['cache_expiration_time']) && $data['cache_expiration_time'] < TIMESTAMP) {
$data = array();
}
return $data;
} /**
* 写入缓存
*
* @param string $key 缓存键值
* @param array $data 缓存数据
* @param string $prefix 键值前缀
* @param int $period 缓存周期 单位分,0为永久缓存
* @return bool 返回值
*/
function wcache($key = null, $data = array(), $prefix, $period = 0){
if ($key===null || !C('cache_open') || !is_array($data)) return;
$period = intval($period);
if ($period != 0) {
$data['cache_expiration_time'] = TIMESTAMP + $period * 60;
}
$ins = Cache::getInstance('cacheredis');
$ins->hset($key, $prefix, $data);
$cache_info = $ins->hget($key,$prefix);
return true;
} /**
* 删除缓存
* @param string $key 缓存键值
* @param string $prefix 键值前缀
* @return boolean
*/
function dcache($key = null, $prefix = ''){
if ($key===null || !C('cache_open')) return true;
$ins = Cache::getInstance('cacheredis');
return $ins->hdel($key, $prefix);
} /**
* 调用推荐位
*
* @param int $rec_id 推荐位ID
* @return string 推荐位内容
*/
function rec($rec_id = null){
import('function.rec_position');
return rec_position($rec_id);
} /**
* 快速调用语言包
*
* @param string $key
* @return string
*/
function L($key = ''){
if (class_exists('Language')){
if (strpos($key,',') !== false){
$tmp = explode(',',$key);
$str = Language::get($tmp[0]).Language::get($tmp[1]);
return isset($tmp[2])? $str.Language::get($tmp[2]) : $str;
}else{
return Language::get($key);
}
}else{
return null;
}
} /**
* 加载完成业务方法的文件
*
* @param string $filename
* @param string $file_ext
*/
function loadfunc($filename, $file_ext = '.php'){
if(preg_match('/^[\w\d\/_.]+$/i', $filename.$file_ext)){
$file = realpath(BASE_PATH.'/framework/function/'.$filename.$file_ext);
}else{
$file = false;
}
if (!$file){
exit($filename.$file_ext.' isn\'t exists!');
}else{
require_once($file);
}
} /**
* 实例化类
*
* @param string $model_name 模型名称
* @return obj 对象形式的返回结果
*/
function nc_class($classname = null){
static $_cache = array();
if (!is_null($classname) && isset($_cache[$classname])) return $_cache[$classname];
$file_name = BASE_PATH.'/framework/libraries/'.$classname.'.class.php';
$newname = $classname.'Class';
if (file_exists($file_name)){
require_once($file_name);
if (class_exists($newname)){
return $_cache[$classname] = new $newname();
}
}
throw_exception('Class Error: Class '.$classname.' is not exists!');
} /**
* 加载广告
*
* @param $ap_id 广告位ID
* @param $type 广告返回类型 html,js
*/
function loadadv($ap_id = null, $type = 'html'){
if (!is_numeric($ap_id)) return false;
if (!function_exists('advshow')) import('function.adv');
return advshow($ap_id,$type);
} /**
* 格式化ubb标签
*
* @param string $theme_content/$reply_content 话题内容/回复内容
* @return string
*/
function ubb($ubb){
$ubb = str_replace(array(
'[B]', '[/B]', '[I]', '[/I]', '[U]', '[/U]', '[IMG]', '[/IMG]', '[/FONT]', '[/FONT-SIZE]', '[/FONT-COLOR]'
), array(
'<b>', '</b>', '<i>', '</i>', '<u>', '</u>', '<img class="pic" src="', '"/>', '</span>', '</span>', '</span>'
), preg_replace(array(
"/\[URL=(.*)\](.*)\[\/URL\]/iU",
"/\[FONT=([A-Za-z ]*)\]/iU",
"/\[FONT-SIZE=([0-9]*)\]/iU",
"/\[FONT-COLOR=([A-Za-z0-9]*)\]/iU",
"/\[SMILIER=([A-Za-z_]*)\/\]/iU",
"/\[FLASH\](.*)\[\/FLASH\]/iU",
"/\\n/i"
), array(
"<a href=\"$1\" target=\"_blank\">$2</a>",
"<span style=\"font-family:$1\">",
"<span style=\"font-size:$1px\">",
"<span style=\"color:#$1\">",
"<img src=\"".CIRCLE_SITE_URL.'/templates/'.TPL_CIRCLE_NAME."/images/smilier/$1.png\">",
"<embed src=\"$1\" type=\"application/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" wmode=\"opaque\" width=\"480\" height=\"400\"></embed>",
"<br />"
), $ubb));
return $ubb;
}
/**
* 去掉ubb标签
*
* @param string $theme_content/$reply_content 话题内容/回复内容
* @return string
*/
function removeUBBTag($ubb){
$ubb = str_replace(array(
'[B]', '[/B]', '[I]', '[/I]', '[U]', '[/U]', '[/FONT]', '[/FONT-SIZE]', '[/FONT-COLOR]'
), array(
'', '', '', '', '', '', '', '', ''
), preg_replace(array(
"/\[URL=(.*)\](.*)\[\/URL\]/iU",
"/\[FONT=([A-Za-z ]*)\]/iU",
"/\[FONT-SIZE=([0-9]*)\]/iU",
"/\[FONT-COLOR=([A-Za-z0-9]*)\]/iU",
"/\[SMILIER=([A-Za-z_]*)\/\]/iU",
"/\[IMG\](.*)\[\/IMG\]/iU",
"/\[FLASH\](.*)\[\/FLASH\]/iU",
"<img class='pi' src=\"$1\"/>",
), array(
"$2",
"",
"",
"",
"",
"",
"",
""
), $ubb));
return $ubb;
} /**
* 话题图片绝对路径
*
* @param $param string 文件名称
* @return string
*/
function themeImagePath($param){
return BASE_UPLOAD_PATH.'/'.ATTACH_CIRCLE.'/theme/'.$param;
}
/**
* 话题图片url
*
* @param $param string
* @return string
*/
function themeImageUrl($param){
return UPLOAD_SITE_URL.'/'.ATTACH_CIRCLE.'/theme/'.$param;
}
/**
* 圈子logo
*
* @param $param string 圈子id
* @return string
*/
function circleLogo($id){
if(file_exists(BASE_UPLOAD_PATH.'/'.ATTACH_CIRCLE.'/group/'.$id.'.jpg')){
return UPLOAD_SITE_URL.'/'.ATTACH_CIRCLE.'/group/'.$id.'.jpg';
}else{
return UPLOAD_SITE_URL.'/'.ATTACH_CIRCLE.'/default_group_logo.gif';
}
}
/**
* sns 来自
* @param $param string $trace_from
* @return string
*/
function snsShareFrom($sign) {
switch ($sign) {
case '1' :
case '2' :
return L('sns_from') . '<a target="_black" href="' . SHOP_SITE_URL . '">' . L('sns_shop') . '</a>';
break;
case '3' :
return L('sns_from') . '<a target="_black" href="' . MICROSHOP_SITE_URL . '">' . L('nc_modules_microshop') . '</a>';
break;
case '4' :
return L('sns_from') . '<a target="_black" href="' . CMS_SITE_URL . '">CMS</a>';
break;
case '5' :
return L('sns_from') . '<a target="_black" href="' . CIRCLE_SITE_URL . '">' . L('nc_circle') . '</a>';
break;
}
} /**
* 输出聊天信息
*
* @return string
*/
function getChat($layout){
if (!C('node_chat') || !file_exists(BASE_CORE_PATH.'/framework/libraries/chat.php')) return '';
if (!class_exists('Chat')) import('libraries.chat');
return Chat::getChatHtml($layout);
} /**
* 拼接动态URL,参数需要小写
*
* 调用示例
*
* 若指向网站首页,可以传空:
* url() => 表示act和op均为index,返回当前站点网址
*
* url('search,'index','array('cate_id'=>2)); 实际指向 index.php?act=search&op=index&cate_id=2
* 传递数组参数时,若act(或op)值为index,则可以省略
* 上面示例等同于
* url('search','',array('act'=>'search','cate_id'=>2));
*
* @param string $act control文件名
* @param string $op op方法名
* @param array $args URL其它参数
* @param boolean $model 默认取当前系统配置
* @param string $site_url 生成链接的网址,默认取当前网址
* @return string
*/
function url($act = '', $op = '', $args = array(), $model = false, $site_url = ''){
//伪静态文件扩展名
$ext = '.html';
//入口文件名
$file = 'index.php';
// $site_url = empty($site_url) ? SHOP_SITE_URL : $site_url;
$act = trim($act);
$op = trim($op);
$args = !is_array($args) ? array() : $args;
//定义变量存放返回url
$url_string = '';
if (empty($act) && empty($op) && empty($args)) {
return $site_url;
}
$act = !empty($act) ? $act : 'index';
$op = !empty($op) ? $op : 'index'; $model = $model ? URL_MODEL : $model; if ($model) {
//伪静态模式
$url_perfix = "{$act}-{$op}";
if (!empty($args)){
$url_perfix .= '-';
}
$url_string = $url_perfix.http_build_query($args,'','-').$ext;
$url_string = str_replace('=','-',$url_string);
}else {
//默认路由模式
$url_perfix = "act={$act}&op={$op}";
if (!empty($args)){
$url_perfix .= '&';
}
$url_string = $file.'?'.$url_perfix.http_build_query($args);
}
//将商品、店铺、分类、品牌、文章自动生成的伪静态URL使用短URL代替
$reg_match_from = array(
'/^category-index\.html$/',
'/^channel-index-id-(\\d+)\\.html$/',
'/^goods-index-goods_id-(\\d+)\\.html$/',
'/^show_store-index-store_id-(\d+)\.html$/',
'/^show_store-goods_all-store_id-(\d+)-stc_id-(\d+)-key-([0-5])-order-([0-2])-curpage-(\d+)\.html$/',
'/^article-show-article_id-(\d+)\.html$/',
'/^article-article-ac_id-(\d+)\.html$/',
'/^document-index-code-([a-z_]+)\.html$/',
'/^search-index-cate_id-(\d+)-b_id-([0-9_]+)-a_id-([0-9_]+)-key-([0-3])-order-([0-2])-type-([0-1])-gift-([0-1])-area_id-(\d+)-curpage-(\d+)\.html$/',
'/^brand-list-brand-(\d+)-key-([0-3])-order-([0-2])-type-([0-1])-gift-([0-1])-area_id-(\d+)-curpage-(\d+)\.html$/',
'/^brand-index\.html$/',
'/^promotion-index\\.html$/',
'/^promotion-index-gc_id-(\\d+)\\.html$/',
'/^show_groupbuy-index\.html$/',
'/^show_groupbuy-groupbuy_detail-group_id-(\d+)\.html$/', '/^show_groupbuy-groupbuy_list-class-(\d+)-s_class-(\d+)-groupbuy_price-(\d+)-groupbuy_order_key-(\d+)-groupbuy_order-(\d+)-curpage-(\d+)\.html$/',
'/^show_groupbuy-groupbuy_soon-class-(\d+)-s_class-(\d+)-groupbuy_price-(\d+)-groupbuy_order_key-(\d+)-groupbuy_order-(\d+)-curpage-(\d+)\.html$/',
'/^show_groupbuy-groupbuy_history-class-(\d+)-s_class-(\d+)-groupbuy_price-(\d+)-groupbuy_order_key-(\d+)-groupbuy_order-(\d+)-curpage-(\d+)\.html$/', '/^show_groupbuy-vr_groupbuy_list-vr_class-(\d+)-vr_s_class-(\d+)-vr_area-(\d+)-vr_mall-(\d+)-groupbuy_price-(\d+)-groupbuy_order_key-(\d+)-groupbuy_order-(\d+)-curpage-(\d+)\.html$/',
'/^show_groupbuy-vr_groupbuy_soon-vr_class-(\d+)-vr_s_class-(\d+)-vr_area-(\d+)-vr_mall-(\d+)-groupbuy_price-(\d+)-groupbuy_order_key-(\d+)-groupbuy_order-(\d+)-curpage-(\d+)\.html$/',
'/^show_groupbuy-vr_groupbuy_history-vr_class-(\d+)-vr_s_class-(\d+)-vr_area-(\d+)-vr_mall-(\d+)-groupbuy_price-(\d+)-groupbuy_order_key-(\d+)-groupbuy_order-(\d+)-curpage-(\d+)\.html$/', '/^pointshop-index.html$/',
'/^pointprod-plist.html$/',
'/^pointprod-pinfo-id-(\d+).html$/',
'/^pointvoucher-index.html$/',
'/^pointgrade-index.html$/',
'/^pointgrade-exppointlog-curpage-(\d+).html$/',
'/^goods-comments_list-goods_id-(\d+)-type-([0-3])-curpage-(\d+).html$/',
'/^special-special_list.html$/',
'/^special-special_detail-special_id-(\d+).html$/'
);
$reg_match_to = array(
'category.html',
'channel-\\1.html',
'item-\\1.html',
'shop-\\1.html',
'shop_view-\\1-\\2-\\3-\\4-\\5.html',
'article-\\1.html',
'article_cate-\\1.html',
'document-\\1.html',
'cate-\\1-\\2-\\3-\\4-\\5-\\6-\\7-\\8-\\9.html',
'brand-\\1-\\2-\\3-\\4-\\5-\\6-\\7.html',
'brand.html',
'promotion.html',
'promotion-\\1.html',
'groupbuy.html',
'groupbuy_detail-\\1.html', 'groupbuy_list-\\1-\\2-\\3-\\4-\\5-\\6.html',
'groupbuy_soon-\\1-\\2-\\3-\\4-\\5-\\6.html',
'groupbuy_history-\\1-\\2-\\3-\\4-\\5-\\6.html', 'vr_groupbuy_list-\\1-\\2-\\3-\\4-\\5-\\6-\\7-\\8.html',
'vr_groupbuy_soon-\\1-\\2-\\3-\\4-\\5-\\6-\\7-\\8.html',
'vr_groupbuy_history-\\1-\\2-\\3-\\4-\\5-\\6-\\7-\\8.html', 'integral.html',
'integral_list.html',
'integral_item-\\1.html',
'voucher.html',
'grade.html',
'explog-\\1.html',
'comments-\\1-\\2-\\3.html',
'special.html',
'special-\\1.html'
);
$url_string = preg_replace($reg_match_from,$reg_match_to,$url_string);
return rtrim($site_url,'/').'/'.$url_string;
} /**
* 商城会员中心使用的URL链接函数,强制使用动态传参数模式
*
* @param string $act control文件名
* @param string $op op方法名
* @param array $args URL其它参数
* @param string $store_domian 店铺二级域名
* @return string
*/
function urlShop($act = '', $op = '', $args = array(), $store_domain = ''){ // 如何使自营店则返回javascript:; // if ($act == 'show_store' && $op != 'goods_all') {
// static $ownShopIds = null;
// if ($ownShopIds === null) {
// $ownShopIds = Model('store')->getOwnShopIds();
// }
// if (isset($args['store_id']) && in_array($args['store_id'], $ownShopIds)) {
// return 'javascript:;';
// }
// } // 开启店铺二级域名
if (intval(C('enabled_subdomain')) == 1 && !empty($store_domain)){
return 'http://'.$store_domain.'.'.SUBDOMAIN_SUFFIX.'/';
} // 默认标志为不开启伪静态
$rewrite_flag = false; // 如果平台开启伪静态开关,并且为伪静态模块,修改标志为开启伪静态
$rewrite_item = array(
'category:index',
'channel:index',
'goods:index',
'goods:comments_list',
'search:index',
'show_store:index',
'show_store:goods_all',
'article:show',
'article:article',
'document:index',
'brand:list',
'brand:index',
'promotion:index',
'show_groupbuy:index',
'show_groupbuy:groupbuy_detail',
'show_groupbuy:groupbuy_list',
'show_groupbuy:groupbuy_soon',
'show_groupbuy:groupbuy_history',
'show_groupbuy:vr_groupbuy_list',
'show_groupbuy:vr_groupbuy_soon',
'show_groupbuy:vr_groupbuy_history',
'pointshop:index',
'pointvoucher:index',
'pointprod:pinfo',
'pointprod:plist',
'pointgrade:index',
'pointgrade:exppointlog',
'store_snshome:index',
'special:special_list',
'special:special_detail',
);
if(URL_MODEL && in_array($act.':'.$op, $rewrite_item)) {
$rewrite_flag = true;
$tpl_args = array(); // url参数临时数组
switch ($act.':'.$op) {
case 'search:index':
if (!empty($args['keyword'])) {
$rewrite_flag = false;
break;
}
$tpl_args['cate_id'] = empty($args['cate_id']) ? 0 : $args['cate_id'];
$tpl_args['b_id'] = empty($args['b_id']) || intval($args['b_id']) == 0 ? 0 : $args['b_id'];
$tpl_args['a_id'] = empty($args['a_id']) || intval($args['a_id']) == 0 ? 0 : $args['a_id'];
$tpl_args['key'] = empty($args['key']) ? 0 : $args['key'];
$tpl_args['order'] = empty($args['order']) ? 0 : $args['order'];
$tpl_args['type'] = empty($args['type']) ? 0 : $args['type'];
$tpl_args['gift'] = empty($args['gift']) ? 0 : $args['gift'];
$tpl_args['area_id'] = empty($args['area_id']) ? 0 : $args['area_id'];
$tpl_args['curpage'] = empty($args['curpage']) ? 0 : $args['curpage'];
$args = $tpl_args;
break;
case 'show_store:goods_all':
if (isset($args['inkeyword'])) {
$rewrite_flag = false;
break;
}
$tpl_args['store_id'] = empty($args['store_id']) ? 0 : $args['store_id'];
$tpl_args['stc_id'] = empty($args['stc_id']) ? 0 : $args['stc_id'];
$tpl_args['key'] = empty($args['key']) ? 0 : $args['key'];
$tpl_args['order'] = empty($args['order']) ? 0 : $args['order'];
$tpl_args['curpage'] = empty($args['curpage']) ? 0 : $args['curpage'];
$args = $tpl_args;
break;
case 'brand:list':
$tpl_args['brand'] = empty($args['brand']) ? 0 : $args['brand'];
$tpl_args['key'] = empty($args['key']) ? 0 : $args['key'];
$tpl_args['order'] = empty($args['order']) ? 0 : $args['order'];
$tpl_args['type'] = empty($args['type']) ? 0 : $args['type'];
$tpl_args['gift'] = empty($args['gift']) ? 0 : $args['gift'];
$tpl_args['area_id'] = empty($args['area_id']) ? 0 : $args['area_id'];
$tpl_args['curpage'] = empty($args['curpage']) ? 0 : $args['curpage'];
$args = $tpl_args;
break; case 'show_groupbuy:index':
case 'show_groupbuy:groupbuy_detail':
break; case 'show_groupbuy:groupbuy_list':
case 'show_groupbuy:groupbuy_soon':
case 'show_groupbuy:groupbuy_history':
$tpl_args['class'] = empty($args['class']) ? 0 : $args['class'];
$tpl_args['s_class'] = empty($args['s_class']) ? 0 : $args['s_class'];
$tpl_args['groupbuy_price'] = empty($args['groupbuy_price']) ? 0 : $args['groupbuy_price'];
$tpl_args['groupbuy_order_key'] = empty($args['groupbuy_order_key']) ? 0 : $args['groupbuy_order_key'];
$tpl_args['groupbuy_order'] = empty($args['groupbuy_order']) ? 0 : $args['groupbuy_order'];
$tpl_args['curpage'] = empty($args['curpage']) ? 0 : $args['curpage'];
$args = $tpl_args;
break; case 'show_groupbuy:vr_groupbuy_list':
case 'show_groupbuy:vr_groupbuy_soon':
case 'show_groupbuy:vr_groupbuy_history':
$tpl_args['vr_class'] = empty($args['vr_class']) ? 0 : $args['vr_class'];
$tpl_args['vr_s_class'] = empty($args['vr_s_class']) ? 0 : $args['vr_s_class'];
$tpl_args['vr_area'] = empty($args['vr_area']) ? 0 : $args['vr_area'];
$tpl_args['vr_mall'] = empty($args['vr_mall']) ? 0 : $args['vr_mall'];
$tpl_args['groupbuy_price'] = empty($args['groupbuy_price']) ? 0 : $args['groupbuy_price'];
$tpl_args['groupbuy_order_key'] = empty($args['groupbuy_order_key']) ? 0 : $args['groupbuy_order_key'];
$tpl_args['groupbuy_order'] = empty($args['groupbuy_order']) ? 0 : $args['groupbuy_order'];
$tpl_args['curpage'] = empty($args['curpage']) ? 0 : $args['curpage'];
$args = $tpl_args;
break; case 'goods:comments_list':
$tpl_args['goods_id'] = empty($args['goods_id']) ? 0 : $args['goods_id'];
$tpl_args['type'] = empty($args['type']) ? 0 : $args['type'];
$tpl_args['curpage'] = empty($args['curpage']) ? 0 : $args['curpage'];
$args = $tpl_args;
break; case 'pointgrade:exppointlog':
$tpl_args['curpage'] = empty($args['curpage']) ? 0 : $args['curpage'];
$args = $tpl_args;
break; case 'promotion:index':
$args = (empty($args['gc_id']) ? NULL : $args);
break;
default:
break;
}
} return url($act, $op, $args, $rewrite_flag, SHOP_SITE_URL);
} /**
* 商城后台使用的URL链接函数,强制使用动态传参数模式
*
* @param string $act control文件名
* @param string $op op方法名
* @param array $args URL其它参数
* @return string
*/
function urlAdmin($act = '', $op = '', $args = array()){
return url($act, $op, $args, false, ADMIN_SITE_URL);
}
/**
* CMS使用的URL链接函数,强制使用动态传参数模式
*
* @param string $act control文件名
* @param string $op op方法名
* @param array $args URL其它参数
* @return string
*/
function urlCMS($act = '', $op = '', $args = array()){
return url($act, $op, $args, false, CMS_SITE_URL);
}
/**
* 圈子使用的URL链接函数,强制使用动态传参数模式
*
* @param string $act control文件名
* @param string $op op方法名
* @param array $args URL其它参数
* @return string
*/
function urlCircle($act = '', $op = '', $args = array()){
return url($act, $op, $args, false, CIRCLE_SITE_URL);
}
/**
* 微商城使用的URL链接函数,强制使用动态传参数模式
*
* @param string $act control文件名
* @param string $op op方法名
* @param array $args URL其它参数
* @return string
*/
function urlMicroshop($act = '', $op = '', $args = array()){
return url($act, $op, $args, false, MICROSHOP_SITE_URL);
} function urlMember($act = '', $op = '', $args = array())
{
$rewrite_flag = false;
$rewrite_item = array('article:show', 'article:article');
if (URL_MODEL && in_array($act . ':' . $op, $rewrite_item)) {
$rewrite_flag = true;
} return url($act, $op, $args, $rewrite_flag, MEMBER_SITE_URL);
} function urlLogin($act = '', $op = '', $args = array())
{
return url($act, $op, $args, false, LOGIN_SITE_URL);
}
/**
* 验证是否为平台店铺
*
* @return boolean
*/
function checkPlatformStore(){
return $_SESSION['is_own_shop'];
} /**
* 验证是否为平台店铺 并且绑定了全部商品类目
*
* @return boolean
*/
function checkPlatformStoreBindingAllGoodsClass(){
return checkPlatformStore() && $_SESSION['bind_all_gc'];
} /**
* 获得店铺状态样式名称
* @param $param array $store_info
* @return string
*/
function getStoreStateClassName($store_info) {
$result = 'open';
if (intval($store_info['store_state']) === 1) {
$store_end_time = intval($store_info['store_end_time']);
if ($store_end_time > 0) {
if ($store_end_time < TIMESTAMP) {
$result = 'expired';
} elseif (($store_end_time - 864000) < TIMESTAMP) {
//距离到期10天
$result = 'expire';
}
}
} else {
$result = 'close';
}
return $result;
} /**
* 将字符部分加密并输出
* @param unknown $str
* @param unknown $start 从第几个位置开始加密(从1开始)
* @param unknown $length 连续加密多少位
* @return string
*/
function encryptShow($str,$start,$length) {
$end = $start - 1 + $length;
$array = str_split($str);
foreach ($array as $k => $v) {
if ($k >= $start-1 && $k < $end) {
$array[$k] = '*';
}
}
return implode('',$array);
} /**
* 规范数据返回函数
* @param unknown $state
* @param unknown $msg
* @param unknown $data
* @return multitype:unknown
*/
function callback($state = true, $msg = '', $data = array()) {
return array('state' => $state, 'msg' => $msg, 'data' => $data);
}
FTP.php:
/**
* 通过FTP同步图片到远程服务器
*
* @param string $path 图片路径(upload/store/goods/4)
* @param string $file 图片名称(含年月日2012/06/12/03f625d923bfb1ca84355007487ed68b.jpg)
* @param boolean $ifdel 是否删除本地图片,目前淘宝导入的图片上传到远程时,不会删除本地图片
* @return string 远程图片路径部分
*/
function remote_ftp($path, $file, $ifdel = true){ ftpcmd('upload', $path.'/'.$file);
$img_ext = explode(',', GOODS_IMAGES_EXT);
foreach ($img_ext as $val) {
if(!ftpcmd('error')) ftpcmd('upload', $path.'/'.str_ireplace('.', $val . '.', $file));
} if(!ftpcmd('error')) {
if ($ifdel){
@unlink(BASE_PATH.'/'.$path.'/'.$file);
foreach ($img_ext as $val) {
@unlink(BASE_PATH.'/'.$path.'/'.str_ireplace('.', $val . '.', $file));
}
}
return C('ftp_access_url').'/'.$path;
}
return false;
} function ftpcmd($cmd, $arg1 = '') {
import('libraries.ftp');
static $ftp;
$ftpon = C('ftp_open');
if(!$ftpon) {
return $cmd == 'error' ? -101 : 0;
} elseif($ftp == null) {
$ftp = & NcFtp::instance();
}
if(!$ftp->enabled) {
return $ftp->error();
} elseif($ftp->enabled && !$ftp->connectid) {
$ftp->connect();
}
switch ($cmd) {
case 'upload' : return $ftp->upload(BASE_PATH.'/'.$arg1, $arg1); break;
case 'delete' : return $ftp->ftp_delete($arg1); break;
case 'close' : return $ftp->ftp_close(); break;
case 'error' : return $ftp->error(); break;
case 'object' : return $ftp; break;
default : return false;
} } function getremotefile($file) {
@set_time_limit(0);
$file = $file.'?'.time().rand(1000, 9999);
$str = @implode('', @file($file));
if(!$str) {
$str = dfsockopen($file);
}
return $str;
} function dfsockopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE, $encodetype = 'URLENCODE', $allowcurl = TRUE) {
return _dfsockopen($url, $limit, $post, $cookie, $bysocket, $ip, $timeout, $block, $encodetype, $allowcurl);
} function _dfsockopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE, $encodetype = 'URLENCODE', $allowcurl = TRUE) {
$return = '';
$matches = parse_url($url);
$scheme = $matches['scheme'];
$host = $matches['host'];
$path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';
$port = !empty($matches['port']) ? $matches['port'] : 80; if(function_exists('curl_init') && function_exists('curl_exec') && $allowcurl) {
$ch = curl_init();
$ip && curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: ".$host));
curl_setopt($ch, CURLOPT_URL, $scheme.'://'.($ip ? $ip : $host).':'.$port.$path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if($post) {
curl_setopt($ch, CURLOPT_POST, 1);
if($encodetype == 'URLENCODE') {
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
} else {
parse_str($post, $postarray);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postarray);
}
}
if($cookie) {
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
}
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
$data = curl_exec($ch);
$status = curl_getinfo($ch);
$errno = curl_errno($ch);
curl_close($ch);
if($errno || $status['http_code'] != 200) {
return;
} else {
return !$limit ? $data : substr($data, 0, $limit);
}
} if($post) {
$out = "POST $path HTTP/1.0\r\n";
$header = "Accept: */*\r\n";
$header .= "Accept-Language: zh-cn\r\n";
$boundary = $encodetype == 'URLENCODE' ? '' : '; boundary='.trim(substr(trim($post), 2, strpos(trim($post), "\n") - 2));
$header .= $encodetype == 'URLENCODE' ? "Content-Type: application/x-www-form-urlencoded\r\n" : "Content-Type: multipart/form-data$boundary\r\n";
$header .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
$header .= "Host: $host:$port\r\n";
$header .= 'Content-Length: '.strlen($post)."\r\n";
$header .= "Connection: Close\r\n";
$header .= "Cache-Control: no-cache\r\n";
$header .= "Cookie: $cookie\r\n\r\n";
$out .= $header.$post;
} else {
$out = "GET $path HTTP/1.0\r\n";
$header = "Accept: */*\r\n";
$header .= "Accept-Language: zh-cn\r\n";
$header .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
$header .= "Host: $host:$port\r\n";
$header .= "Connection: Close\r\n";
$header .= "Cookie: $cookie\r\n\r\n";
$out .= $header;
} $fpflag = 0;
if(!$fp = @fsocketopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout)) {
$context = array(
'http' => array(
'method' => $post ? 'POST' : 'GET',
'header' => $header,
'content' => $post,
'timeout' => $timeout,
),
);
$context = stream_context_create($context);
$fp = @fopen($scheme.'://'.($ip ? $ip : $host).':'.$port.$path, 'b', false, $context);
$fpflag = 1;
} if(!$fp) {
return '';
} else {
stream_set_blocking($fp, $block);
stream_set_timeout($fp, $timeout);
@fwrite($fp, $out);
$status = stream_get_meta_data($fp);
if(!$status['timed_out']) {
while (!feof($fp) && !$fpflag) {
if(($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) {
break;
}
} $stop = false;
while(!feof($fp) && !$stop) {
$data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));
$return .= $data;
if($limit) {
$limit -= strlen($data);
$stop = $limit <= 0;
}
}
}
@fclose($fp);
return $return;
}
} function fsocketopen($hostname, $port = 80, &$errno, &$errstr, $timeout = 15) {
$fp = '';
if(function_exists('fsockopen')) {
$fp = @fsockopen($hostname, $port, $errno, $errstr, $timeout);
} elseif(function_exists('pfsockopen')) {
$fp = @pfsockopen($hostname, $port, $errno, $errstr, $timeout);
} elseif(function_exists('stream_socket_client')) {
$fp = @stream_socket_client($hostname.':'.$port, $errno, $errstr, $timeout);
}
return $fp;
}