2017-08-11 4 views
1

J'ai écrit suivant le code HTML dans un fichier intitulé file_upload_form.html:Pourquoi la fonction print_r() perturbe la sortie du programme?

<!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> 

et le fichier intitulé upload.php contient le code suivant:

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

Quand je lance ce code dans un navigateur Web (par exemple soumis le formulaire HTML en cliquant sur le bouton Soumettre) J'ai eu la sortie suivante:

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

S'il vous plaît se référer à la conc erned:

screen shot of output window

Comment la sortie de print_r() fonction ont été imprimés avant la chaîne « Valeur du Post est: » et ma question suivante est de l'endroit où la valeur 1 ont été imprimés après la chaîne « Valeur Le message est: "?

Je veux dire pourquoi une telle différence existe-t-elle dans la sortie du programme? Pourquoi la chaîne "Valeur de la publication est:" ne reçoit pas d'abord, puis les valeurs dans le tableau $_POST? Pourquoi est imprimé et d'où il vient?

Répondre

4

print_r() imprime son résultat lui-même, par défaut.

Cette ligne:

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

ne fait pas ce que vous pensez. Lorsqu'il est interprété, il appelle print_r, qui imprime sa sortie, puis votre echo imprime la chaîne echo "Value of Post is : " suivie du retour de votre print_r(). Comme il ne renvoie rien, seule la chaîne est renvoyée.

Mais c'est un moyen de faire en sorte qu'il fonctionne exactement comme vous l'avez supposé.print_r() prend un second argument, qui est mis à false par défaut:

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

Définition cet argument true fait print_r pour ne pas imprimer sa sortie elle-même et de le retourner comme une chaîne à la place:

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

Comme un conseil, et dans le cas où vous ne le savez pas déjà, vous pouvez également encadrer votre appel print_r avec <pre> afin qu'il soit formaté. Il le rendra plus lisible, en particulier pour les tableaux grands ou multidimensionnels:

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

Si tel est le cas lorsque j'exécute le code print_r ($ _ FILES); mourir; il n'a pas imprimé "1". Il n'a imprimé que les éléments du tableau. Pourquoi n'a-t-il pas imprimé "1" car je n'ai fourni aucun paramètre supplémentaire à la fonction print_r()? – user2839497

+1

@ user2839497 Comme je l'ai dit, print_r imprime sa sortie par elle-même, c'est pourquoi il est nommé de cette façon. Si vous essayez de le mettre dans un 'echo', il fera écho '1' car print_r renvoie' true' quand il ne retourne pas sa sortie. – ksjohn

4

Vous devez passer vrai que le second argument print_r si vous le voulez pour revenir au lieu de la production directement dans

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

S'il vous plaît se référer à http://php.net/manual/en/function.print-r.php:

retour

Si vous souhaitez capturer la sortie de print_r(), utilisez le paramètre return. Lorsque ce paramètre est défini sur TRUE, print_r() renvoie l'information plutôt que de l'imprimer.

Lorsque vous ne définissez pas le second paramètre à true, PHP va d'abord exécuter print_r et vider immédiatement la variable à STDOUT. La valeur de retour de print_r sera alors un booléen true. Le booléen sera concaténé puis imprimé. Le type true jongle à "1" dans un contexte de chaîne, d'où "Valeur de Post est: 1".

+0

Si tel est le cas lorsque j'exécute le code print_r ($ _FICHES); mourir; il n'a pas imprimé "1". Il n'a imprimé que les éléments du tableau. Pourquoi n'a-t-il pas imprimé "1" car je n'ai fourni aucun paramètre supplémentaire à la fonction print_r()? – user2839497

+1

@ user2839497 Lorsque vous faites 'print_r ($ _ FICHIERS)' la valeur de retour n'est pas utilisée, donc pas 1 imprimé. Lorsque vous faites 'echo print_r ($ _FICHES)', il va d'abord vider le tableau puis imprimer la valeur de retour, par ex. 1. – Gordon