php-回显一个大的json字符串不会输出,除非已经回显/打印了其他内容,即使设置了内容类型

tgabmvqs  于 2021-06-21  发布在  Mysql
关注(0)|答案(0)|浏览(224)

我已经编写了一个简单的api,它允许我以有组织的方式从数据库中获取数据。www.example.com/api/get/all 将数据库中一个表中的所有数据作为一个数组提供给我,将其编码为json,然后对其进行响应。这个文件每天都被称为cron作业,并将其(和其他一些数据)转储到网站前端使用的.js文件中。
奇怪的是,如果我去www.example.com/api/get/all 它运行大约2-3分钟(表中有很多数据),然后不向屏幕输出任何内容。但是,如果在函数循环遍历所有数据之前向其添加echo,则会将json编码的数据字符串输出到屏幕。以前有人见过这个吗?是虫子吗?有解决办法吗?
似乎很奇怪,只有在出现回声/打印后才会回声。
以下是我的api的相关部分:

// ENDPOINT people:
private function candidates()
{
    $response = new stdClass();

    // Fetch all users:
    if( $this->verb == 'all' )
    {
        // Get everyone from the DB:
        $sql = $this->_db->query( 'SELECT id FROM ff_candidates' );

        if( $sql )
        {
            $candidates = array();

            while( $obj = $sql->fetchObject() )
            {
                 // var_dump($obj);

                $candidate = new Candidate( $this->_db, $obj->id );

                $person = new stdClass();

                // Start the response:
                $person->id       = $candidate->get_id();
                $person->name     = utf8_encode($candidate->get_name());
                $person->gender   = $candidate->get_gender();

                $candidates[] = $person;
            }

            $this->_response( $candidates );
        }
        else
        {
            $response->success = false;
            $response->message = 'There was a problem fetching the candidate. Please try again.';
            $this->_response( $response, 500 );
        }
    }
}

// Send a response to the server:
private function _response( $response, $status = 200 )
{
    $verbose = $this->_requestStatus( $status );
    header("Content-Type: application/json");
    header( 'HTTP/1.1 '.$status.' '.$verbose );

    if( is_string($response) )
    {
        $data = new stdClass();
        $data->message = $response;
        $data->status  = $status;
        $data->title   = $verbose;
    }
    else
    {
        $data = $response;
    }

    $json = json_encode( $data );
    echo $json;
    exit();
}

编辑:
_requeststatus()代码:

private function _requestStatus( $code )
{
    $status = array(
        200 => 'OK',
        400 => 'Bad Request',
        401 => 'Unauthorized',
        402 => 'Payment Required',
        403 => 'Forbidden',
        404 => 'Not Found',
        405 => 'Method Not Allowed',
        429 => 'Too Many Requests',
        500 => 'Internal Server Error',
        503 => 'Service Unavailable',
    );

    return ( $status[$code] ) ? $status[$code] : $status[500];
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题