2017-08-11 2 views
1

私はfile_upload_form.html題したファイルにHTMLコードに続く書いた:なぜprint_r()関数がプログラム出力を妨害していますか?

<!DOCTYPE html> 
<html> 
    <body> 

    <form action="upload.php" method="post" enctype="multipart/form-data"> 
     Select image to upload: 
     <input type="file" name="fileToUpload" id="fileToUpload"> 
     <input type="submit" value="Upload Image" name="submit"> 
    </form> 

    </body> 
</html> 

upload.php題したファイルには、次のコードが含まれます。私は(つまり提出、Webブラウザでこのコードを実行すると

<?php 
    echo "Value of Post is : ".print_r($_POST); die; 
?> 

をSubmitボタンをクリックするとHTMLフォームが表示されます)次の出力が表示されます。

Array ([submit] => Upload Image) Value of Post is : 1 

conc erned:print_r()関数の出力が文字列前に印刷されてしまった方法

screen shot of output window

「ポストの値は次のとおりである:」と私の次の質問は値1を文字列「値の後に印刷されてしまったところからです投稿は: "

私はそのような相違がプログラムの出力にあるのはなぜですか?なぜ文字列"投稿の値は:"が最初に取得されていないし、配列の値$_POST?なぜが印刷され、どこから来ているのですか?

答えて

4

print_r()は、デフォルトで結果を表示します。

このライン:

echo "Value of Post is : ".print_r($_POST); die; 

あなたはそれがないと思う何をしません。それが解釈されると、それはの文字列を出力し、続いてprint_r()が返されます。が出力されます。が出力されます。何も返さないので、文字列だけが返されます。

しかし、それらは、それが動作すると想定したとおりに動作するようにする方法です。print_r()は、デフォルトではfalseに設定されている二番目の引数を取ります:trueにこの引数を設定する

mixed print_r (mixed $expression \[, bool $return = false \]) 

print_rは、その出力自体を印刷しないように、代わりにそれを文字列として返すようになります:

echo "Value of Post is : ".print_r($_POST, true); die; 

ヒントとして、またあなたがまだわからない場合は、<pre>タグでprint_rコールをフレームにして、フォーマットすることができます。これは、特に大きなまたは多次元配列のために、それが読みやすくなります。

echo '<pre>Value of Post is : ', print_r($_POST, true), '</pre>'; die; 
+0

コードprint_r($ _ FILES)を実行した場合です。死ぬ; 「1」が印刷されませんでした。それは配列要素だけを出力しました。 print_r()関数に追加のパラメータを指定しなかったので、なぜ "1"が出力されませんでしたか? – user2839497

+1

@ user2839497私が言ったように、print_rはその出力をそのまま出力します。 'echo'に入れようとすると、print_rは出力を返さないときに' true'を返すので、 '1 'をエコーし​​ます。 – ksjohn

4

は、あなたはそれがhttp://php.net/manual/en/function.print-r.phpを参照してください

echo "Value of Post is : ".print_r($_POST); die; 

に直接出力する代わりに返したい場合print_rの2番目の引数にtrueを渡す必要があります:

リターンを

print_r()の出力をキャプチャする場合は、returnパラメータを使用します。このパラメータをTRUEに設定すると、print_r()は情報を出力するのではなく、その情報を返します。

あなたはtrueに2つ目のパラメータを設定しない場合は、PHPは最初print_rを実行し、すぐSTDOUTに変数をダンプします。 print_rの戻り値は、ブール値trueになります。ブール値は連結されて印刷されます。 trueタイプは文字列コンテキストで "1"にジャグリングするので、 "Post of Valueは1です"。

+0

、このような私は、コードますprint_r($ _ FILES)を実行する場合であれば、死ぬ; 「1」が印刷されませんでした。それは配列要素だけを出力しました。 print_r()関数に追加のパラメータを指定しなかったので、なぜ "1"が出力されませんでしたか? – user2839497

+1

@ user2839497 'print_r($ _ FILES)'を実行すると戻り値は使用されないため、1は出力されません。 'echo print_r($ _ FILES)'を実行すると、最初に配列がダンプされ、戻り値が出力されます。 1. – Gordon

関連する問題