我有一个问题与json codeigniter休息它没有关闭标签

时间:2013-04-09 12:04:38

标签: api codeigniter rest

我遇到了json codeigniter rest

的问题

我正在调用服务器,问题是它没有关闭json标签

s,USA“,”clientUID“:”7“,”email“:null,”idipad“:”2“,”dateModified“:null},{”id“:”19“,”uid“: null,“name”:“Wayne Corporation,Inc。”,“phone”:“932345324”,“address”:“Second st。 312,Gotham City“,”clientUID“:”7“,”email“:”waynecorp@gmail.com“,”idipad“:”1“,”dateModified“:null}]

它错过了最后的}

这是创建响应的代码:

$this->response(array('login'=>'login success!','user_admin_id'=>$user_id,'client'=>$client,'users'=>$users,'projects'=>$projects,'plans'=>$plans,'meetings'=>$meetings,'demands'=>$demands,'tasks'=>$tasks,'presences'=>$presences,'contractors'=>$contractors,'companies'=>$companies), 200);

这是使用curl的客户端调用:

$这 - > curl->创建( 'http://dev.onplans.ch/onplans/index.php/api/example/login/format/json');

// Option & Options
$this->curl->option(CURLOPT_BUFFERSIZE, 10);
$this->curl->options(array(CURLOPT_BUFFERSIZE => 10));

// More human looking options
$this->curl->option('buffersize', 10);

// Login to HTTP user authentication
$this->curl->http_login('admin', '1234');

// Post - If you do not use post, it will just run a GET request
//$post = array('remember'=>'true','email'=>'admin.architect@onplans.ch','password'=>'password');
        $post = array('remember'=>'true','email'=>'admin.architect@onplans.ch','password'=>'password');
$this->curl->post($post);

// Cookies - If you do not use post, it will just run a GET request
$vars = array('remember'=>'true','email'=>'manuel@ffff.com','password'=>'password');
$this->curl->set_cookies($vars);

// Proxy - Request the page through a proxy server
// Port is optional, defaults to 80
//$this->curl->proxy('http://example.com', 1080);
//$this->curl->proxy('http://example.com');

// Proxy login
//$this->curl->proxy_login('username', 'password');

// Execute - returns responce
echo $this->curl->execute();

// Debug data ------------------------------------------------

// Errors
$this->curl->error_code; // int
$this->curl->error_string;


        print_r('error :::::LOGINN REMOTE:::::'.$this->curl->error_string);
// Information
$this->curl->info; // array

       print_r('info :::::::::::::'.$this->curl->info);

响应属于来自phil的其余api codeigniter

/**
 * Response
 *
 * Takes pure data and optionally a status code, then creates the response.
 *
 * @param array $data
 * @param null|int $http_code
 */
public function response($data = array(), $http_code = null)
{
    global $CFG;

    // If data is empty and not code provide, error and bail
    if (empty($data) && $http_code === null)
    {
        $http_code = 404;

        // create the output variable here in the case of $this->response(array());
        $output = NULL;
    }

    // If data is empty but http code provided, keep the output empty
    else if (empty($data) && is_numeric($http_code))
    {
        $output = NULL;
    }

    // Otherwise (if no data but 200 provided) or some data, carry on camping!
    else
    {
        // Is compression requested?
        if ($CFG->item('compress_output') === TRUE && $this->_zlib_oc == FALSE)
        {
            if (extension_loaded('zlib'))
            {
                if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) AND strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE)
                {
                    ob_start('ob_gzhandler');
                }
            }
        }

        is_numeric($http_code) OR $http_code = 200;

        // If the format method exists, call and return the output in that format
        if (method_exists($this, '_format_'.$this->response->format))
        {
            // Set the correct format header
            header('Content-Type: '.$this->_supported_formats[$this->response->format]);

            $output = $this->{'_format_'.$this->response->format}($data);
        }

        // If the format method exists, call and return the output in that format
        elseif (method_exists($this->format, 'to_'.$this->response->format))
        {
            // Set the correct format header
            header('Content-Type: '.$this->_supported_formats[$this->response->format]);

            $output = $this->format->factory($data)->{'to_'.$this->response->format}();
        }

        // Format not supported, output directly
        else
        {
            $output = $data;
        }
    }

    header('HTTP/1.1: ' . $http_code);
    header('Status: ' . $http_code);

    // If zlib.output_compression is enabled it will compress the output,
    // but it will not modify the content-length header to compensate for
    // the reduction, causing the browser to hang waiting for more data.
    // We'll just skip content-length in those cases.
    if ( ! $this->_zlib_oc && ! $CFG->item('compress_output'))
    {
        header('Content-Length: ' . strlen($output));
    }

    exit($output);
}

1 个答案:

答案 0 :(得分:2)

此答案来自Github issue。我也是Pedro Dinis提出的。 我今天遇到了这个问题,并花了很长时间来寻找解决方案。我在这里分享希望帮助像我这样的人。 关键是替换库文件中的第430行:REST_Controller.php:

header('Content-Length: ' . strlen($output));

通过

header('Content-Length: ' . strlen("'".$output."'"));

更新:问题是solved here 或者您可以只注释掉代码,它会正常运行。 :)