2017-08-11 44 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該文件包含以下代碼:

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

當我運行在Web瀏覽器的代碼(即提交點擊提交按鈕的HTML表單)我得到如下輸出:

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

請參考conc erned:

screen shot of output window

如何print_r()函數的輸出得到的字符串前打印「後的值是:」,我的下一個問題是從哪兒值1後的字符串」的價值得到了印郵政是:「

我的意思是爲什麼程序輸出中存在這種差異?爲什麼字符串「郵政價值是:」沒有得到第一個,然後在數組中的值$_POST?爲什麼正在被打印,並從它的來源?

回答

4

print_r()默認打印其結果本身。

這條線:

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

沒有做什麼,你認爲它。當它被解釋時,它調用print_r,它打印它的輸出,然後你的echo打印字符串echo "Value of Post is : ",然後返回你的print_r()。由於它什麼都不返回,只返回字符串。

但他們是一種使其按照您設想的方式工作的方式。print_r()需要第二個參數,這是默認設置爲false

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

這個參數設置爲true使得print_r不打印輸出本身和它返回一個字符串,而不是:

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

作爲提示,如果您還不知道,還可以將print_r呼叫與<pre>標記進行組合,以便將其格式化。它會使它更具可讀性,尤其是對於大型或多維數組:

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

如果是這種情況,當我執行代碼print_r($ _ FILES);死;它沒有打印出「1」。它只打印數組元素。爲什麼它沒有打印「1」,因爲我沒有向print_r()函數提供任何附加參數? – user2839497

+1

@ user2839497正如我所說,print_r自己輸出它的輸出,這就是爲什麼它以這種方式命名。如果你試圖把它放在'echo'中,它會回顯'1',因爲print_r在它沒有返回它的輸出時返回'true'。 – ksjohn

4

你需要的,如果你想讓它,而不是直接返回輸出的

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

請參考http://php.net/manual/en/function.print-r.php作爲第二個參數來print_r傳真:

回報

如果您想要捕獲print_r()的輸出,請使用返回參數。當此參數設置爲TRUE時,print_r()將返回信息而不是打印它。

當你沒有第二個參數設置爲true,PHP將首先執行print_r並立即轉存到變量STDOUT。 print_r的返回值將是一個布爾值true。該布爾值將被連接並打印。 true類型在字符串上下文中爲「1」,因此「Post的值爲:1」。

+0

如果是這種情況,當我執行代碼print_r($ _ FILES);死;它沒有打印出「1」。它只打印數組元素。爲什麼它沒有打印「1」,因爲我沒有向print_r()函數提供任何附加參數? – user2839497

+1

@ user2839497當您執行'print_r($ _ FILES)'時,不使用返回值,因此不打印1。當你執行'echo print_r($ _ FILES)'時,它將首先轉儲數組,然後輸出返回值,例如1. – Gordon

相關問題