web-dev-qa-db-fra.com

Comment imprimer un journal de débogage?

J'aimerais déboguer du code PHP, mais je suppose que l'impression d'un journal sur un écran ou un fichier me convient.

Comment dois-je imprimer un journal dans le code PHP?

Le print/printf habituel semble aller à la sortie HTML et non à la console.

Le serveur Apache exécute le code PHP.

117
eugene

Un truc moins connu est que mod_php mappe stderr dans le journal Apache. Et, il y a un flux pour cela, donc file_put_contents('php://stderr', print_r($foo, TRUE)) dumpera joliment la valeur de $foo dans le journal des erreurs Apache.

180
chx
error_log(print_r($variable, TRUE)); 

pourrait être utile

130
Olivier Berger

Vous pouvez utiliser error_log pour envoyer à vos serveurs le fichier journal des erreurs (ou un autre fichier facultatif si vous le souhaitez)

25
pthurlow

Si vous êtes sur Linux:

file_put_contents('your_log_file', 'your_content');

ou

error_log ('your_content', 3, 'your_log_file');

puis en console

tail -f your_log_file

Cela montrera continuellement la dernière ligne mise dans le fichier.

19
user3029507

Vous devez changer votre état d'esprit. Vous écrivez PHP, pas ce que vous avez l'habitude d'écrire. Le débogage dans PHP n'est pas effectué dans un environnement de console.

En PHP, vous avez 3 catégories de solutions de débogage:

  1. Sortie sur une page Web (voir la bibliothèque dBug pour une vue plus précise des choses).
  2. Écrire dans un fichier journal
  3. Débogage en session avec xDebug

Apprenez à les utiliser au lieu d'essayer de faire en sorte que PHP se comporte comme n'importe quel autre langage auquel vous êtes habitué.

9
Sylverdrag

Êtes-vous en train de déboguer sur la console? Il existe différentes options pour déboguer PHP. La fonction la plus couramment utilisée pour le débogage rapide et sale est var_dump .

Cela dit et bien sur, bien que var_dump soit génial et que beaucoup de gens fassent tout avec ça, il existe d’autres outils et techniques qui peuvent pimenter un peu.

Pour vous aider à déboguer une page Web, entourez votre instruction de vidage de balises <pre> </pre> afin de vous donner un formatage correct pour les tableaux et les objets.

C'est à dire:

<div> some html code ....
      <a href="<?php $tpl->link;?>">some link to test</a>
</div>

      dump $tpl like this:

    <pre><?php var_dump($tpl); ?></pre>

Enfin, assurez-vous que si le débogage de votre traitement des erreurs est configuré pour afficher les erreurs. Il peut être nécessaire d’ajouter cela en haut de votre script si vous ne pouvez pas accéder à la configuration du serveur pour le faire.

error_reporting(E_ALL);
ini_set('display_errors', '1');

Bonne chance!

5
stefgosselin

Si vous ne souhaitez pas intégrer un framework tel que Zend , vous pouvez utiliser la méthode trigger_error pour vous connecter au journal des erreurs php.

2
jopke

Vous pouvez également écrire dans un fichier comme celui-ci:

$logFilePath = '../logs/debug.text';
ob_start();

// if you want to concatenate:
if (file_exists($logFilePath)) {
    include($logFilePath);
}
// for timestamp
$currentTime = date(DATE_RSS);

// echo log statement(s) here
echo "\n\n$currentTime - [log statement here]";

$logFile = fopen($logFilePath, 'w');
fwrite($logFile, ob_get_contents());
fclose($logFile);
ob_end_flush();

Assurez-vous que les autorisations appropriées sont définies pour que php puisse accéder au fichier et écrire sur celui-ci (775).

2
inorganik

Tout simplement, c'est trigger_error:

 trigger_error("My error");

mais vous ne pouvez pas mettre des tableaux ou des objets donc utiliser

var_dump
2
Danzan

J'utilise cakephp alors j'utilise:

$this->log(YOUR_STRING_GOES_HERE, 'debug');
1
mmv_sat

C'est un excellent outil de débogage et de journalisation php: Débogueur et enregistreur de php

Il fonctionne directement avec seulement 3 lignes de code. Il peut envoyer des messages à la console js pour le débogage ajax et peut remplacer le gestionnaire d'erreurs. Il affiche également des informations sur des variables telles que var_dump () et print_r (), mais dans un format plus lisible. Très bel outil!

1
Charlie

Vous pouvez utiliser:

<?php
echo '<script>console.log("debug log")</script>';
?>
1
steffanjj

Vous pouvez utiliser le module php curl pour passer des appels vers http://liveoutput.com/ . Cela fonctionne très bien dans un environnement d'entreprise sécurisé où certaines restrictions du php.ini limitent l'utilisation de file_put_contents.

1
nottinhill

J'en ai utilisé beaucoup, mais depuis que j'ai généralement besoin de déboguer lors du développement, et depuis que je développe sur localhost, j'ai suivi les conseils des autres et écris à présent dans la console de débogage JavaScript du navigateur (voir http: // www.codeforest.net/debugging-php-in-browsers-javascript-console ).

Cela signifie que je peux consulter la page Web générée par mon PHP dans mon navigateur et appuyer sur la touche F12 pour afficher/masquer rapidement toute trace de débogage.

Comme je suis constamment en train de regarder les outils de développement pour le débogueur, la disposition CSS, etc., il est logique de regarder mon loggon PHP.

Si quelqu'un décide de nous utiliser ce code, j'ai apporté un changement mineur. Après

function debug($name, $var = null, $type = LOG) {

J'ai ajouté

$name = 'PHP: ' . $name;

En effet, mon côté serveur PHP génère du HTML contenant du code JavaScript. Il est donc utile de faire la distinction entre la sortie de PHP et JS.

(Remarque: je suis en train de le mettre à jour pour me permettre d'activer et de désactiver différents types de sortie: depuis PHP, depuis JS et l'accès à la base de données)

1
Mawg