2012-02-10 32 views
4

私はPHPで他人のRESTサーバーを編集して調整しようとしています。これはPhil Sturgeonによって書かれたREST Serverに基づいています。私の頭の中にはかなりのものがありましたが、私の要求は期待どおりに働いていません。サーバーコンストラクタでphp://の内容を変数に格納

は、私はphp://inputは一度しか読み取ることができることを知っているので、変数を設定する前var_dump(file_get_contents('php://input'))を行うことは、明らかに私のXMLデータが入力ストリームから正しく読み込まれていることを示しているが、コード

switch ($this->request->method) 
{ 
    case 'post': 
    $this->_post_args = $_POST; 
    $this->request->format and $this->request->body = 
            file_get_contents('php://input'); 
    break; 
} 

です変数は正しく設定されていません。

ただし、var_dump($this->request->body)を実行すると、出力はNULLになります。変数にphp://inputの内容を格納する特別なテクニックはありますか?

EDIT:

私はPOSTリクエストと、それは私がエンコーディングが何であるか、このから見ることができません

Status: 200 
X-Powered-By: PHP/5.3.2-1ubuntu4.11 
Server: Apache/2.2.14 (Ubuntu) 
Content-Type: application/xml 
Date: Fri, 10 Feb 2012 11:00:43 GMT 
Keep-Alive: timeout=15, max=100 
Content-Length: 936 
Connection: Keep-Alive 

ある送信ヘッダを送信するためにAPI Kitchenを使用しています。

EDIT 3:

エンコーディング問題がどこにあるかもしれないapplication/x-www-form-urlencodedです!これが何であるべきか具体的にどのように言いますか?

EDIT 2:

$this->request->methodは、すべての助けを'post'

+0

どのようなタイプのオブジェクトが '$ this-> request'ですか? –

+0

'$ this-> request'は' protected $ request = NULL;として宣言されています。 //受け入れ、言語、ボディ、ヘッダーなどをストアする – Josh

+0

別の実装や何かを見つけることができません。最初に設定されたのは同じコンストラクタにあり、 '$ this-> request-> method = $ this - > _ detect_method(); '申し訳ありませんが、私はここで非常に役に立つとは思われません! – Josh

答えて

4

おかげが含まれている、それが動作するためには、要求のコンテンツタイプは、アプリケーション/ xmlのではなく、アプリケーション/ x軸でなければならないことが判明www-form-urlencodedはそのままです。

+0

+1で解決策を明確にし、共有します。 –

1

$this->request->formatfalse又はNULLまたは0と評価された場合、andオペレータの後部分は実行されません。

$this->request->format and $this->request->body = file_get_contents('php://input'); 
          ^
          | 
          +--- this part wont execute 

あなたは、これは、デバッグに役立ちます

if($this->request->format){ 
    $this->request->body = file_get_contents('php://input'); 
} 

のようにそれを書かれているはずです。

関連する問題