0

$_POST (コンテンツ: xml 形式の変数 'xml') を受け取る関数があります。

私はこれを試しました:

function call($_POST) {    
    $xml = $_POST['xml'];    
    $doc = simplexml_load_string($xml); 
}

しかし、最終変数をファイルに書き込もうとすると、何も書き込まれません。(そして、私はすでに投稿を配列として扱ってみましたが、うまくいきません)。

ありがとう、

4

2 に答える 2

1

関数の入力パラメーターとして宣言$_POSTすることで、ローカルスコープで再定義し、再割り当てしようとしたためグローバルデータが失われたと思います($_POSTis a superglobal)。あなたが行ったことについて、いくつかの優れた既存の Q&A 資料は次のとおりです。

それらが古いものであっても、これらのスーパーグローバルは何年もの間意味を変えていないため、トピックについて提供する情報は PHP でも有効です。

ただし、現在のすべての安定した PHP バージョン (つまり、PHP 5.4 以降) では、コードで致命的なエラーが発生します ( 80 以上の PHP バージョンのオンライン デモ)。

致命的なエラー: 自動グローバル変数 _POST を再割り当てできません

これは、出力が得られないことを説明している可能性があります。見る何も見えない。ページは空白です。(White Page または Screen Of Death とも呼ばれます)リファレンス- What does this error mean in PHP? . エラー メッセージを表示しないか、ログ ファイルを調べないため、エラー メッセージが表示されない場合があります。「PHP で有用なエラー メッセージを取得する方法」を参照してください。.

それで、あなたは何ができますか?PHP のエラー処理の基本を理解するのに続いて、エラー ログを有効にしてエラー ログの場所を特定することをお勧めします。上記の 2 つの参照用の質問で概説されているように、コードを変更する必要があります。

関数への入力としてを取り除くか$_POST、名前を のような別のものに変更して$postDataください。

function call(array $postData) 
{
    $xml = $postData['xml'];
    $doc = simplexml_load_string($xml); 
}

次のように関数を呼び出すだけです。

call($_POST);

または、その配列でいくつかの小さなパラメーターのみを渡す場合は、それらを書き出します。

function call($xmlString) 
{
    $doc = simplexml_load_string($xmlString); 
}

使用法:

call($_POST['xml']);

これにより、同じコードで異なるフォーム名を使用できます。物事をきつく結びすぎず、ゆらぎの余地を残しておくので、非常に便利です。

于 2013-07-02T15:17:41.563 に答える
1

$_POST神は、関数の引数名として再割り当てがどのように失敗するかを知っています。コードを次のように変更してみてください。

function call($xmlstr) {    
    $doc = simplexml_load_string($xmlstr);
    // should probably be a return here, but I'm guessing
    // your function does more than just parse XML...
}

call($_POST['xml']);

または単に:

function call() {
    $doc = simplexml_load_string($_POST['xml']);
}

call();
于 2013-07-02T15:18:16.097 に答える