You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

381 lines
14 KiB

2 months ago
<?php
include_once(dirname(dirname(__FILE__))."/config/boot.inc.php");
include_once(SERVER_ROOT."/library/viewtpl/DisplaySmarty.php");
include_once(SERVER_ROOT."/library/viewtpl/DisplayJson.php");
include_once(SERVER_ROOT."/library/viewtpl/DisplayNone.php");
include_once(SERVER_ROOT."/library/autoLoad.php");
class publicBase {
protected $para;
public $view = array();
protected $error;
protected $viewFormat='html';
protected $viewTpl='';
/**
* HTTP协议中的GET
* @param string $argv
*/
protected function get($argv) {
return empty($argv) ? $_GET : $_GET[$argv];
if(empty($argv)) return false;
if(empty($_GET[$argv])) return '';
foreach($_GET[$argv] as $k => &$v) {
$v = get_magic_quotes_gpc() ? trim(stripslashes($v)) : trim($v);
}
return $_GET[$argv];
}
/**
* HTTP协议中的POST
* @param string $argv
*/
protected function post($argv) {
return empty($argv) ? $_POST : $_POST[$argv];
if(empty($argv)) return false;
if(empty($_POST[$argv])) return array();
foreach($_POST[$argv] as $k => &$v) {
$v = get_magic_quotes_gpc() ? trim(stripslashes($v)) : trim($v);
}
return $_POST[$argv];
}
/**
* HTTP协议中的Cookie
* @param string $argv
*/
protected function cookie($argv) {
if(empty($argv)) return false;
if(empty($_COOKIE[$argv])) return array();
foreach($_COOKIE[$argv] as $k => &$v) {
$v = get_magic_quotes_gpc() ? trim(stripslashes($v)) : trim($v);
}
return $_COOKIE[$argv];
}
/**
* 调用__call给对象属性赋值或取值.
*
* @param string $func
* @param array $args
* @return mixed
*/
public function __call($func, $args) {
if(strtolower(substr($func, 0, 3)) === 'set') {
$var = strtolower(substr($func, 3, 1)).substr($func, 4);
if($var=='') return;
$this->$var = $args[0];
} elseif(strtolower(substr($func, 0, 3)) === 'get') {
$var = strtolower(substr($func, 3, 1)).substr($func, 4);
if($var=='') return;
return $this->$var;
}
return;
}
/**
* 给对象属性赋值.
*
* @param string $var
* @param mixed $value
* @return boolean
*/
public function __set($var, $value) {
if($var=='') return false;
$this->$var = $value;
return true;
}
/**
* 获取对象属性
*
* @param mixed $var
* @return mixed
*/
public function __get($var) {
if($var=='') return;
return $this->$var;
}
public function ajax($message, $nexturl='') {
if(empty($message)) return false;
$result = array();
$result['status'] = 1;
$result['info'] = $message;
$result['nexturl'] = $nexturl;
header("Content-Type:text/html; charset=utf-8");
exit(json_encode($result));
}
/**
* Ajax调用返回
*
* 返回json数据,供前台ajax调用
* @param array $data 返回数组,支持数组
* @param string $info 返回信息, 默认为空
* @param boolean $status 执行状态, 1为true, 0为false
* @return string
*/
public function ajax_json($status = 1, $info = null, $data = array()) {
if($this->bd_sign) {
if($status == 1) $error_no = 0;
if($status == 0) $error_no = -1;
$this->json_result($error_no, $info, $data);
} else {
$result = array();
$result['status'] = $status;
$result['info'] = !is_null($info) ? $info : '';
$result['data'] = $data;
}
header("Content-Type:text/html; charset=utf-8");
if($_POST['tt']=='form') {
$display = new DisplaySmarty('public/message_box.html');
$display->setView($result);
$display->execute();
exit;
} else {
exit(json_encode($result));
}
}
/* 弹窗提示 */
public function show_message($msg, $nexturl='', $type='js') {
header("Content-Type:text/html;charset=utf-8");
if($this->post('_token')!='') { // 开放接口
$this->ajax_json(1, $msg);
exit;
}
if($type=='json') {
if($nexturl!='') {
echo json_encode(array('msg'=>$msg, 'nexturl'=>$nexturl));
} else {
echo json_encode(array('msg'=>$msg));
}
exit;
}
if(!empty($nexturl)) {
echo "<script language='javascript'>alert('".str_replace("\n", "", $msg)."')</script>";
if($nexturl=='goback') {
echo "<script language='javascript'>history.go(-1)</script>";
} else {
echo "<meta http-equiv=\"Refresh\" content=\"0;URL=$nexturl\" />";
}
}else{
echo "<script language='javascript'>setTimeout(function(){alert('".str_replace("\n", "", $msg)."');}, 1000);</script>";
}
exit;
}
/**
* 当前秒、毫秒数
* @return number
*/
public function microtime_float() {
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
/**
*
* @param number $status
* @param unknown $info
* @param array $data
* @param string $nexturl
*/
public function ajax_json_data($status = 1, $info = null, $data = array(), $nexturl="") {
$result = array();
$result['status'] = $status;
$result['info'] = !is_null($info) ? $info : '';
$result['data'] = $data;
if($nexturl) {
$result['nexturl'] = $nexturl;
}
header("Content-Type:text/html; charset=utf-8");
if($_POST['tt']=='form') {
$display = new DisplaySmarty('public/message_box.html');
$display->setView($result);
$display->execute();
exit;
} else {
exit(json_encode($result));
}
}
/**
* 返回json结果(百度学术专用,其他请用ajax_json()方法)
* @param number $error_no 0(成功) -1(失败) -2(该订单已提交过)
* @param unknown $message
* @param array $data
*/
public function json_result($error_no = 0, $message = null, $data = array()) {
$result = array();
$result['error_no'] = $error_no;
$result['message'] = !is_null($message) ? $message : '';
$result['data'] = $data;
$log_path = BD_XUESHU_LOG_PATH.date("Y-m-d")."/json_result.log";
$log_dir = dirname($log_path);
if(!is_dir($log_dir)) {
mkdir($log_dir, 0755, true);
chown($log_dir, 'nobody');
chgrp($log_dir, 'nobody');
}
error_log(date('Y-m-d H:i:s')."|json_result|".json_encode($result)."|"."\n", 3, $log_path);
header("Content-Type:text/html; charset=utf-8");
exit(json_encode($result));
}
/**
* 获取Linux本机IP真实地址
* @return unknown|string
*/
public function getServerIp() {
$server_ip = '127.0.0.1';
// 执行命令
$result = shell_exec("/sbin/ifconfig");
// 匹配ip 根据你机器的具体情况, 可能要对“inet ”进行调整, 如“addr:”
preg_match_all("/[\s\S]*?inet (\d+\.\d+\.\d+\.\d+)/", $result, $match);
if(!$match) preg_match_all("/[\s\S]*?addr:(\d+\.\d+\.\d+\.\d+)/", $result, $match);
if(!$match) return $server_ip;
foreach ($match [0] as $k => $v) {
if($match[1][$k] == "127.0.0.1") continue;
if(preg_match("/docker\d+/", $match[0][$k])) continue;
$server_ip = $match[1][$k];
break;
}
return $server_ip;
}
/**
* 在背景图上生成二维码
* $bg_img 背景图地址
* $url 二维码内容url
* $x 二维码在背景图片上位置的左边距,单位:px (例:436)
* $y 二维码在背景图片上位置的上边距,单位:px (例:1009)
* $qrcode_size 二维码(正方形)的尺寸,单位:px (例:238)
* $white_edge 二维码白边大小
* $echo_path 生成的二维码海报图片存放路径
**/
public function getActivityImg($bg_img, $url, $x=0, $y=0, $qrcode_size, $white_edge=0, $echo_path){
$errorCorrectionLevel = QR_ECLEVEL_L; //容错级别
$matrixPointSize = 2; //生成二维码图片大小
$qrcode = "qrcod.png";
//生成二维码图片
//参数内容:二维码储存内容,生成存储,防错等级,二维码大小,白边大小
QRcode::png($url, $qrcode, $errorCorrectionLevel, $matrixPointSize, $white_edge);
//合背景图和二维码
$background = imagecreatefromstring(file_get_contents($bg_img));
$qrcode_res = imagecreatefromstring(file_get_contents($qrcode));
list($src_w, $src_h) = getimagesize($qrcode);
//参数内容:目标图象连接资源,源图象连接资源,目标X坐标点,目标Y坐标点,源的X坐标点,源的Y坐标点,目标宽度,目标高度,源图象的宽度,源图象的高度
imagecopyresampled($background, $qrcode_res, $x, $y, 0, 0, $qrcode_size, $qrcode_size, $src_w, $src_h);
//输出到本地文件夹,返回生成图片的路径
if(!is_dir(dirname($echo_path))){
mkdir(dirname($echo_path), 0755, true);
chown(dirname($echo_path), 'nobody');
chgrp(dirname($echo_path), 'nobody');
}
imagepng($background,$echo_path);
imagedestroy($background);
imagedestroy($qrcode_res);
return $echo_path;
}
/**
* 将两张图片合成一张
* $bg_path 背景图地址
* $poster 图片2
* $x 图片2在背景图片上位置的左边距,单位:px (例:436)
* $y 图片2在背景图片上位置的上边距,单位:px (例:1009)
* $size 图片2(正方形)的尺寸,单位:px (例:238)
* $echo_path 生成的新图片存放路径
**/
public function createPoster($bg_path, $poster, $x, $y, $poster_w, $poster_y, $echo_path, $is_base64 = 0){
$background = imagecreatefromstring(file_get_contents($bg_path));
$poster_res = imagecreatefromstring(file_get_contents($poster));
//参数内容:目标图象连接资源,源图象连接资源,目标X坐标点,目标Y坐标点,源的X坐标点,源的Y坐标点,目标宽度,目标高度,源图象的宽度,源图象的高度
imagecopyresampled($background, $poster_res, $x, $y, 0, 0, $poster_w, $poster_y, $poster_w, $poster_y);
//输出到本地文件夹,返回生成图片的路径
if(!is_dir(dirname($echo_path))){
mkdir(dirname($echo_path), 0755, true);
chown(dirname($echo_path), 'nobody');
chgrp(dirname($echo_path), 'nobody');
}
if($is_base64){
ob_start ();
//imagepng展示出图片
imagepng ($background);
$imageData = ob_get_contents ();
ob_end_clean ();
//得到这个结果,可以直接用于前端的img标签显示
$res = "data:image/jpeg;base64,". base64_encode ($imageData);
}else{
imagepng($background,$echo_path);
$res = $echo_path;
}
imagedestroy($background);
imagedestroy($poster_res);
return $res;
}
/**
* 给图片加文字
* $bg_path 背景图地址
* $echo_path 生成的新图片存放路径
**/
public function imageAddText($bg_path, $text, $x, $y, $font_size, $echo_path){
//将品牌名称和广告语写到背景海报上
$background = imagecreatefromstring(file_get_contents($bg_path));
$font = FONTS."simhei.ttf";
$black = imagecolorallocate($background, 0, 0, 0);//字体颜色黑色
$str = mb_convert_encoding($text, "", "utf-8");
imagefttext($background, $font_size, 0, $x, $y, $black, $font, $str);
imagepng($background,$echo_path);
imagedestroy($background);
return $echo_path;
}
/**
* 判断是不是手机移动端
*/
public function isMobileClient() {
// 如果有HTTP_X_WAP_PROFILE则一定是移动设备
if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) return true;
// 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
if (isset ($_SERVER['HTTP_VIA'])) return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
// 判断手机发送的客户端标志,兼容性有待提高,把常见的类型放到前面
if (isset ($_SERVER['HTTP_USER_AGENT'])) {
$clientkeywords = array ('android', 'iphone', 'samsung', 'ucweb', 'wap', 'mobile', 'nokia', 'sony', 'ericsson', 'mot', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'ipod', 'blackberry', 'meizu', 'netfront', 'symbian', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp');
if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) return true; // 从HTTP_USER_AGENT中查找手机浏览器的关键字
}
// 协议法,因为有可能不准确,放到最后判断
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;
}
}