184 lines
4.3 KiB
PHP
184 lines
4.3 KiB
PHP
<?php
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
|
|
/**
|
|
* Apilib
|
|
*/
|
|
|
|
|
|
class Apilib extends CI_Controller
|
|
{
|
|
|
|
private $CI;
|
|
|
|
public $returntype;
|
|
|
|
function __construct()
|
|
{
|
|
$this->CI = & get_instance();
|
|
|
|
}
|
|
|
|
function callapi($data ='', $returntype='xml')
|
|
{
|
|
|
|
$libraryname = element('api_name', $data);
|
|
$this->returntype = $returntype;
|
|
|
|
if (strtolower(element('api_method', $data)) == 'get' && strtolower($this->CI->input->method()) != 'get')
|
|
{
|
|
$this->CI->apilib->make_error("GET 방식으로 넘어오지 않았습니다");
|
|
}
|
|
if (strtolower(element('api_method', $data)) == 'post' && strtolower($this->CI->input->method()) != 'post')
|
|
{
|
|
$this->CI->apilib->make_error("POST 방식으로 넘어오지 않았습니다");
|
|
}
|
|
|
|
if ($returntype == 'xml') {
|
|
$result = $this->xml($libraryname);
|
|
}
|
|
else if ($returntype == 'json') {
|
|
$result = $this->json($libraryname);
|
|
}
|
|
else if ($returntype == 'json2') {
|
|
$result = $this->json2($libraryname);
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
|
|
function array2XML($arr, $root)
|
|
{
|
|
$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><{$root}></{$root}>");
|
|
if(is_array($arr)){
|
|
$this->array2XML2($arr, $xml);
|
|
}
|
|
return $xml->asXML();
|
|
}
|
|
|
|
function array2XML2($arr, $obj)
|
|
{
|
|
if(is_array($arr)){
|
|
foreach($arr as $k => $v){
|
|
if(is_array($v)){
|
|
if(is_numeric($k)){
|
|
${$k} = $obj->addChild("data");
|
|
$this->array2XML2($v, ${$k});
|
|
}else{
|
|
${$k} = $obj->addChild($k);
|
|
$this->array2XML2($v, ${$k});
|
|
}
|
|
}else{
|
|
$node = $obj->addChild($k);
|
|
$node = dom_import_simplexml($node);
|
|
$no = $node->ownerDocument;
|
|
$node->appendChild($no->createCDATASection($v));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function urlencode_data($arg)
|
|
{
|
|
if(is_array($arg)){
|
|
foreach($arg as $k => $v){
|
|
$arg[$k] = $this->urlencode_data($v);
|
|
}
|
|
}else{
|
|
if(gettype($arg) == "string")
|
|
$arg = urlencode($arg);
|
|
if(is_numeric($arg))
|
|
$arg = (float)$arg;
|
|
if(is_int($arg))
|
|
$arg = (int)$arg;
|
|
}
|
|
|
|
return $arg;
|
|
}
|
|
|
|
function make_error($result_text)
|
|
{
|
|
$arr = array();
|
|
$arr['result'] = "error";
|
|
$arr['result_text'] = $result_text;
|
|
|
|
$this->make_error_log($result_text);
|
|
|
|
$returntype = 'show_' . $this->returntype;
|
|
echo $this->$returntype($arr);
|
|
exit;
|
|
}
|
|
|
|
function make_error_log($el_result)
|
|
{
|
|
$strlen = strlen(admin_url());
|
|
if(substr($this->CI->input->SERVER('PHP_SELF'), 0, $strlen) == admin_url()) {
|
|
return;
|
|
}
|
|
|
|
$vars = ($this->CI->input->method() == "post") ? $_POST : $_GET;
|
|
$el_vars_arr = array();
|
|
foreach($vars as $k => $v){
|
|
$el_vars_arr[] = $k . '=' . $v;
|
|
}
|
|
|
|
$el_vars = implode("&", $el_vars_arr);
|
|
$this->CI->load->model('Api_error_log_model');
|
|
$insertdata = array(
|
|
'el_ip' => $this->CI->input->ip_address(),
|
|
'el_result' => $el_result,
|
|
'el_self' => $this->CI->input->SERVER('PHP_SELF'),
|
|
'el_vars' => $el_vars,
|
|
'el_regdate' => cdate('Y-m-d H:i:s'),
|
|
);
|
|
$this->CI->Api_error_log_model->insert($insertdata);
|
|
}
|
|
|
|
function xml($libraryname)
|
|
{
|
|
header("Content-Type: text/xml;charset=utf-8");
|
|
$this->CI->load->library('apis/' . $libraryname);
|
|
$result = $this->CI->{$libraryname}->main();
|
|
return $this->array2XML($result, 'info');
|
|
}
|
|
|
|
function json($libraryname)
|
|
{
|
|
header("Content-Type: text/html;charset=utf-8");
|
|
$this->CI->load->library('apis/' . $libraryname);
|
|
$result = $this->CI->{$libraryname}->main();
|
|
$result = $this->urlencode_data($result);
|
|
return json_encode($result);
|
|
}
|
|
|
|
function json2($libraryname)
|
|
{
|
|
header("Content-Type: text/html;charset=utf-8");
|
|
$this->CI->load->library('apis/' . $libraryname);
|
|
$result = $this->CI->{$libraryname}->main();
|
|
$result = $this->urlencode_data($result);
|
|
return urldecode(json_encode($result));
|
|
}
|
|
|
|
function show_xml($arr)
|
|
{
|
|
header("Content-Type: text/xml;charset=utf-8");
|
|
return $this->array2XML($arr, 'info');
|
|
}
|
|
|
|
function show_json($arr)
|
|
{
|
|
header("Content-Type: text/html;charset=utf-8");
|
|
$result = $this->urlencode_data($arr);
|
|
return json_encode($result);
|
|
}
|
|
|
|
function show_json2($arr)
|
|
{
|
|
header("Content-Type: text/html;charset=utf-8");
|
|
$result = $this->urlencode_data($arr);
|
|
return urldecode(json_encode($result));
|
|
}
|
|
}
|
|
|