123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- <?php
- //版本:1.2.3
- define('in_skycaiji2cms', 1);//权限
- include 'head.php';
- class skycaiji2cms{
- public $charset;//编码
-
- public $pluginPath;//插件根目录
- public $pluginUrl;//插件根网址
- public $pluginConfig;//插件配置
-
- public $funcError;//报错函数
- public $funcFormPost;//表单提交函数
- public $funcApiPost;//接口提交函数
- public $funcGetPost;//获取$_POST参数函数
-
- public $openForm;//是否使用表单设置
- public $formHeadHtml;//表单头部html
- public $formFootHtml;//表单尾部html
- public $formUrl='';//form表单地址
- public $formRequired;//表单必填项
- public $formOptional;//表单选填项
-
- public $apiUrl;//接口地址
- public $bodyEndHtml;//结束html
-
- public $pluginLang;//语言包,不同编码
-
- public $static;//静态资源
-
- //初始化
- public function __construct($pluginPath,$pluginUrl,$charset='utf-8',$openForm=false){
- $this->pluginPath=rtrim($pluginPath,'/\\').DIRECTORY_SEPARATOR;
- $this->pluginUrl=rtrim($pluginUrl,'/\\').'/';
- $this->openForm=$openForm?true:false;
-
- $this->charset=strtolower($charset);
-
- $langFile=$this->pluginPath.'skycaiji2cms/lang.php';
- if(file_exists($langFile)){
- $this->pluginLang=include $langFile;
- }
-
- $this->static=array(
- 'css'=>$this->pluginUrl.'skycaiji2cms/css.css'
- );
- }
- //表单是post提交
- public function formIsPost(){
- $sub=$this->doGetPost('formsub');
- if(!empty($sub)){
- return true;
- }else{
- return false;
- }
- }
- //表单提交
- public function formPost(){
- $data=array(
- 'apikey'=>$this->doGetPost('apikey'),
- 'author'=>$this->doGetPost('author'),
- 'apitype'=>$this->doGetPost('apitype')
- );
- if(empty($data['author'])){
- $this->doError($this->pluginLang['empty_author']);
- }
- if(empty($data['apikey'])){
- $this->doError($this->pluginLang['empty_apikey']);
- }
- $this->doFormPost($data);
- }
- //表单html页面
- public function formView(){
- $this->pluginConfig=$this->setPluginConfig($this->pluginConfig);
- $scj2cms=$this;
- include $this->pluginPath.'skycaiji2cms/form.php';
- }
- //接口提交
- public function apiPost(){
- if(strtolower($_SERVER['REQUEST_METHOD'])!='post'){
- $this->returnJson(0,$this->pluginLang['error_request']);
- }
- $this->pluginConfig=$this->setPluginConfig($this->pluginConfig);
- if(empty($this->pluginConfig)){
- $this->returnJson(0,$this->pluginLang['empty_plugin_config']);
- }
- if(empty($this->pluginConfig['author'])){
- $this->returnJson(0,$this->pluginLang['empty_author']);
- }
- if(empty($this->pluginConfig['apikey'])){
- $this->returnJson(0,$this->pluginLang['empty_apikey']);
- }
- if(empty($this->pluginConfig['apitype'])){
- //普通
- if($_GET['apikey']!=md5($this->pluginConfig['apikey'])){
- $this->returnJson(0,$this->pluginLang['error_apikey']);
- }
- }elseif($this->pluginConfig['apitype']=='safe'){
- //安全
- $apiTime=$this->doGetPost('api_time');
- $apiTime=intval($apiTime);
- $apiSign=$this->doGetPost('api_sign');
-
- if($apiSign!=md5($apiTime.$this->pluginConfig['apikey'])){
- $this->returnJson(0,$this->pluginLang['error_api_sign']);
- }elseif(time()-$apiTime>600){
- $this->returnJson(0,$this->pluginLang['error_timeout'].date('Y-m-d H:i:s',$apiTime));
- }
- }else{
- $this->returnJson(0,$this->pluginLang['error_apitype']);
- }
-
- $this->doApiPost();
- }
- public function returnJson($id,$error='',$target='',$desc=''){
- //输出json数据
- ob_clean();
- $data=array(
- 'id'=>$id,
- 'target'=>$target,
- 'desc'=>$desc,
- 'error'=>$error,
- );
- if($data['error']){
- $data['error']=$this->pluginLang['error_return'].$data['error'];
- }
-
- if($this->charset!='utf-8'){
- foreach ($data as $k=>$v){
- $data[$k]=iconv($this->charset,'utf-8'.'//IGNORE',$v);
- }
- }
- header('content-type:application/json;charset=utf-8');
- $data=json_encode($data);
- exit($data);
- }
- //随机一行
- public function randLine($str){
- $list=array();
- if($str&&preg_match_all('/[^\r\n]+/',$str,$list)){
- $list=$list[0];
- $list=array_filter($list);
- $list=array_values($list);
- }else{
- $list=array();
- }
- $rand=array_rand($list,1);
- $rand=$list[$rand];
- return $rand;
- }
-
- public function curl($url,$headers=array(),$options=array(),$postData=null){
- $headers=is_array($headers)?$headers:array();
- $options=is_array($options)?$options:array();
-
- $options['timeout']=intval($options['timeout']);
- $options['timeout']=$options['timeout']>0?$options['timeout']:20;//连接超时
-
- $ch = curl_init ();
- curl_setopt ( $ch, CURLOPT_URL, $url );
- curl_setopt ( $ch, CURLOPT_TIMEOUT, $options['timeout'] );
- curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT , 10 );//响应超时
- curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
- curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 );
- curl_setopt ( $ch, CURLOPT_HEADER, 1 );
- if($options['nobody']){
- //不返回正文
- curl_setopt($ch, CURLOPT_NOBODY, true);
- }
- if($options['useragent']){
- //浏览器标识
- curl_setopt($ch, CURLOPT_USERAGENT, $options['useragent']);
- }
- //忽略https模式
- curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE );
- curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, FALSE );
- //设置头信息
- if(!empty($headers)&&count($headers)>0){
- curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
- }
-
- if(isset($postData)&&$postData!==false){
- //不是null和false是post模式
- curl_setopt ( $ch, CURLOPT_POST, 1 );
- if(is_array($postData)){
- //必须转成url字符串才是网页表单类型application/x-www-form-urlencoded
- $postData=http_build_query($postData);
- }
- curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postData );
- }
-
- $body = curl_exec ( $ch );
-
- $headerPos=strpos($body, "\r\n\r\n");//头信息定位索引
- if($headerPos!==false){
- $headerPos=intval($headerPos)+strlen("\r\n\r\n");//加上换行的长度等于头大小
- }
- $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);//头大小
- $headerSize=intval($headerSize);
- if($headerSize<$headerPos){
- $headerSize=$headerPos;
- }
-
- $header = substr($body, 0, $headerSize);//头信息
- $body = substr($body, $headerSize);//body内容
-
- $code=curl_getinfo($ch,CURLINFO_HTTP_CODE);//状态码
- $code=intval($code);
- curl_close ( $ch );
-
- $data=array('success'=>false,'header'=>$header);
- if($code>=200&&$code<300){
- $data['success']=true;
- $data['body']=$body;
- }
- return $data;
- }
-
- //运行错误
- protected function doError($msg){
- call_user_func($this->funcError, $msg);
- }
- //运行formPost
- protected function doFormPost($data){
- call_user_func($this->funcFormPost, $data);
- }
- //运行apiPost
- protected function doApiPost(){
- call_user_func($this->funcApiPost);
- }
- //获取post参数
- protected function doGetPost($key){
- if(empty($this->funcGetPost)){
- return isset($_POST[$key])?$_POST[$key]:'';
- }else{
- return call_user_func($this->funcGetPost,$key);
- }
- }
- //设置插件配置
- protected function setPluginConfig($pluginConfig){
- $pluginConfig=(array)$pluginConfig;
- if(empty($pluginConfig)){
- $pluginConfig=array();
- }
- return $pluginConfig;
- }
- //判断https
- public function isSsl(){
- $server = $_SERVER;
- if (isset($server['HTTPS']) && ('1' == $server['HTTPS'] || 'on' == strtolower($server['HTTPS']))) {
- return true;
- } elseif (isset($server['REQUEST_SCHEME']) && 'https' == $server['REQUEST_SCHEME']) {
- return true;
- } elseif (isset($server['SERVER_PORT']) && ('443' == $server['SERVER_PORT'])) {
- return true;
- } elseif (isset($server['HTTP_X_FORWARDED_PROTO']) && 'https' == $server['HTTP_X_FORWARDED_PROTO']) {
- return true;
- }
- return false;
- }
- //域名
- public function getHost(){
- $host='';
- if (isset($_SERVER['HTTP_X_REAL_HOST'])) {
- $host = $_SERVER['HTTP_X_REAL_HOST'];
- } else {
- $host = $_SERVER['HTTP_HOST'];
- }
- return $host;
- }
- }
|