2017-08-11 114 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