2009-12-27 12 views
8

Comme le dit le titre, j'ai fixé la longueur maximale pour le journal des erreurs php, mais il semble continuer à croître beaucoup beaucoup plus grand que 1024. J'utilise le php.ini correct, j'ai redémarré Apache, etc Les autorisations sur le journal php sont 666.log_errors_max_len = 1024 dans php.ini, mais php log ne cesse de croître

+2

Juste par curiosité, cette directive ne configurer la longueur totale du fichier (ce qui n'a pas de sens, car la valeur par défaut est 1024 octets), ou seulement la longueur maximale d'une entrée/une ligne? –

+1

Il existe plusieurs paramètres de configuration 'php.ini' qui fonctionnent ensemble d'une manière quelque peu non intuitive. Sur votre système, quelles sont les valeurs de 'log-errors' http://www.php.net/manual/fr/errorfunc.configuration.php#ini.log-errors et' error-log' http: // www .php.net/manual/fr/errorfunc.configuration.php # ini.error-log? – Asaph

Répondre

21

Comme c'est typique pour PHP, il n'est pas vraiment évident du nom du paramètre de configuration, ou même le documentation, mais cette directive s'applique à la longueur d'un message de journal unique , et non à la longueur du fichier journal dans son ensemble.

Utilisez le logrotate ou un outil similaire pour ce que vous essayez de faire.

+0

merci! C'est très utile –

6

Vérifié Pascal's initial thought:

log_errors_max_len entier

Régler la longueur maximale du log_errors en octets. En error_log informations sur la source est ajouté. La valeur par défaut est 1024 et 0 permet de ne pas appliquer de longueur maximale de . Cette longueur est appliquée aux erreurs consignées, aux erreurs affichées et également à $ php_errormsg. Lorsque un nombre entier est utilisé, la valeur est mesurée en octets. Notation abrégée, comme décrit dans cette FAQ, peut également être utilisé.

3

Qu'est-ce que le manuel ne dit pas est que log_errors_max_len fait référence ne au « corps » du message d'erreur. Cela signifie qu'une seule ligne d'erreur sera toujours supérieure à la longueur que vous définissez ici.

Pour démontrer, exécuter ce code à l'aide log_errors_max_len=0 (0 signifie illimité) et log_errors=1:

<?php 
// Set your server to these settings: 
// error_reporting=-1 
// date.timezone=utc ;to suppress the error message "It is not safe to rely on the system's timezone settings."... 
echo$msg1; echo$msg2; 

Les octets envoyés à error_log seront:

[15-Jul-2015 01:23:45 utc] PHP Notice: Undefined variable: msg1 in C:\index.php on line 5 
[15-Jul-2015 01:23:45 utc] PHP Notice: Undefined variable: msg2 in C:\index.php on line 5 
‏ 

Ensuite, tester le même code avec log_errors_max_len=4 et log_errors=1. (Souvenez-vous de redémarrer le serveur.) error_log sera maintenant:

[15-Jul-2015 01:23:45 utc] PHP Notice: Unde in C:\index.php on line 5 
[15-Jul-2015 01:23:45 utc] PHP Notice: Unde in C:\index.php on line 5 
‏ 

(Notez que votre message d'erreur est préfixé avec « [15-Jul-2015 01:23:45 utc] PHP Notice: » et ajouté avec « in C:\index.php on line 1 », entraînant une ligne plus longue que ce qui est fixé par log_errors_max_len

Ce problème se produit non seulement avec error_log, mais également avec la sortie du serveur envoyée au client. Pour démontrer, exécutez le même code ci-dessus en utilisant log_errors_max_len=4, display_errors=1, html_errors=0, error_prepend_string="PPPP" et error_append_string="AAAA".La sortie envoyée au client est:

PPPP 
Notice: Unde in C:\index.php on line 5 
AAAAPPPP 
Notice: Unde in C:\index.php on line 5 
AAAA 

Maintenant, exécutez le même code en utilisant log_errors_max_len=4, display_errors=1, html_errors=1, error_prepend_string="PPPP" et error_append_string="AAAA". (. error_prepend_string et error_append_string appliquent uniquement aux erreurs affichées, les erreurs non enregistrées) La sortie envoyé au client est:

PPPP<br /> 
<b>Notice</b>: Unde in <b>C:\index.php</b> on line <b>5</b><br /> 
AAAAPPPP<br /> 
<b>Notice</b>: Unde in <b>C:\index.php</b> on line <b>5</b><br /> 
AAAA 

Notez également que les tests ci-dessus seraient les mêmes résultats même si vous utilisez ignore_repeated_errors=0. Cela montre que "erreurs répétées" sont considérés avant les messages d'erreur sont recadrés.

(Vos résultats peuvent varier en fonction du SAPI utilisé. Tests ci-dessus sont effectuées en utilisant php-5.6.7-Win32-VC11-x86 CLI sur la victoire 8.1.)