Je voudrais capturer la sortie de var_dump
dans une chaîne.
La documentation PHP dit;
Comme pour tout ce qui produit son résultat directement dans le navigateur, les fonctions de contrôle de sortie peuvent être utilisées pour capturer la sortie de cette fonction et l'enregistrer dans une chaîne (par exemple).
Quel serait un exemple de la façon dont cela pourrait fonctionner?
print_r()
n'est pas une possibilité valable, car cela ne me donnera pas les informations dont j'ai besoin.
strip_tags()
, cela retournera simplement le type et la valeur.Essayer
var_export
Vous voudrez peut-être vérifier
var_export
- alors qu'il ne fournit pas la même sortievar_dump
qu'il ne fournit un deuxième$return
paramètre qui le fera retourner sa sortie plutôt que de l'imprimer:Pourquoi?
Je préfère cette doublure à l'utilisation
ob_start
etob_get_clean()
. Je trouve également que la sortie est un peu plus facile à lire, car ce n'est que du code PHP.La différence entre
var_dump
etvar_export
est quevar_export
renvoie un "représentation sous forme de chaîne analysable d'une variable" tout en vidantvar_dump
simplement les informations sur une variable. Dans la pratique, cela signifie que celavar_export
vous donne du code PHP valide (mais peut ne pas vous donner autant d'informations sur la variable, surtout si vous travaillez avec des ressources ).Démo:
La différence de sortie:
var_export (
$debug_export
dans l'exemple ci-dessus):var_dump (
$debug_dump
dans l'exemple ci-dessus):print_r (
$debug_printr
dans l'exemple ci-dessus):Avertissement:
var_export
ne gère pas les références circulairesSi vous essayez de vider une variable avec des références circulaires, appelez
var_export
entraînera un avertissement PHP:Résulte en:
Les deux
var_dump
etprint_r
, d'autre part, sortiront la chaîne*RECURSION*
lorsqu'ils rencontreront des références circulaires.la source
int(1)
tandis que var_export s'imprime1
.var_export
est pas vraiment mieux pour le débogage parce que vous ne pouvez faire une recherche de navigateur pour(int)
ou (string) `etc Il a également Mangles beaucoup d'informations dans un petit espace, juste essayer:var_export(''); var_export('\'');
. Et surtout, préparez-vous à l' erreur fatale de PHP: niveau d'imbrication trop profond - dépendance récursive? dans C: \ path \ file.php sur la ligne 75Vous pouvez également faire ceci:
la source
print_r
où je peux, mais malheureusement, il ne fournit parfois pas suffisamment d'informations. Par exemple, puisqu'il transforme en chaîne là où il le peut, les deuxfalse
etnull
s'affichent comme une chaîne vide. Dans les cas où je me soucie de la différence entre ceux-ci, je recourrais à contrecœur àvar_dump
ouvar_export
.Vous pouvez également essayer d'utiliser la
serialize()
fonction. Parfois, il est très utile à des fins de débogage.la source
error_log
celle-ci, vous ne devriez pas utiliser cette solution, car la sortie de sérialiser peut contenir des octets nuls eterror_log
tronquer des chaînes contenant des octets nuls .la source
Peut également
echo json_encode($dataobject);
être utilela source
json_encode
ne contiendra pas toutes les donnéesvar_dump
(comme les types de variables par exemple). affichejson_encode
les mêmes informations queprint_R
inly dans un format différent.var_dump
. Il a également déclaré que cesprint_R
informations étaient insuffisantes pour ses besoins. Il n'y a pas de réelle différence dans les informations fournies parjson_encode
etprint_r
- seul le format des données est différent. Compte tenu de cela, siprint_r
est insuffisant, il en est de mêmejson_encode
. Veuillez ne plus vous plaindre du downvote. Ce n'était évidemment pas un simple clic aléatoire, alors faites-le.Depuis le manuel PHP :
Voici donc la vraie version de retour de PHP
var_dump()
, qui accepte en fait une liste d'arguments de longueur variable:la source
$argc
vérification ici est inutile et sans doute incorrecte comme l'a souligné @hanshenrik, et une fois que vous enlevez cela, tout ce que vous ajoutez est les appelscall_user_func_array
etfunc_get_args
.Si vous voulez voir le contenu d'une variable pendant l'exécution, pensez à utiliser un vrai débogueur comme XDebug. De cette façon, vous n'avez pas besoin de gâcher votre code source et vous pouvez utiliser un débogueur même lorsque des utilisateurs normaux visitent votre application. Ils ne le remarqueront pas.
la source
Voici la solution complète en fonction:
la source
C'est peut-être un peu hors sujet.
Je cherchais un moyen d'écrire ce type d'informations dans le journal Docker de mon conteneur PHP-FPM et j'ai trouvé l'extrait ci-dessous. Je suis sûr que cela peut être utilisé par les utilisateurs Docker PHP-FPM.
la source
file_put_contents('php://stdout',var_export($object, true),FILE_APPEND);
J'aime vraiment
var_dump()
la sortie verbeuse de et je n'étais pas satisfaite devar_export()
laprint_r()
sortie de ou parce qu'elle ne donnait pas autant d'informations (par exemple, type de données manquant, longueur manquante).Pour écrire du code sécurisé et prévisible, il est parfois utile de faire la différence entre une chaîne vide et une valeur nulle. Ou entre un 1 et un vrai. Ou entre un nul et un faux. Je veux donc mon type de données dans la sortie.
Bien qu'utile, je n'ai pas trouvé de solution propre et simple dans les réponses existantes pour convertir la sortie colorée de
var_dump()
en une sortie lisible par l'homme en une chaîne sans les balises html et incluant tous les détails devar_dump()
.Notez que si vous avez une couleur
var_dump()
, cela signifie que vous avez installé Xdebug qui remplace la valeur par défaut de phpvar_dump()
pour ajouter des couleurs html.Pour cette raison, j'ai créé cette légère variation donnant exactement ce dont j'ai besoin:
Renvoie la jolie chaîne ci-dessous:
J'espère que cela aide quelqu'un.
la source
Depuis http://htmlexplorer.com/2015/01/assign-output-var_dump-print_r-php-variable.html :
ob_get_clean () ne peut effacer que les dernières données entrées dans le tampon interne. La méthode ob_get_contents sera donc utile si vous avez plusieurs entrées.
De la même source que ci-dessus:
la source
Longue chaîne : utilisez simplement
echo($var);
au lieu dedump($var);
.Objet ou tableau :
var_dump('<pre>'.json_encode($var).'</pre>);'
la source