2012-04-20 13 views
2

ユーザーがXMLHttpRequestでデータをPHPに投稿したかどうかを確認するにはどうすればいいですか?"php:// input"が設定され、空でないかどうかを確認する方法

これが最良の方法ですか?そうでない場合、私はこれをどのようにすることができますか?

私は次のコードを持って

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') { 
    // PROBABLY AJAX REQUEST 
} 

私の質問は、私はphp://inputが存在し、空ではありません確認することができる方法、ありますか?私は、次のコードは、仕事をすると思うが、これは正しい方法であるかどうかを知る必要があります。

if(file_get_contents("php://input") == '') { 
    // HAVE NOT POSTED 
} else { 
    // POSTED 
} 

答えて

4

AJAX関数の一部としてカスタムヘッダーを設定し、そのヘッダーがサーバー側コードに存在するかどうかを確認します。

おそらく、これを行う最も良い方法は、サーバー側でキーを生成し、AJAX呼び出しを含むクライアント側のコードに渡してから、AJAXをサーバーに送り返し、それがサーバーであることを確認することです有効なキーこれは、誰かがAJAXリクエストを偽造するのを防ぐ最も効果的な方法です。


php://inputが存在し、空でないことを確認するには、これを使用する:

$phpinput = file_get_contents("php://input"); 
// From the docs: "Note: A stream opened with php://input can only be read once" 
if(!$phpinput) { 
    // phpinput is empty 
} 
+0

更新された質問をご覧ください。 –

+1

更新された答えを見てください:) –

+0

私はこれをします: 'file_get_contents(" php:// input ");'ストリームは利用できないので、もう一度書き込めませんか? –

2

あなたはスクリプトがXMLHttpRequestで要求されたかどうかを判断することができるように保証100%ではありません。 _SERVER['HTTP_X_REQUESTED_WITH']をチェックすることができますが、設定しない場合や設定しない場合は設定されないことがあります。あなたはそれを試すことができます。

+0

[OK]を、私は '持っている場合(ISSET($ _、SERVER [ 'HTTP_X_REQUESTED_WITH'])&& strtolower($ _サーバー[」にHTTP_X_REQUESTED_WITH '])===' xmlhttprequest '){'、私の質問は、' php:// input'が存在し、空ではないことを確認する方法です。 –

+0

更新された質問を参照してください。 –

+0

データは通常の '_POST'または' _GET'で送信されます。なぜstdinを使用する必要がありますか? –

関連する問題