<?php
/*
* ThinkSAAS core function
* @copyright (c) ThinkSAAS All Rights Reserved
* @code by QiuJun
* @Email:thinksaas@qq.com
* @TIME:2010-12-18
*/
use Intervention\Image\ImageManagerStatic as Image;
use OSS\OssClient;
use OSS\Core\OssException;
/**
* 加载某一APP类
*
* @param string $app
* @return object
*/
function aac($app) {
require_once 'app/'.$app.'/'.'class.'.$app.'.php';
});
$obj = new $app($GLOBALS['db']);
return $obj;
}
/**
* 打印输出(右键查看源代码浏览输出结果,不影响前端网页运行效果)
*/
function tsPrint($value){
echo '<!--';
echo "\n";
echo '-->';
echo "\n";
}
/**
* 二维数组的根据不同键值来排序。 第一个参数是二位数组名,第二个是依据键,第三个是升序还是降序,默认是升序
* @param $arr
* @param $keys
* @param $type
* @return array
*/
function array2sort($arr, $keys, $type = 'asc') {
$keysvalue = $new_array = array();
foreach ($arr as $k => $v) {
$keysvalue[$k] = $v[$keys];
}
if ($type == 'asc') {
} else {
}
foreach ($keysvalue as $k => $v) {
$new_array[$k] = $arr[$k];
}
return $new_array;
}
/**
* ThinkSAAS Notice
* @param $notice
* @param $button
* @param $url
* @param $isAutoGo
* @return void
*/
function tsNotice($notice, $button = '点击返回', $url = 'javascript:history.back(-1);', $isAutoGo = false) {
global $runTime;
$title = '提示:';
include pubTemplate('notice');
}
/**
* 系统消息
* @param $msg
* @param $button
* @param $url
* @param $isAutoGo
* @return void
*/
function qiMsg($msg, $button = '点击返回>>', $url = 'javascript:history.back(-1);', $isAutoGo = false) {
echo <<<EOT
<html>
<head>
EOT;
if ($isAutoGo) {
echo "<meta http-equiv=\"refresh\" content=\"2;url=$url\" />";
}
echo <<<EOT
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ThinkSAAS 提示</title>
<style type="text/css">
<!--
body {
font-family: Arial;
font-size: 12px;
line-height:150%;
text-align:center;
}
a{color:#555555;}
.main {
width:500px;
background-color:#FFFFFF;
font-size: 12px;
color: #666666;
margin:100px auto 0;
list-style:none;
padding:20px;
}
.main p {
line-height: 18px;
margin: 5px 20px;
font-size:14px;
}
-->
</style>
</head>
<body>
<div class="main">
<p>$msg</p>
<p><a href="$url">$button</a></p>
</div>
</body>
</html>
EOT;
}
/**
* 分页函数
* @param int $count
* @param int $perlogs
* @param int $page
* @param string $url
* @param string $suffix
* @return string
*/
function pagination($count, $perlogs, $page, $url ,$suffix = '') {
$urlset = $GLOBALS['TS_SITE']['site_urltype'];
if ($urlset == 3 && !strpos($url,'index.php')) {
$suffix = '.html';
}
$pnums = ceil($count / $perlogs);
$res = '<nav aria-label="Page navigation example"><ul class="pagination justify-content-center">';
$re = '';
for ($i = $page - 5; $i <= $page + 5 && $i <= $pnums; $i++) {
if ($i > 0) {
if ($i == $page) {
$re .= '<li class="page-item active"><a class="page-link">' . $i . '</a></li>';
} else {
$re .= '<li class="page-item"><a class="page-link" href="' . $url . $i . $suffix . '">' . $i . '</a></li>';
}
}
}
if ($page > 6)
$re = '<li class="page-item"><a class="page-link" href="' . $url . '1' . $suffix . '" title="首页">«</a></li>' . $re;
if ($page + 5 < $pnums)
$re .= '<li class="page-item"><a class="page-link" href="' . $url . $pnums . $suffix . '" title="尾页">»</a></li>';
$re .= '</ul></nav>';
$res .= $re;
if ($pnums <= 1)
$res = '';
return $res;
}
/**
* 验证Email
* @param string $email
* @return boolean
*/
function valid_email($email) {
if (preg_match('/^[A-Za-z0-9]+([._\-\+]*[A-Za-z0-9]+)*@([A-Za-z0-9-]+\.)+[A-Za-z0-9]+$/', $email)) {
return true;
} else {
return false;
}
}
/**
* 处理时间的函数
* @param unknown $btime
* @param unknown $etime
* @return string
*/
function getTime($btime, $etime = null) {
if ($etime == null)
if ($btime < $etime) {
$stime = $btime;
$endtime = $etime;
} else {
$stime = $etime;
$endtime = $btime;
}
$timec = $endtime - $stime;
$days = intval($timec / 86400);
$rtime = $timec % 86400;
$hours = intval($rtime / 3600);
$rtime = $rtime % 3600;
$secs = $rtime % 60;
if ($days >= 1) {
return $days . ' 天前';
}
if ($hours >= 1) {
return $hours . ' 小时前';
}
if ($mins >= 1) {
return $mins . ' 分钟前';
}
if ($secs >= 1) {
return $secs . ' 秒前';
}
}
/**
* 获取用户IP
* @return Ambigous <string, unknown>
*/
function getIp() {
$PHP_IP = getenv('HTTP_CLIENT_IP');
$PHP_IP = getenv('HTTP_X_FORWARDED_FOR');
$PHP_IP = getenv('REMOTE_ADDR');
} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$PHP_IP = $_SERVER['REMOTE_ADDR'];
}
preg_match("/[\d\.]{7,15}/", $PHP_IP, $ipmatches);
$PHP_IP = $ipmatches[0] ? $ipmatches[0] : 'unknown';
return $PHP_IP;
}
/**
* 纯文本输入
* @param unknown $text
* @return mixed
*/
function t($text) {
if($text!='' && $text!=null){
$text = tsDecode($text);
$text = cleanJs($text);
// 彻底过滤空格BY QINIAO
// $text = str_replace ( ' ', '', $text );
return $text;
}else{
return '';
}
}
/**
* 输入安全的html,针对存入数据库中的数据进行的过滤和转义
* @param string $text
* @return string
*/
function h($text) {
$text = tsTrim($text);
return $text;
}
/**
* utf-8截取
* @param string $string
* @param number $start
* @param unknown $sublen
* @param string $append
* @return string
*/
function cututf8($string, $start = 0, $sublen=100, $append = true) {
if($string!='' && $string!=null){
$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
if (count($t_string[0]) - $start > $sublen && $append == true) {
} else {
}
}else{
return '';
}
}
/**
* 计算时间
* @return number
*/
function getmicrotime() {
return (( float )$usec + ( float )$sec);
}
/**
* 写入文件,支持Memcache缓存
* @param unknown $file 缓存文件
* @param string $dir 缓存目录
* @param unknown $data 缓存内容
* @param number $isphp
* @return boolean
*/
function fileWrite($file, $dir, $data, $isphp = 1) {
$dfile = $dir . '/' . $file;
// 支持memcache
$GLOBALS['TS_MC'] -> delete(md5($dfile));
$GLOBALS['TS_MC'] -> set(md5($dfile), $data, 0, 172800);
}
// 同时保存文件
if ($isphp == 1) {
$data = "<?php\ndefined('IN_TS') or die('Access Denied.');\nreturn " . var_export($data, true) . ";";
}
return true;
}
/**
* 读取文件 支持Memcache缓存 $dfile 文件
* @param string $dfile
*/
function fileRead($dfile) {
// 支持memcache
if ($GLOBALS['TS_MC'] -> get(md5($dfile))) {
return $GLOBALS['TS_MC'] -> get(md5($dfile));
} else {
return
include $dfile;
}
} else {
return
include $dfile;
}
}
/**
* 把数组转换为,号分割的字符串
* @param 一维数组 $arr
* @param 分割符号,默认,号
* @return Ambigous <string, unknown>
*/
function arr2str($arr,$fg=',') {
$str = '';
$count = 1;
foreach ($arr as $a) {
if ($count == 1) {
$str .= $a;
} else {
$str .= $fg . $a;
}
$count++;
}
}
return $str;
}
/**
* 生成随机数(1数字,0字母数字组合)
* @param unknown $length
* @param number $numeric
* @return string
*/
function random($length, $numeric = 0) {
$hash = '';
for ($i = 0; $i < $length; $i++) {
}
return $hash;
}
/**
* 封装一个采集函数
* @param unknown $url 网址
* @param unknown $proxy 代理
* @param unknown $timeout 跳出时间
* @return mixed
*/
function getHtmlByCurl($url, $proxy, $timeout) {
return $file_contents;
}
/**
* 计算文件大小
* @param int $size
* @return string
*/
function format_bytes($size) {
$units = array(' B', ' KB', ' MB', ' GB', ' TB');
for ($i = 0; $size >= 1024 && $i < 4; $i++)
$size /= 1024;
return round($size, 2) . $units[$i];
}
/**
* 对象转数组
* @param unknown $array
* @return array
*/
function object2array($array) {
$array = ( array )$array;
}
foreach ($array as $key => $value) {
$array[$key] = object2array($value);
}
}
return $array;
}
/**
* 写文件
*
* @param string $file
* - 需要写入的文件,系统的绝对路径加文件名
* @param string $content
* - 需要写入的内容
* @param string $mod
* - 写入模式,默认为w
* @param boolean $exit
* - 不能写入是否中断程序,默认为中断
* @return boolean 返回是否写入成功
*
*/
function isWriteFile($file, $content, $mod = 'w', $exit = TRUE) {
if (!@$fp = @fopen($file, $mod)) {
if ($exit) {
exit('ThinkSAAS File :<br>' . $file . '<br>Have no access to write!');
} else {
return false;
}
} else {
return true;
}
}
/**
* 创建目录
* @param string $dir
* @return boolean
*/
function makedir($dir) {
}
/**
* 加载模板
* @param string $file
* - 模板文件名
* @return string 返回编译后模板的系统绝对路径
* @param array $self
* 自定义路径,必须是数组格式
*
*/
function template($file, $plugin = '', $self = '') {
if ($plugin) {
$tplfile = 'plugins/' . $GLOBALS['TS_URL']['app'] . '/' . $plugin . '/' . $file . '.html';
$tplfile = 'plugins/pubs/' . $plugin . '/' . $file . '.html';
}
$objfile = 'cache/template/' . $plugin . '.' . $file . '.tpl.php';
} else if ($self) {
$tplfile ='';
foreach ($self as $v) {
$tplfile .= $v . '/';
$cache = $v . '_';
}
$tplfile = $tplfile . $file . '.html';
$objfile = 'cache/template/self/' . $self[3] . '.' . $file . '.tpl.php';
} else {
$tplfile = 'app/' . $GLOBALS['TS_URL']['app'] . '/html/' . $file . '.html';
$objfile = 'cache/template/' . $GLOBALS['TS_URL']['app'] . '.' . $file . '.tpl.php';
}
// note 加载模板类文件
require_once 'thinksaas/tsTemplate.php';
$T = new tsTemplate();
$T -> complie($tplfile, $objfile);
}
return $objfile;
}
/**
* 加载公用html模板文件
* @param unknown $file
* @return string
*/
function pubTemplate($file) {
$tplfile = 'public/html/' . $file . '.html';
$objfile = 'cache/template/public.' . $file . '.tpl.php';
// note 加载模板类文件
require_once 'thinksaas/tsTemplate.php';
$T = new tsTemplate();
$T -> complie($tplfile, $objfile);
}
return $objfile;
}
/**
* 该函数在插件中调用,挂载插件函数到预留的钩子上,针对app各个的插件部分,修改自Emlog
*
* @param string $hook
* @param string $actionFunc
* @return boolearn
*
*/
function addAction($hook, $actionFunc) {
global $tsHooks;
$tsHooks[$hook][] = $actionFunc;
return true;
}
/**
* 执行挂在钩子上的函数,支持多参数 eg:doAction('post_comment', $author, $email, $url, $comment);
* @param string $hook
*/
function doAction($hook) {
global $tsHooks;
if (isset($tsHooks[$hook])) {
foreach ($tsHooks [$hook] as $function) {
}
}
#打印钩子信息
if ($GLOBALS['TS_CF']['hook']) var_dump($hook);
}
function createFolders($path) {
// 递归创建
// 取得最后一个文件夹的全路径返回开始的地方
}
}
/**
* 删除文件夹和文件夹下所有的文件
* @param string $dir
* @return boolean
*/
function delDir($dir = '') {
return false;
}
if (substr($dir, -1) == '/') {
}
return true;
foreach (scandir ( $dir ) as $item) {
if ($item == '.' || $item == '..')
continue;
if (!delDir($dir . "/" . $item)) {
chmod($dir . "/" . $item, 0777);
if (!delDir($dir . "/" . $item))
return false;
};
}
}
/**
* 获取带http的网站域名
* @return string
*/
function getHttpUrl() {
$arrUri = explode('index.php', $_SERVER['REQUEST_URI']);
$site_url = 'http://' . $_SERVER['HTTP_HOST'] . $arrUri[0];
return $site_url;
}
/**
* 10位MD5值
* @param string $str
* @return string
*/
function md10($str = '') {
}
/**
* ThinkSAAS专用图片截图函数
* @param unknown $file 数据库里的图片url
* @param unknown $app app名称
* @param unknown $w 缩略图片宽度
* @param unknown $h 缩略图片高度
* @param string $path
* @param string $c 1裁切,0不裁切
* @return void|string
*/
/**
* Undocumented function
*
* @param [type] $file 数据库里的图片url
* @param [type] $app app名称
* @param [type] $w 缩略图片宽度
* @param [type] $h 缩略图片高度
* @param string $path
* @param string $c 1裁切,0不裁切
* @param string $sy 水印图片
* @param string $position 水印位置
* @param integer $x 水印X轴
* @param integer $y 水印Y轴
* @return void
*/
function tsXimg($file, $app, $w='', $h='', $path = '', $c = '0',$sy='sy.png',$position='bottom-left',$x=10,$y=10) {
if($GLOBALS['TS_SITE']['file_upload_type']==1){
#阿里云oss图片输出
$result = tsXimgAliOss($file, $app, $w, $h);
}else{
#本地图片输出
$result = tsXimgLocal($file, $app, $w, $h, $path, $c,$sy,$position,$x,$y);
}
return $result;
}
/**
* 本地图片输出
*/
function tsXimgLocal($file, $app, $w, $h, $path = '', $c = '0',$sy='sy.png',$position='bottom-left',$x=10,$y=10){
if (!$file) {
return false;
} else {
if($w=='' && $h==''){
#原图输出
$cpath = 'uploadfile/'.$app.'/'.$file;
}else{
if($type!='gif'){
$cpath = 'cache/' . $app . '/' . $path . '/' . md5($w . $h . $app . $name) . '.jpg';
}else{
$cpath = 'uploadfile/'.$app.'/'.$file;
}
if (!is_file($cpath) && $type!='gif') {
$driver = $GLOBALS['TS_SITE']['photo_driver'];
if($driver==''){
$driver = 'gd';
}
Image
::configure(array('driver' => $driver));//gd or imagick
createFolders('cache/' . $app . '/' . $path);
$dest = 'uploadfile/' . $app . '/' . $file;
try{
$img = Image::make($dest);
}catch (Exception $e){
//$e->getMessage();
return SITE_URL . 'public/images/nopic.jpg';
}
if ($arrImg[0] <= $w) {
if($c){
if($w && $h){
$img->fit($w, $h);
}elseif($w && $h==''){
$img->resize($w, null, function ($constraint) {
$constraint->aspectRatio();
});
}
}
} else {
if($w && $h){
$img->fit($w, $h);
}elseif($w && $h==''){
$img->resize($w, null, function ($constraint) {
$constraint->aspectRatio();
});
}
}
if($arrImg[0]>320 && $w>320 && in_array($type,array('jpg','jpeg','png'))){
#图片大于320px加水印
//echo $sy;exit;
$watermark = Image::make('public/images/'.$sy);
$img->insert($watermark, $position,$x,$y);
}
$img->save($cpath);
}
}
return SITE_URL . $cpath;
}
}
/**
* 阿里云oss图片输出
*
* @param [type] $file
* @param [type] $app
* @param [type] $w
* @param [type] $h
* @return void
*/
function tsXimgAliOss($file, $app, $w, $h){
$cpath = 'uploadfile/'.$app.'/'.$file;
$url = $GLOBALS['TS_SITE']['alioss_bucket_url'].'/'.$cpath;
if($w && $h){
$photo = $url.'?x-oss-process=image/resize,m_fill,h_'.$h.',w_'.$w;
}elseif($w && $h==''){
$photo = $url.'?x-oss-process=image/resize,w_'.$w;
}elseif($w=='' && $h){
$photo = $url.'?x-oss-process=image/resize,h_'.$h;
}elseif($w=='' && $h==''){
#原图输出
$photo = $url;
}
return $photo;
}
/**
* TS专用删除缓存图片
* @param $file
* @param $app
* @param $w
* @param $h
* @param $path
* @return bool
*/
function tsDimg($file, $app, $w, $h, $path) {
$name = $info[2];
$cpath = 'cache/' . $app . '/' . $path . '/' . md5($w . $h . $app . $name) . '.jpg';
return true;
}
/**
* tsUrl提供至少4种的url展示方式
* (1)index.php?app=group&ac=topic&topicid=1 //标准默认模式
* (2)index.php/group/topic/topicid-1 //path_info模式
* (3)group-topic-topicid-1.html //rewrite模式1
* (4)group/topic/topicid-1 //rewrite模式2
* @param unknown $app
* @param string $ac
* @param unknown $params
* @return string
*/
function tsUrl
($app, $ac = '', $params = array()) {
$urlset = $GLOBALS['TS_SITE']['site_urltype'];
$str ='';
if ($urlset == 1) {
foreach ($params as $k => $v) {
$str .= '&' . $k . '=' . $v;
}
if ($ac == '') {
$ac = '';
} else {
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$ac = '?ac=' . $ac;
} else {
$ac = '&ac=' . $ac;
}
}
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$url = 'index.php' . $ac . $str;
} else {
$url = 'index.php?app=' . $app . $ac . $str;
}
} elseif ($urlset == 2) {
foreach ($params as $k => $v) {
$str .= '/' . $k . '-' . $v;
}
if ($ac == '') {
$ac = '';
} else {
$ac = '/' . $ac;
}
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$url = 'index.php' . $ac . $str;
} else {
$url = 'index.php/' . $app . $ac . $str;
}
} elseif ($urlset == 3) {
foreach ($params as $k => $v) {
$str .= '-' . $k . '-' . $v;
}
if ($ac == '') {
$ac = '';
} else {
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$ac = $ac;
} else {
$ac = '-' . $ac;
}
}
if ($page) {
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$url = $ac . $str;
} else {
$url = $app . $ac . $str;
}
} else {
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$url = $ac . $str . '.html';
} else {
$url = $app . $ac . $str . '.html';
}
}
} elseif ($urlset == 4) {
foreach ($params as $k => $v) {
$str .= '/' . $k . '-' . $v;
}
if ($ac == '') {
$ac = '';
} else {
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$ac = $ac;
} else {
$ac = '/' . $ac;
}
}
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$url = $ac . $str;
} else {
$url = $app . $ac . $str;
}
} elseif ($urlset == 5) {
foreach ($params as $k => $v) {
$str .= '/' . $k . '/' . $v;
}
if ($ac == '') {
$ac = '';
} else {
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$ac = $ac;
} else {
$ac = '/' . $ac;
}
}
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$url = $ac . $str;
} else {
$url = $app . $ac . $str;
}
} elseif ($urlset == 6) {
foreach ($params as $k => $v) {
$str .= '/' . $k . '/' . $v;
}
if ($ac == '') {
$ac = '';
} else {
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$ac = $ac;
} else {
$ac = '/' . $ac;
}
}
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$url = $ac . $str;
} else {
$url = $app . $ac . $str;
}
} elseif ($urlset == 7) {
foreach ($params as $k => $v) {
$str .= '/' . $k . '/' . $v;
}
if ($ac == '') {
$ac = '';
} else {
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$ac = $ac;
} else {
$ac = '/' . $ac;
}
}
if ($page) {
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
$url = $ac . $str;
} else {
$url = $app . $ac . $str;
}
} else {
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app']) || $GLOBALS['TS_CF']['appdomain'][$app]) {
if ($ac == '') {
$url = '';
} else {
$url = $ac . $str . '/';
}
} else {
$url = $app . $ac . $str . '/';
}
}
}
if ($GLOBALS['TS_CF']['subdomain'] && in_array($app, $GLOBALS['TS_CF']['subdomain']['app'])) {
return 'http://' . $app . '.' . $GLOBALS['TS_CF']['subdomain']['domain'] . '/' . $url;
} elseif ($GLOBALS['TS_CF']['appdomain'][$app]) {
return 'http://' . $GLOBALS['TS_CF']['appdomain'][$app] . '/' . $url;
} else {
return SITE_URL . $url;
}
}
/**
* reurl
*/
function reurl() {
global $tsMySqlCache;
'?from=message',
'?from=singlemessage',
'?from=singlemessage&from=singlemessage',
'?from=groupmessage',
'?from=timeline',
'?tdsourcetag=s_pctim_aiomsg',
'?_wv=1031',
'?tdsourcetag=s_pcqq_aiomsg',
'?from=groupmessage&isappinstalled=0',
'?from=groupmessage&isappinstalled=1',
'?from=singlemessage&isappinstalled=0',
'?from=singlemessage&isappinstalled=1',
);
$options = fileRead('data/system_options.php');
if ($options == '') {
$options = $tsMySqlCache -> get('system_options');
}
$scriptName = explode('index.php', $_SERVER['SCRIPT_NAME']);
//获取到网站目录
$rurl = substr($_SERVER['REQUEST_URI'], strlen($scriptName[0]));
//过滤掉网站目录剩下的就是URL部分
if (strpos($rurl, 'index.php?') === false || strpos ( $rurl, '?openid=' ) == true || strpos ( $rurl, '?from=' ) == true){
$params = $rurl;
} else {
$params = $rurl;
}
if ($rurl) {
if($options['site_urltype'] == 2) {
//形式:index.php/group/topic/id-1
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['app'] = $v;
break;
case 1 :
$_GET['ac'] = $v;
break;
// 处理TAG
if ($_GET['ac'] == 'tag') {
$_GET['id'] = $v;
break;
}
default :
$_GET[$kv[0]] = $kv[1];
} else {
$_GET['params' . $p] = $kv[0];
}
break;
}
}
}elseif ($options['site_urltype'] == 3) {
// http://localhost/group-topic-id-1.html
$params = explode('-', $params[0]);
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['app'] = $v;
break;
case 1 :
$_GET['ac'] = $v;
break;
default :
if ($v)
$kv[] = $v;
break;
}
}
if ($ck >= 2) {
//$arrKv = array_chunk($kv, $ck);
foreach ($arrKv as $key => $item) {
$_GET[$item[0]] = $item[1];
}
} elseif ($ck == 1) {
$_GET[$kv[0]] = $kv[1];
} else {
}
} elseif ($options['site_urltype'] == 4) {
// http://localhost/group/topic/id-1
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['app'] = $v;
break;
case 1 :
$_GET['ac'] = $v;
break;
default :
$_GET[$kv[0]] = $kv[1];
} else {
$_GET['params' . $p] = $kv[0];
}
break;
}
}
} elseif ($options['site_urltype'] == 5) {
// http://localhost/group/topic/1<后面可以继续跟参数:?a=b&c=d>
$otherParams = $params[1];
$params = explode('/', $params[0]);
$arrOther = explode('&',$otherParams);
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['app'] = $v;
break;
case 1 :
$_GET['ac'] = $v;
$_GET['ac'] = 'index';
break;
case 2 :
if ((( int )$v) > 0) {
$_GET['id'] = $v;
break;
}
// 处理TAG
if ($_GET['ac'] == 'tag') {
$_GET['id'] = $v;
break;
}
default :
$_GET[$v] = $params[$p + 1];
break;
}
}
if($arrOther){
foreach($arrOther as $key=>$item){
$_GET[$arrKv[0]] = $arrKv[1];
}
}
} elseif ($options['site_urltype'] == 6) {
// http://localhost/group/topic/id/1
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['app'] = $v;
break;
case 1 :
$_GET['ac'] = $v;
break;
default :
$_GET[$v] = $params[$p + 1];
break;
}
}
} elseif ($options['site_urltype'] == 7) {
// http://localhost/group/topic/1/
//var_dump($params);exit;
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['app'] = $v;
break;
case 1 :
$_GET['ac'] = $v;
$_GET['ac'] = 'index';
break;
case 2 :
if ((( int )$v) > 0) {
$_GET['id'] = $v;
break;
}
// 处理TAG
if ($_GET['ac'] == 'tag') {
$_GET['id'] = $v;
break;
}
default :
$_GET[$v] = $params[$p + 1];
break;
}
}
}
}
}
//规划化URL规则,对跳转到首页不符合规则的进行404处理
/*
if ($_GET['app'] == '' && $_GET['ac'] == '' && $rurl) {
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
echo '404 page by <a href="http://www.thinksaas.cn/">www.thinksaas.cn</a>';
exit ;
}
*/
}
/**
* 辅助APP二级域名
*/
function reurlsubdomain() {
global $tsMySqlCache;
$options = fileRead('data/system_options.php');
if ($options == '') {
$options = $tsMySqlCache -> get('system_options');
}
$scriptName = explode('index.php', $_SERVER['SCRIPT_NAME']);
$rurl = substr($_SERVER['REQUEST_URI'], strlen($scriptName[0]));
if (strpos($rurl, '?') == false) {
$params = $rurl;
} else {
$params = $rurl;
}
if ($rurl) {
if ($options['site_urltype'] == 3) {
// http://group.thinksaas.cn/topic-id-1.html
$params = explode('-', $params[0]);
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['ac'] = $v;
break;
default :
if ($v)
$kv[] = $v;
break;
}
}
if ($ck >= 2) {
foreach ($arrKv as $key => $item) {
$_GET[$item[0]] = $item[1];
}
} elseif ($ck == 1) {
$_GET[$kv[0]] = $kv[1];
} else {
}
} elseif ($options['site_urltype'] == 4) {
// http://group.thinksaas.cn/topic/id-1
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['ac'] = $v;
break;
default :
$_GET[$kv[0]] = $kv[1];
} else {
$_GET['params' . $p] = $kv[0];
}
break;
}
}
} elseif ($options['site_urltype'] == 5) {
// http://group.thinksaas.cn/topic/1
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['ac'] = $v;
$_GET['ac'] = 'index';
break;
case 1 :
if ((( int )$v) > 0) {
$_GET['id'] = $v;
break;
}
default :
$_GET[$v] = $params[$p + 1];
break;
}
}
} elseif ($options['site_urltype'] == 6) {
// http://group.thinksaas.cn/topic/id/1
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['ac'] = $v;
break;
default :
$_GET[$v] = $params[$p + 1];
break;
}
}
} elseif ($options['site_urltype'] == 7) {
// http://group.thinksaas.cn/topic/1/
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['ac'] = $v;
$_GET['ac'] = 'index';
break;
case 1 :
if ((( int )$v) > 0) {
$_GET['id'] = $v;
break;
}
default :
$_GET[$v] = $params[$p + 1];
break;
}
}
} else {
foreach ($params as $p => $v) {
switch ($p) {
case 0 :
$_GET['ac'] = $v;
break;
default :
$_GET[$kv[0]] = $kv[1];
} else {
$_GET['params' . $p] = $kv[0];
}
break;
}
}
}
}
}
}
/**
* 检测目录是否可写1可写,0不可写
* @param string $file
* @return number
*/
function iswriteable($file) {
$dir = $file;
if ($fp = fopen("$dir/test.txt", 'w')) {
$writeable = 1;
} else {
$writeable = 0;
}
} else {
if ($fp = fopen($file, 'a+')) {
$writeable = 1;
} else {
$writeable = 0;
}
}
return $writeable;
}
/**
* 删除目录下文件
* @param unknown $dir
*/
function delDirFile($dir) {
$arrFiles = tsScanDir($dir, 'files');
foreach ($arrFiles as $item) {
}
}
/**
* ThinkSAAS专用上传函数
*
* @param [type] $files 要上传的文件 如$_FILES['photo']
* @param [type] $projectid 上传针对的项目id 如$userid
* @param [type] $dir 上传到目录 如 user
* @param array $uptypes 上传类型,数组 array('jpg','png','gif')
* @param string $sy 图片水印文件sy.png,文件请放到public/images/目录下
* @return void 失败返回false,成功返回数组:array('name'=>'','path'=>'','url'=>'','path'=>'','size'=>'')
*/
function tsUpload
($files, $projectid, $dir, $uptypes=array(),$sy='') {
if($GLOBALS['TS_SITE']['file_upload_type']==1){
#阿里云oss上传存储
$result = tsUploadAliOss($files, $projectid, $dir, $uptypes);
}else{
#本地上传存储
$result = tsUploadLocal($files, $projectid, $dir, $uptypes,$sy);
}
return $result;
}
/**
* 本地上传存储
*/
function tsUploadLocal
($files, $projectid, $dir, $uptypes=array(),$sy=''){
if ($files['size'] > 0) {
$upload_max_filesize = ini_get('upload_max_filesize')*1048576;
if($upload_max_filesize<$files['size']){
getJson
('PHP允许上传文件的最大尺寸为'.ini_get('upload_max_filesize'),1);
}
//上传图片大小控制
$type = getImagetype($files['tmp_name']);
getJson('图片错误!',1);
}
if ($GLOBALS['TS_SITE']['photo_size']) {
$upsize = $GLOBALS['TS_SITE']['photo_size'] * 1048576;
if ($files ['size'] > $upsize) {
//tsNotice('上传图片不能超过' . $GLOBALS['TS_SITE']['photo_size'] . 'M,请修改小点后再上传!');
$img = Image::make($files['tmp_name']);
}
}
}
$path = getDirPath($projectid);
$dest_dir = 'uploadfile/' . $dir . '/' . $path;
createFolders($dest_dir);
//$ext = pathinfo($files['name'],PATHINFO_EXTENSION);
$name = $projectid . '.' . $type;
$dest = $dest_dir . '/' . $name;
// 先删除
// 后上传
if($img){
//处理大图统一为800宽度,高度自适应
$img->resize(800, null, function ($constraint) {
$constraint->aspectRatio();
});
#加水印
if($sy){
$watermark = Image::make('public/images/'.$sy);
$img->insert($watermark, 'bottom-left',10,10);
}
$img->save($dest);
}else{
}
#继续验证图片
try{
Image::make($dest);
}catch (Exception $e){
echo 'Message: ' .$e->getMessage();
return false;
}
}
'name' => tsFilter($files['name']),
'path' => $path,
'url' => $path . '/' . $name,
'type' => $type,
'size' => tsFilter($files['size'])
);
} else {
return false;
}
} else {
return false;
}
}
}
/**
* 阿里云oss上传存储
*/
function tsUploadAliOss
($files, $projectid, $dir, $uptypes=array()){
if ($files['size'] > 0) {
$path = getDirPath($projectid);
$dest_dir = 'uploadfile/' . $dir . '/' . $path;
//上传图片大小控制
$type = getImagetype($files['tmp_name']);
getJson('图片错误!',1);
}
}
$name = $projectid . '.' . $type;
$dest = $dest_dir . '/' . $name;
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
$accessKeyId = $GLOBALS['TS_SITE']['alioss_accesskey_id'];
$accessKeySecret = $GLOBALS['TS_SITE']['alioss_accesskey_secret'];
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = $GLOBALS['TS_SITE']['alioss_endpoint'];
// 设置存储空间名称。
$bucket= $GLOBALS['TS_SITE']['alioss_bucket'];
// 设置文件名称。
$object = $dest;
// <yourLocalFile>由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt。
$filePath = $files['tmp_name'];
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$ossClient->uploadFile($bucket, $object, $filePath);
'name' => tsFilter($files['name']),
'path' => $path,
'url' => $path . '/' . $name,
'type' => $type,
'size' => tsFilter($files['size'])
);
} catch(OssException $e) {
/*
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
*/
return false;
}
//print(__FUNCTION__ . ": OK" . "\n");
}else{
return false;
}
}else{
return false;
}
}
/**
* 阿里云分片上传
*
* @param [type] $projectid
* @param [type] $dir
* @param [type] $type
* @return void
*/
function AliOssChunkUpload($projectid,$dir,$type){
$path = getDirPath($projectid);
$dest_dir = 'uploadfile/' . $dir . '/' . $path;
$name = $projectid . '.' . $type;
$dest = $dest_dir . '/' . $name;
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
$accessKeyId = $GLOBALS['TS_SITE']['alioss_accesskey_id'];
$accessKeySecret = $GLOBALS['TS_SITE']['alioss_accesskey_secret'];
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = $GLOBALS['TS_SITE']['alioss_endpoint'];
$bucket= $GLOBALS['TS_SITE']['alioss_bucket'];
$object = $dest;
$file = $dest;
OssClient::OSS_CHECK_MD5 => true,
OssClient::OSS_PART_SIZE => 2, //2M
);
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$ossClient->multiuploadFile($bucket, $object, $file, $options);
return true;
} catch(OssException $e) {
#printf(__FUNCTION__ . ": FAILED\n");
#printf($e->getMessage() . "\n");
#return;
return false;
}
#print(__FUNCTION__ . ": OK" . "\n");
}
/**
* 阿里云oss网络文件存储
*
* @param [type] $fileurl
* @param [type] $project
* @param [type] $dir
* @param [type] $filetype
* @return void
*/
function tsUploadAliOssUrl($fileurl,$projectid,$dir,$filetype){
$path = getDirPath($projectid);
$dest_dir = 'uploadfile/' . $dir . '/' . $path;
$name = $projectid . '.' . $filetype;
$dest = $dest_dir . '/' . $name;
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
$accessKeyId = $GLOBALS['TS_SITE']['alioss_accesskey_id'];
$accessKeySecret = $GLOBALS['TS_SITE']['alioss_accesskey_secret'];
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = $GLOBALS['TS_SITE']['alioss_endpoint'];
// 设置存储空间名称。
$bucket= $GLOBALS['TS_SITE']['alioss_bucket'];
// 设置文件名称。
$object = $dest;
// 配置文件内容。
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$ossClient->putObject($bucket, $object, $content);
'name' => $name,
'path' => $path,
'url' => $path . '/' . $name,
'type' => $filetype,
);
} catch(OssException $e) {
/*
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
*/
return false;
}
//print(__FUNCTION__ . ": OK" . "\n");
}
/**
* 删除阿里云oss文件
*
* @param [type] $file
* @return void
*/
function deleteAliOssFile($file){
$accessKeyId = $GLOBALS['TS_SITE']['alioss_accesskey_id'];
$accessKeySecret = $GLOBALS['TS_SITE']['alioss_accesskey_secret'];
$endpoint = $GLOBALS['TS_SITE']['alioss_endpoint'];
$bucket= $GLOBALS['TS_SITE']['alioss_bucket'];
$object = $file;
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$ossClient->deleteObject($bucket, $object);
return true;
} catch(OssException $e) {
/*
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
*/
return false;
}
//print(__FUNCTION__ . ": OK" . "\n");
}
function gmt_iso8601($time) {
$dtStr = date("c", $time);
$mydatetime = new DateTime($dtStr);
$expiration = $mydatetime->format(DateTime::ISO8601);
$pos = strpos($expiration, '+');
$expiration = substr($expiration, 0, $pos);
return $expiration."Z";
}
/**
* 阿里云oss直传签名
*/
function AliOssSIgn(){
$id= $GLOBALS['TS_SITE']['alioss_accesskey_id']; // 请填写您的AccessKeyId。
$key= $GLOBALS['TS_SITE']['alioss_accesskey_secret']; // 请填写您的AccessKeySecret。
// $host的格式为 bucketname.endpoint,请替换为您的真实信息。
$host = $GLOBALS['TS_SITE']['alioss_endpoint'];
// $callbackUrl为上传回调服务器的URL,请将下面的IP和Port配置为您自己的真实URL信息。
$callbackUrl = SITE_URL.'index.php?app=pubs&ac=aliyun&ts=callback';
//$dir = 'user-dir-prefix/'; // 用户上传文件时指定的前缀。
$dir = '';
$callback_param = array('callbackUrl'=>$callbackUrl,
'callbackBody'=>'filename=${object}&size=${size}&mimeType=${mimeType}&height=${imageInfo.height}&width=${imageInfo.width}',
'callbackBodyType'=>"application/x-www-form-urlencoded");
$expire = 30; //设置该policy超时时间是10s. 即这个policy过了这个有效时间,将不能访问。
$end = $now + $expire;
$expiration = gmt_iso8601($end);
//最大文件大小.用户可以自己设置
$condition = array(0=>'content-length-range', 1=>0, 2=>1048576000);
$conditions[] = $condition;
// 表示用户上传的数据,必须是以$dir开始,不然上传会失败,这一步不是必须项,只是为了安全起见,防止用户通过policy上传到别人的目录。
$start = array(0=>'starts-with', 1=>'$key', 2=>$dir);
$conditions[] = $start;
$arr = array('expiration'=>$expiration,'conditions'=>$conditions);
$string_to_sign = $base64_policy;
$response['accessid'] = $id;
$response['host'] = $host;
$response['policy'] = $base64_policy;
$response['signature'] = $signature;
$response['expire'] = $end;
$response['callback'] = $base64_callback_body;
$response['dir'] = $dir; // 这个参数是设置用户上传文件时指定的前缀。
//echo json_encode($response);
return $response;
}
/**
* 网络文件上传(非图片)
*
* @param [type] $fileurl
* @param [type] $projectid
* @param [type] $dir
* @param array $uptypes
* @return void
*/
function tsUploadUrl
($fileurl, $projectid, $dir, $uptypes=array()) {
//转小写一下
if($GLOBALS['TS_SITE']['file_upload_type']==1){
$result = tsUploadAliOssUrl($fileurl,$projectid,$dir,$type);
return $result;
}else{
$menu2 = intval($projectid / 1000);
$menu1 = intval($menu2 / 1000);
$path = $menu1 . '/' . $menu2;
$dest_dir = 'uploadfile/' . $dir . '/' . $path;
createFolders($dest_dir);
$name = $projectid . '.' . $type;
$dest = $dest_dir . '/' . $name;
//先删除
//后上传
return array('name' => $name, 'path' => $path, 'url' => $path . '/' . $name, 'type' => $type, 'size' => $filesize, );
} else {
return false;
}
}
} else {
return false;
}
}
/**
* 拷贝已经上传的文件
*/
function tsUploadCopy($dfile,$projectid, $dir){
$menu2 = intval($projectid / 1000);
$menu1 = intval($menu2 / 1000);
$path = $menu1 . '/' . $menu2;
$dest_dir = 'uploadfile/' . $dir . '/' . $path;
createFolders($dest_dir);
// 转小写一下
$name = $projectid . '.' . $type;
$dest = $dest_dir . '/' . $name;
'path' => $path,
'url' => $path . '/' . $name
);
}
/**
* 扫描目录
* @param unknown $dir
* @param string $isDir
* @return mixed
*/
function tsScanDir($dir, $isDir = null) {
if ($isDir == null) {
} else {
}
foreach ($dirs as $key => $item) {
}
return $arrDirs;
}
/**
* 删除目录下所有文件
* @param string $dir
*/
function rmrf($dir) {
foreach (glob ( $dir ) as $file) {
rmrf("$file/*");
} else {
}
}
}
/**
* 内容url解析
* @param string $content
* @return mixed
*/
function urlcontent($content) {
$pattern = '/(http:\/\/|https:\/\/|ftp:\/\/)([\w:\/\.\?=&-_#]+)/is';
$content = @preg_replace($pattern, '<a rel="nofollow" target="_blank" href="\1\2">\1\2</a>', $content);
return $content;
}
/**
* 反序列化为UTF-8
* @param string $serial_str
* @return mixed
*/
function mb_unserialize($serial_str, $t = NULL) {
return 's:'.strlen($m[2]).':"'.$m[2].'";';
}, $serial_str);
}
/**
* 反序列化为ASC
* @param string $serial_str
* @return mixed
*/
function asc_unserialize($serial_str) {
return 's:'.strlen($m[2]).':"'.$m[2].';"';
}, $serial_str);
}
/**
* 二进制上传
* @param int $projectid
* @param unknown $dir
* @param unknown $type
* @return multitype:string unknown
*/
function tsXupload($projectid, $dir, $type) {
$menu2 = intval($projectid / 1000);
$menu1 = intval($menu2 / 1000);
$path = $menu1 . '/' . $menu2;
$dest_dir = 'uploadfile/' . $dir . '/' . $path;
createFolders($dest_dir);
$name = $projectid . '.' . $type;
// 要生成的图片名字
$dest = $dest_dir . '/' . $name;
// 先删除
$jpg = $xmlstr;
// 得到post过来的二进制原始数据
$file = fopen($dest, "w");
// 打开文件准备写入
// 写入
// 关闭
return array('name' => $name, 'path' => $path, 'url' => $path . '/' . $name, 'type' => $type);
}
/**
* 记录日志
* @param unknown $file
* @param string $data
*/
function logging($file, $data) {
$dfile = 'tslogs/' . $file;
// 文件重命名
if ($filesize > 1024000) {
}
$fd = fopen($dfile, "a+");
}
/**
* 记录用户日志
* @param unknown $array
* @param unknown $userid
*/
function userlog(&$array, $userid) {
foreach ($array as $key => $value) {
$data = "UserId:" . $userid . "\n";
$data .= "IP:" . getIp() . "\n";
$data .= "TIME:" . date('Y-m-d H:i:s') . "\n";
$data .= "URL:" . $_SERVER['REQUEST_URI'] . "\n";
$data .= "DATA:" . $data . "\n";
$data .= "--------------------------------------\n";
logging
(date('Ymd') . '-' . $userid . '.txt', $data);
} else {
userlog($array[$key],$userid);
}
}
}
}
/**
* 过滤脚本代码
* @param string $text
* @return mixed
*/
function cleanJs($text) {
$text = tsTrim($text);
//$text = stripslashes ( $text );
// 完全过滤注释
// 完全过滤动态代码
// 完全过滤js
// 过滤多余html
$text = @preg_replace('/<\/?(html|head|meta|link|base|body|title|style|script|form|iframe|frame|frameset|math|maction|marquee)[^><]*>/i', '', $text);
// 过滤on事件lang js
while (preg_match('/(<[^><]+)(data|onmouse|onexit|onclick|onkey|onsuspend|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)[^><]+/i', $text, $mat)) {
}
while (preg_match('/(<[^><]+)(window\.|javascript:|js:|about:|file:|document\.|vbs:|cookie)([^><]*)/i', $text, $mat)) {
$text = str_replace($mat[0], $mat[1] . $mat[3], $text);
}
return $text;
}
/**
* 输入安全过滤
* @param string $text
* @return mixed
*/
function tsClean($text,$js=0) {
//去除前后空格,并去除反斜杠
//$text = br2nl($text); //将br转换成/n
//处理正文图片
if($GLOBALS['TS_SITE']['photo_check']==1){
preg_match_all('/<img[^>]*src="([^"]*)"[^>]*>/i',$text, $matchs); //主要
$arrImage = $matchs[1];
foreach($arrImage as $key=>$item){
if(substr( $item, 0, 1 )=='/'){
}
getJson('内容中存在非法图片:'.$item,$js,0);
}
}
}
///////XSS start
require_once 'thinksaas/xsshtml.class.php';
$xss = new XssHtml($text);
$text = $xss -> getHtml();
//$text = substr ($text, 4);//去除左边<p>标签
//$text = substr ($text, 0,-5);//去除右边</p>标签
///////XSS end
//$text = html_entity_decode($text,ENT_NOQUOTES,"utf-8");//把 HTML 实体转换为字符
//$text = strip_tags($text); //去掉HTML及PHP标记
//$text = cleanJs ( $text );
//把字符转换为 HTML 实体
return $text;
}
/*
* 针对tsClean函数会过滤很多html标签的补充函数
*/
function tsCleanContent($text){
return $text;
}
/*
* @text 内容
* @tp 内容分页
* @url URL
*/
function tsDecode($text, $tp = 1) {
if($text){
$text = tsTrim($text);
//$text = html_entity_decode(stripslashes($text), ENT_NOQUOTES, "utf-8");
//分页处理
/*
$arrText = explode('_ueditor_page_break_tag_', $text);
if ($arrText) {
$tp = $tp - 1;
$text = $arrText[$tp];
}
*/
}
return $text;
}
/*
* 输出标题处理
*/
function tsTitle($title) {
return $title;
}
/*
* 输出内容截取
*/
function tsCutContent($text, $length = 50) {
$text = cututf8(t(tsDecode($text)), 0, $length);
return $text;
}
/**
* 敏感词直接替换成***
*
* @param [type] $text
* @return void
*/
function antiWord($text,$isjs=0){
$strWord = fileRead('system_anti_word.php');
if($strWord==''){
$strWord = $GLOBALS['tsMySqlCache']->get('system_anti_word');
}
$result = strtr($text, $arrWords);
#敏感词处理方式
if($GLOBALS['TS_SITE']['anti_word_type']==1){
return $result;
}else{
if(stristr($result, '***') === FALSE) {
return $result;
}else{
getJson('非法操作!',$isjs,0);
}
}
}
/*
* tpCount()
*/
function tpCount($text) {
$arrText = explode('_ueditor_page_break_tag_', $text);
}
/*
* 内容分页
*/
function tpPage($text, $app, $ac, $arr) {
$tpCount = tpCount($text);
$tpUrl = '';
if ($tpCount > 1) {
$tpUrl = '<div class="page">';
for ($i = 1; $i <= $tpCount; $i++) {
$arr['tp'] = $i;
$tpUrl .= '<a rel="nofollow" href="' . tsUrl($app, $ac, $arr) . '">' . $i . '</a>';
}
$tpUrl .= '</div>';
}
return $tpUrl;
}
/**
* 统计字符长度
* @param string $str
* @return number
*/
function count_string_len($str) {
// return (strlen($str)+mb_strlen($str,'utf-8'))/2; //开启了php_mbstring.dll扩展
$temp_len = 0;
for ($i = 0; $i < $name_len; ) {
if (strpos('abcdefghijklmnopqrstvuwxyz0123456789', $str[$i]) === false) {
$i = $i + 3;
$temp_len += 2;
} else {
$i = $i + 1;
$temp_len += 1;
}
}
return $temp_len;
}
/**
* 针对特殊字符或者内容的特殊过滤
* @param string $value
* @return Ambigous <string, mixed>
*/
function tsFilter($value) {
$value = tsTrim($value);
//定义不允许提交的SQl命令和关键字
$words[] = "add ";
$words[] = "and ";
$words[] = "count ";
$words[] = "order ";
$words[] = "table ";
$words[] = "by ";
$words[] = "create ";
$words[] = "delete ";
$words[] = "drop ";
$words[] = "from ";
$words[] = "grant ";
$words[] = "insert ";
$words[] = "select ";
$words[] = "truncate ";
$words[] = "update ";
$words[] = "use ";
$words[] = "--";
$words[] = "#";
$words[] = "group_concat";
$words[] = "column_name";
$words[] = "information_schema.columns";
$words[] = "table_schema";
$words[] = "union ";
$words[] = "where ";
$words[] = "alert";
//转换为小写
foreach ($words as $word) {
while (strstr($value, $word)) {
}
}
return $value;
}
function tsgpc(&$array) {
//如果是数组,遍历数组,递归调用
foreach ($array as $k => $v) {
$array[$k] = tsgpc($v);
}
//使用addslashes函数来处理
//$array = addslashes ( closetags($array) );
}
return $array;
}
/**
* 检查标签是否闭合
*/
function closetags($html) {
preg_match_all('#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result);
$openedtags = $result[1];
$closedtags = $result[1];
$len_opened = count($openedtags);
$len_closed = count($closedtags);
if ($len_closed == $len_opened) {
return $html;
}
for ($i = 0; $i < $len_opened; $i++) {
if (!in_array($openedtags[$i], $closedtags)) {
$html .= '</' . $openedtags[$i] . '>';
} else {
}
}
return $html;
}
/*
* url参数检测过滤
* @parameter 例如$app,$ac,$ts等的参数
*/
function tsUrlCheck($parameter) {
$parameter = tsTrim($parameter);
if($parameter){
$strOk = '%-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
foreach ($arrStr as $key => $item) {
if (stripos($strOk, $item) === false) {
header ( "HTTP/1.1 404 Not Found" );
header ( "Status: 404 Not Found" );
}
}
//return strtolower($parameter);//转小写
return $parameter;
}
}
function ludou_width_height($content) {
foreach ($images[1] as $index => $value) {
$width = tsTrim($img[2][0], '"');
if ($width > 630) {
$new_img = @preg_replace('/(width)=("[^"]*")/i', 'width="630"', $images[0][$index]);
$content = str_replace($images[0][$index], $new_img, $content);
$new_img2 = @preg_replace('/(height)=("[^"]*")/i', 'height="100%"', $new_img);
}
}
}
}
return $content;
}
/**
* Convert BR tags to nl
*
* @param string The string to convert
* @return string The converted string
*/
function br2nl($string) {
}
/*
* 判断手机访问
*/
function isMobile() {
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
return true;
}
// 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset($_SERVER['HTTP_VIA'])) {
// 找不到为flase,否则为true
return stristr($_SERVER['HTTP_VIA'], "wap") ?
true : false;
}
// 脑残法,判断手机发送的客户端标志,兼容性有待提高
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = array('nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile');
// 从HTTP_USER_AGENT中查找手机浏览器的关键字
return true;
}
}
// 协议法,因为有可能不准确,放到最后判断
if (isset($_SERVER['HTTP_ACCEPT'])) {
// 如果只支持wml并且不支持html那一定是移动设备
// 如果支持wml和html但是wml在html之前则是移动设备
if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
return true;
}
}
return false;
}
/**
* 判断是否微信浏览器访问
*/
function isWeixin(){
if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
return true;
}else{
return false;
}
}
/**
* @param $msg 返回的数据或者提示语
* @param int $js 判断是否是通过json方式处理的
* @param int $status 状态:0不正常、1正常
* @param string $url 当status=2要跳转的url页面
* @param string $data 返回的数据
* @param int $isview 是否有html模版文件加载0无1有
*/
function getJson($msg, $js = 1, $status = 1, $url = '', $data='',$isview=0) {
if ($js) {
header("Content-type: application/json;charset=utf-8");
if ($url) {
'status' => $status,
'msg'=>$msg,
'data' => $data,
'url' => $url,
));
} else {
'status' => $status,
'msg'=>$msg,
'data' => $data,
'url' => '',
));
}
}
if($isview==0){
if($js == 0 && $url) {
} else {
tsNotice($msg);
}
}
}
/**
* 为项目上传绝对路径的图片(只针对图片)
*
* @param [type] $photourl
* @param [type] $projectid
* @param [type] $dir
* @param string $type
* @return void
*/
function tsUploadPhotoUrl($photourl, $projectid, $dir,$type='') {
if($type==''){
}
if($GLOBALS['TS_SITE']['file_upload_type']==1){
$result = tsUploadAliOssUrl($photourl,$projectid,$dir,$type);
return $result;
}else{
$menu2 = intval($projectid / 1000);
$menu1 = intval($menu2 / 1000);
$path = $menu1 . '/' . $menu2;
$dest_dir = 'uploadfile/' . $dir . '/' . $path;
createFolders($dest_dir);
$name = $projectid . '.' . $type;
$dest = $dest_dir . '/' . $name;
if($fgc) {
if ($fpc){
'path' => $path,
'url' => $path . '/' . $name,
'type' => $type,
);
}else{
return false;
}
}else{
return false;
}
}
}
/**
* 获取域名的根域名
* @param $url
* @return string
*/
function getdomain($url) {
if (strpos ( $host, '/' ) !== false) {
$host = $parse ['host'];
}
$topleveldomaindb = array ('com', 'edu', 'gov', 'int', 'mil', 'net', 'org', 'biz', 'info', 'pro', 'name', 'museum', 'coop', 'aero', 'xxx', 'idv', 'mobi', 'cc', 'me','in','io','gg','co' );
$str = '';
foreach ( $topleveldomaindb as $v ) {
$str .= ($str ? '|' : '') . $v;
}
$matchstr = "[^\.]+\.(?:(" . $str . ")|\w{2}|((" . $str . ")\.\w{2}))$";
if (preg_match ( "/" . $matchstr . "/ies", $host, $matchs )) {
$domain = $matchs ['0'];
} else {
$domain = $host;
}
return $domain;
}
/**
* 验证手机号,支持13、15、18、17、19号段
*
* @param $phone
* @return bool
*/
function isPhone($phone){
//if(preg_match("/^13[0-9]{1}[0-9]{8}$|15[0-9]{1}[0-9]{8}$|18[0-9]{1}[0-9]{8}$|17[0-9]{1}[0-9]{8}$|19[0-9]{1}[0-9]{8}$/",$phone)){
return true;
}else{
return false;
}
}
/**
* 将字符串转换为数组
*
* @param string $data
* @return array
*/
function string2array($data) {
if ($data == '') {
}
return $data;
}
if (strpos ( $data, 'array' ) !== false && strpos ( $data, 'array' ) === 0) {
//eval ( "\$data = $data;" );
eval("\$data = \"$data\";");
return $data;
}
return unserialize ( ($data) ); //unserialize ( new_stripslashes ( $data ) );
}
/**
* 将数组转换为字符串
*
* @param array $data
* @param bool $isformdata
* @return string
*
*/
function array2string($data, $isformdata = 1) {
if ($data == '') {
return '';
}
if ($isformdata) {
$data = ($data); //new_stripslashes ( $data );
}
}
/**
* 返回404提示
*/
function ts404(){
header ( "HTTP/1.1 404 Not Found" );
header ( "Status: 404 Not Found" );
$title = '404';
include pubTemplate ( "404" );
}
/**
* URL跳转
*
* @param $url
*/
function tsHeaderUrl($url){
}
/**
* curl get 方式请求url
* @param $URL
* @return bool|mixed
*/
function curl_get_file_contents($URL){
//curl_setopt($c, CURLOPT_HEADER, 1);//输出远程服务器的header信息
curl_setopt($c, CURLOPT_USERAGENT
, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727;http://www.thinksaas.cn)');
if ($contents) {return $contents;}
else {return FALSE;}
}
/**
* 获取客户端IP地址
* @return string
*/
function get_client_ip() {
$client_ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$client_ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$client_ip = getenv('REMOTE_ADDR');
} else {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
return $client_ip;
}
/*
* 通过curl模拟post的请求
*/
function sendDataByCurl
($url,$data=array()){
//对空格进行转义
//设置选项,包括URL
// POST数据
// 把post的变量加上
//执行并获取url地址的内容
//释放curl句柄
if(0 !== $errorCode) {
return false;
}
return $output;
}
/*
* 获取毫秒时间
*/
function getTimestamp(){
$time = $time [1] . ($time [0] * 1000);
$time = $time2 [0];
return $time;
}
/**
* 取得根域名
* @param string $domain 域名
* @return string 返回根域名
*/
function GetUrlToDomain($domain) {
//print_r($arrDomain);
$domain = $arrDomain['path'];
$re_domain = '';
$domain_postfix_cn_array = array('com', 'net', 'org', 'gov', 'edu', 'com.cn', 'cn','cc','me','tv','la','net.cn','org.cn','top','wang','hk','co','pw','ren','asia','biz','gov.cn','tw','com.tw','us','tel','info','website','host','io','press','mobi','wiki','io');
$array_domain = explode('.', $domain);
$array_num = count($array_domain) - 1;
if ($array_domain[$array_num] == 'cn') {
if (in_array($array_domain[$array_num - 1], $domain_postfix_cn_array)) {
$re_domain = $array_domain[$array_num - 2] . '.' . $array_domain[$array_num - 1] . '.' . $array_domain[$array_num];
} else {
$re_domain = $array_domain[$array_num - 1] . '.' . $array_domain[$array_num];
}
} else {
$re_domain = $array_domain[$array_num - 1] . '.' . $array_domain[$array_num];
}
return $re_domain;
}
/*
* 对抓去到的内容做简单过滤(过滤空白字符,便于正则匹配)
*/
function _prefilter($output) {
$output=preg_replace("/\/\/[\S\f\t\v ]*?;[\r|\n]/", "", $output);
$output=preg_replace("/\<\!\-\-[\s\S]*?\-\-\>/", "", $output);
return $output;
}
/*
* 去除文本内容中图片的高度和宽度
*/
function cleanContentImgWH($content){
$search = '/(<img.*?)width=(["\'])?.*?(?(2)\2|\s)([^>]+>)/is';
$search1 = '/(<img.*?)height=(["\'])?.*?(?(2)\2|\s)([^>]+>)/is'; //去除图片的高度
$style = '/(<img.*?)style=(["\'])?.*?(?(2)\2|\s)([^>]+>)/is';
return $content;
}
/**
* 将正文转换成手机端支持的html正文
*
* @param [type] $html
* @return void
*/
function mobileHtml($html){
$html = preg_replace( '/(<div.*?)(style=.+?[\'|"])|((width)=[\'"]+[0-9]+[\'"]+)|((height)=[\'"]+[0-9]+[\'"]+)/i', '$1' , $html);
$html = preg_replace( '/(<p.*?)(style=.+?[\'|"])|((width)=[\'"]+[0-9]+[\'"]+)|((height)=[\'"]+[0-9]+[\'"]+)/i', '$1' , $html);
$html = preg_replace( '/(<img.*?)(style=.+?[\'|"])|((width)=[\'"]+[0-9]+[\'"]+)|((height)=[\'"]+[0-9]+[\'"]+)/i', '$1' , $html);
$html = str_replace('<img ','<img style="max-width:100%;height:auto" ',$html);
return $html;
}
//获取正文图片
function getTextPhotos($text,$num=0){
$pattern="/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg|\.png]))[\'|\"].*?[\/]?>/";
$arrPhoto = $match[1];
$count = count($arrPhoto);
if($count>$num && $num){
for($i=0;$i<=$num-1;$i++){
$arrPhotos[$i]=$arrPhoto[$i];
}
return $arrPhotos;
}else{
return $arrPhoto;
}
}
/**
* 获取时区数组
*/
function getArrTimezone(){
'Pacific/Kwajalein' => '(GMT -12:00) International Date Line West',
'Pacific/Samoa' => '(GMT -11:00) Midway Island, Samoa',
'Pacific/Honolulu' => '(GMT -10:00) Hawaii',
'US/Alaska' => '(GMT -9:00) Alaska',
'US/Pacific' => '(GMT -8:00) Pacific Time (US & Canada); Tijuana',
'US/Mountain' => '(GMT -7:00) Mountain Time (US & Canada)',
'US/Arizona' => '(GMT -7:00) Arizona',
'Mexico/BajaNorte' => '(GMT -7:00) Chihuahua, La Paz, Mazatlan',
'US/Central' => '(GMT -6:00) Central Time (US & Canada)',
'America/Costa_Rica' => '(GMT -6:00) Central America',
'Mexico/General' => '(GMT -6:00) Guadalajara, Mexico City, Monterrey',
'Canada/Saskatchewan' => '(GMT -6:00) Saskatchewan',
'US/Eastern' => '(GMT -5:00) Eastern Time (US & Canada)',
'America/Bogota' => '(GMT -5:00) Bogota, Lima, Quito',
'US/East-Indiana' => '(GMT -5:00) Indiana (East)',
'Canada/Eastern' => '(GMT -4:00) Atlantic Time (Canada)',
'America/Caracas' => '(GMT -4:00) Caracas, La Paz',
'America/Santiago' => '(GMT -4:00) Santiago',
'Canada/Newfoundland' => '(GMT -3:30) Newfoundland',
'Canada/Atlantic' => '(GMT -3:00) Brasilia, Greenland',
'America/Buenos_Aires' => '(GMT -3:00) Buenos Aires, Georgetown',
'Atlantic/Cape_Verde' => '(GMT -1:00) Cape Verde Is.',
'Atlantic/Azores' => '(GMT -1:00) Azores',
'Africa/Casablanca' => '(GMT 0) Casablanca, Monrovia',
'Europe/Dublin' => '(GMT 0) Greenwich Mean Time : Dublin, Edinburgh, London',
'Europe/Amsterdam' => '(GMT +1:00) Amsterdam, Berlin, Rome, Stockholm, Vienna',
'Europe/Prague' => '(GMT +1:00) Belgrade, Bratislava, Budapest, Prague',
'Europe/Paris' => '(GMT +1:00) Brussels, Copenhagen, Madrid, Paris',
'Europe/Warsaw' => '(GMT +1:00) Sarajevo, Skopje, Warsaw, Zagreb',
'Africa/Bangui' => '(GMT +1:00) West Central Africa',
'Europe/Istanbul' => '(GMT +2:00) Athens, Beirut, Bucharest, Cairo, Istanbul ',
'Asia/Jerusalem' => '(GMT +2:00) Harare, Jerusalem, Pretoria',
'Europe/Kiev' => '(GMT +2:00) Helsinki, Kiev, Riga, Sofia, Tallinn, Vilnius',
'Asia/Riyadh' => '(GMT +3:00) Kuwait, Nairobi, Riyadh',
'Europe/Moscow' => '(GMT +3:00) Baghdad, Moscow, St. Petersburg, Volgograd',
'Asia/Tehran' => '(GMT +3:30) Tehran',
'Asia/Muscat' => '(GMT +4:00) Abu Dhabi, Muscat',
'Asia/Baku' => '(GMT +4:00) Baku, Tbilsi, Yerevan',
'Asia/Kabul' => '(GMT +4:30) Kabul',
'Asia/Yekaterinburg' => '(GMT +5:00) Yekaterinburg',
'Asia/Karachi' => '(GMT +5:00) Islamabad, Karachi, Tashkent',
'Asia/Calcutta' => '(GMT +5:30) Chennai, Calcutta, Mumbai, New Delhi',
'Asia/Katmandu' => '(GMT +5:45) Katmandu',
'Asia/Almaty' => '(GMT +6:00) Almaty, Novosibirsk',
'Asia/Dhaka' => '(GMT +6:00) Astana, Dhaka, Sri Jayawardenepura',
'Asia/Rangoon' => '(GMT +6:30) Rangoon',
'Asia/Bangkok' => '(GMT +7:00) Bangkok, Hanoi, Jakarta',
'Asia/Krasnoyarsk' => '(GMT +7:00) Krasnoyarsk',
'Asia/Hong_Kong' => '(GMT +8:00) 北京, 重庆, 香港, 乌鲁木齐',
'Asia/Irkutsk' => '(GMT +8:00) Irkutsk, Ulaan Bataar',
'Asia/Singapore' => '(GMT +8:00) Kuala Lumpar, Perth, Singapore, Taipei',
'Asia/Tokyo' => '(GMT +9:00) Osaka, Sapporo, Tokyo',
'Asia/Seoul' => '(GMT +9:00) Seoul',
'Asia/Yakutsk' => '(GMT +9:00) Yakutsk',
'Australia/Adelaide' => '(GMT +9:30) Adelaide',
'Australia/Darwin' => '(GMT +9:30) Darwin',
'Australia/Brisbane' => '(GMT +10:00) Brisbane, Guam, Port Moresby',
'Australia/Canberra' => '(GMT +10:00) Canberra, Hobart, Melbourne, Sydney, Vladivostok',
'Asia/Magadan' => '(GMT +11:00) Magadan, Soloman Is., New Caledonia',
'Pacific/Auckland' => '(GMT +12:00) Auckland, Wellington',
'Pacific/Fiji' => '(GMT +12:00) Fiji, Kamchatka, Marshall Is.',
);
}
/**
* 判断图片上传格式是否为图片 return返回文件后缀
*/
function getImagetype($filename){
$file = fopen($filename, 'rb');
$bin = fread($file, 2); //只读2字节
$strInfo = unpack('C2chars', $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
// dd($typeCode);
$fileType = '';
switch ($typeCode) {
case 255216:
$fileType = 'jpg';
break;
case 7173:
$fileType = 'gif';
break;
case 6677:
$fileType = 'bmp';
break;
case 13780:
$fileType = 'png';
break;
default:
$fileType = '只能上传图片类型格式';
}
// if ($strInfo['chars1']=='-1' AND $strInfo['chars2']=='-40' ) return 'jpg';
// if ($strInfo['chars1']=='-119' AND $strInfo['chars2']=='80' ) return 'png';
return $fileType;
}
/**
* 根据ID获取目录形式。例如 0/0
*/
function getDirPath($projectid){
$menu2 = intval($projectid / 1000);
$menu1 = intval($menu2 / 1000);
$path = $menu1 . '/' . $menu2;
return $path;
}
/**
* 等比计算
*/
function dengBi($width,$height,$maxX=1280,$maxY=1280){
//计算缩放比例
$scale = ($maxX/$width)>($maxY/$height)?$maxY/$height:$maxX/$width;
//计算缩放后的尺寸
$sWidth = floor($width*$scale);
$sHeight = floor($height*$scale);
'w'=>$sWidth,
'h'=>$sHeight,
);
}
/**
* 编辑器存在有html标签的空内容
*/
function emptyText($text=''){
$text = tsTrim($text);
$text = tsTrim($text);
return $text;
}
/**
* 更新app导航和我的导航
* @param $appkey
* @param $appname
*/
function upAppNav($appkey,$appname){
if($appkey && $appname){
$strAbout = require_once 'app/'.$appkey.'/about.php';
if($strAbout['isappnav']==1){
#更新APP导航名称
$arrNav = include 'data/system_appnav.php';
if($arrNav[$appkey]){
$arrNav[$appkey] = $appname;
}else{
$appkey=>$appname,
);
}
fileWrite('system_appnav.php','data',$arrNav);
$GLOBALS['tsMySqlCache']->set('system_appnav',$arrNav);
}
}
if($strAbout['ismy']==1){
#更新我的社区导航
$arrMy = include 'data/system_mynav.php';
if($arrMy[$appkey]){
$arrMy[$appkey] = $appname;
}else{
$appkey=>$appname,
);
}
fileWrite('system_mynav.php','data',$arrMy);
$GLOBALS['tsMySqlCache']->set('system_mynav',$arrMy);
}
}
}
}
/**
* 更新app配置选项
* @param $app
* @param array $option
*/
function upAppOptions
($app,array $option){
fileWrite($app.'_options.php','data',$option);
$GLOBALS['tsMySqlCache']->set($app.'_options',$option);
}
/**
* 获取app配置选项
* @param $app
* @return mixed
*/
function getAppOptions($app){
$strOption = fileRead($app.'_options.php');
if($strOption==''){
$strOption = $GLOBALS['tsMySqlCache']->get($app.'_options');
}
return $strOption;
}
/**
* 获取项目PC网址
*
* @param [type] $ptable
* @param [type] $pid
* @return void
*/
function getProjectUrl($ptable,$pid){
'topic'=>tsUrl
('topic','show',array('id'=>$pid)),//帖子
'article'=>tsUrl
('article','show',array('id'=>$pid)),//文章
'photo'=>tsUrl
('photo','show',array('id'=>$pid)),//图片
'weibo'=>tsUrl
('weibo','show',array('id'=>$pid)),//唠叨
'video'=>tsUrl
('video','show',array('id'=>$pid)),//视频
'audio'=>tsUrl
('audio','show',array('id'=>$pid)),//音频
'event'=>tsUrl
('event','show',array('id'=>$pid)),//活动
'vote'=>tsUrl
('vote','show',array('id'=>$pid)),//投票
'study_lesson'=>tsUrl
('study','lesson',array('id'=>$pid)),//课时
'shop_goods'=>tsUrl
('shop','goods',array('id'=>$pid)),//商品
'review'=>tsUrl
('review','show',array('id'=>$pid)),//点评1
'review_comment'=>tsUrl
('review','comment',array('id'=>$pid)),//点评2
);
return $arrProjectUrl[$ptable];
}
/**
* 获取uniapp页面路径
*
* @param [type] $ptable
* @param [type] $pid
* @return void
*/
function getUniappPage($ptable,$pid){
'topic'=>'../topic/show?topicid='.$pid,//帖子
'article'=>'../article/show?articleid='.$pid,//文章
'video'=>'../video/show?videoid='.$pid,//视频
'event'=>'../event/show?eventid='.$pid,//活动
'ask'=>'../ask/show?askid='.$pid,//问答
'weibo'=>'../weibo/show?weiboid='.$pid,//唠叨
'attach'=>'../attach/show?attachid='.$pid,//附件
'vote'=>'../vote/show?voteid='.$pid,//投票
'audio'=>'../audio/show?audioid='.$pid,//音频
);
return $arrProjectUrl[$ptable];
}
/**
* 取0以上的整数,GET数字变量专用
*
* @param [type] $number
* @param integer $min
* @param integer $default_number
* @return void
*/
function tsIntval($number,$min=0,$default_number=0){
#判断是否空变量
if(empty($number)==true){
$number = 0;
}
#判断是否为数字,或者判断数字中是否有小数点
ts404();
}
#转为整型
#如果是负整数
if($number<0){
ts404();
}
//最小值
if($number==0 && $min>0){
$number = $min;
}
//默认值
if($default_number>0 && $number==0){
$number = $default_number;
}
return $number;
}
/**
* 只保留中文,英文以及数字
*/
function match_chinese($chars,$encoding='utf8'){
$pattern =($encoding=='utf8')?'/[\x{4e00}-\x{9fa5}a-zA-Z0-9]/u':'/[\x80-\xFF]/';
return join('',$result[0]);
}
/**
* 返回13位时间戳
*/
function getUnixTimestamp (){
}
/**
* vaptcha人机验证
*
* @param string $token
* @param integer $scene
* @param [type] $url
* @return void
*/
function vaptcha(string $token,$scene,$url){
$json = sendDataByCurl
($url,array(
'id'=>$GLOBALS['TS_SITE']['vaptcha_vid'],
'secretkey'=>$GLOBALS['TS_SITE']['vaptcha_key'],
'scene'=>$scene,
'token'=>$token,
'ip'=>getIp(),
));
return $res;
}
/**
* 根据省份获取快递费用
*
* @param [type] $province
* @return void
*/
function getPostPrice($province){
if(in_array($province,array('新疆维吾尔自治区','西藏自治区','青海省','宁夏回族自治区','甘肃省','云南省','贵州省','海南省'))){
$postprice = 20;
$postprice = 300;
}else{
$postprice = 0;
}
return $postprice;
}
/**
* 替代trim
*
* @param [type] $text
* @return void
*/
function tsTrim($text){
return trim((string
) $text);
}