0

LuraCast Restler API で実装された REST Web サービスがあります。今まで問題なく動作していました。突然、サービスへのリクエストに応答して JSON データを取得できなくなりました。

X-Debug は、サービスへのすべてのリクエストで常に次の通知を返します。

( ! ) Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 1136
Call Stack
#   Time    Memory  Function    Location
1   0.0013  631072  {main}( )   ../restIndex.php:0
2   0.0969  1170720 Restler->addAPIClass( ) ../restIndex.php:14
3   0.0971  1181912 Restler->generateMap( ) ../restler.php:248
4   0.0971  1184616 parse_doc( )    ../restler.php:652
5   0.0971  1184984 DocParser->parse( ) ../restler.php:1157
6   0.0972  1205520 DocParser->parseLines( )    ../restler.php:1073
7   0.0972  1209704 DocParser->parseLine( ) ../restler.php:1079
8   0.0973  1209944 DocParser->setParam( )  ../restler.php:1111
9   0.0973  1209944 DocParser->formatClass( )   ../restler.php:1120

( ! ) Notice: Undefined offset: 1 in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 1136
Call Stack
#   Time    Memory  Function    Location
1   0.0013  631072  {main}( )   ../restIndex.php:0
2   0.1065  1224952 Restler->addAuthenticationClass( )  ../restIndex.php:15
3   0.1065  1225304 Restler->addAPIClass( ) ../restler.php:260
4   0.1068  1228176 Restler->generateMap( ) ../restler.php:248
5   0.1068  1229568 parse_doc( )    ../restler.php:652
6   0.1068  1229936 DocParser->parse( ) ../restler.php:1157
7   0.1068  1239456 DocParser->parseLines( )    ../restler.php:1073
8   0.1068  1241448 DocParser->parseLine( ) ../restler.php:1079
9   0.1069  1241696 DocParser->setParam( )  ../restler.php:1111
10  0.1069  1241696 DocParser->formatClass( )   ../restler.php:1120

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php:1136) in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 385
Call Stack
#   Time    Memory  Function    Location
1   0.0013  631072  {main}( )   ../restIndex.php:0
2   0.1102  1228048 Restler->handle( )  ../restIndex.php:16
3   0.1233  1461248 Restler->sendData( )    ../restler.php:366
4   0.2814  1547080 header ( )  ../restler.php:385

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php:1136) in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 386
Call Stack
#   Time    Memory  Function    Location
1   0.0013  631072  {main}( )   ../restIndex.php:0
2   0.1102  1228048 Restler->handle( )  ../restIndex.php:16
3   0.1233  1461248 Restler->sendData( )    ../restler.php:366
4   0.2835  1547048 header ( )  ../restler.php:386

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php:1136) in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 387
Call Stack
#   Time    Memory  Function    Location
1   0.0013  631072  {main}( )   ../restIndex.php:0
2   0.1102  1228048 Restler->handle( )  ../restIndex.php:16
3   0.1233  1461248 Restler->sendData( )    ../restler.php:366
4   0.2846  1547064 header ( )  ../restler.php:387

( ! ) Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php:1136) in /Applications/MAMP/htdocs/aem.davidcasillas.es/public/webservice/restler/restler.php on line 388
Call Stack
#   Time    Memory  Function    Location
1   0.0013  631072  {main}( )   ../restIndex.php:0
2   0.1102  1228048 Restler->handle( )  ../restIndex.php:16
3   0.1233  1461248 Restler->sendData( )    ../restler.php:366
4   0.2914  1547072 header ( )  ../restler.php:388

最終的に、データは応答で送信されますが、JSON 形式ではないため、movil アプリはそれ以上処理できません。

私が言ったように、サービスは今までうまく機能しています。この通知がエラーに関連しているかどうかはわかりませんが、明らかに関連しているようです。

この問題をどのようにデバッグできますか?

これが役立つ場合は、ここに私のコードがあります:

これは、Restler を構成するインデックス スクリプトです。

<?php

require_once '../../BaseDatos.php';
require_once 'restler/restler.php';

#set autoloader
#do not use spl_autoload_register with out parameter
#it will disable the autoloading of formats
spl_autoload_register('spl_autoload');


$r = new Restler();
$r->setSupportedFormats('JsonFormat');
$r->addAPIClass('Rest');
$r->addAuthenticationClass('Seguridad');
$r->handle();

これがパブリック API クラスです (メソッドを 1 つだけ示します)。

class Rest
{

    /**
     * @brief Una instancia de la clase BaseDatos
     *
     * @var BaseDatos $db
     */
    private $db;

    /**
     * \brief Constructor de la clase.
     *
     * Inicializa una instancia de la clase BaseDatos.
     *
     */
    function __construct() {
        $this->db = BaseDatos::getInstance();
    }
    public function getFuentes($nombreUsuario, $password) {

        $fuentes = $this->db->getFuentes();
        $fuentes = array('fuentes' => $fuentes);
        return $fuentes;
    }

これは、返される情報を取得する BaseDatos クラス メソッドです。

public function getFuentes() {
    //SELECT * FROM fuentes
    $queryString = 'SELECT * FROM ' . TABLA_FUENTES . ' ORDER BY nombreFuente';
    $queryResult = $this->query($queryString);
    if ($this->errno != 0) {
        //ERRRO. mysql
        $this->setErrorNoAndMessage(ErrorCode::ERROR_MYSQL, $this->error);
        return FALSE;
    }
    $resultado = array();
    while ($row = $queryResult->fetch_assoc() ) {
        $resultado[] = $row;
    }

    $this->resetErrorNoAndMessage();
    return $resultado;

}
4

1 に答える 1

2

この問題は、最近追加したドキュメント コメントに関連していました。Class Documentation に追加した@classタグは競合を生成していました。おそらく、Restler の DocParser がこの特定のタグを処理しないためです。

私の質問に含めた最初の 2 つの通知は、DocParserが PHP の宣言ではなくformatClass()、おそらく@classタグに応答してメソッドを実行しようとしたときに発生しました。Class

おそらく、この API を深く理解している人は、いくつかの光を追加できます。

このタグをドキュメントから削除するだけで、すべてが再び機能します。

于 2012-05-02T14:24:58.073 に答える