web-dev-qa-db-fra.com

Changer la déclaration d'erreur PHP pour masquer les avertissements pour un site spécifique uniquement [Debian | Ubuntu]

Imaginez un couple de sites-enabled Disponible à partir de /etc/Apache2/sites-available. (Seules les distributions basées dans Debian fonctionnent comme ceci.)

Est-il possible de muet warning messages à partir de scripts PHP de un site spécifique , sans toucher la réelle htdocs?

Normalement, il y a quelques solutions pour atteindre quelque chose de connexe:

  1. Ajouter une error_reporting() Directive E.G. error_reporting(E_ERROR); aux scripts exécutés.
  2. Définissez php_flags dans .htaccess Fichiers comme: php_flag display_errors off
  3. Utilisez ini_set Scripts à l'intérieur:

    ini_set('display_errors', 'Off');
    ini_set('display_startup_errors', 'Off');
    error_reporting(0);
    
  4. Prepend @ Pour des fonctions qui lancent des avertissements ou des erreurs.

  5. Changer php.ini Pour dire réellement
    [.____] error_reporting = E_ALL ^ E_WARNING
    [.____] display_errors = 1

Toutefois, ces personnes méchantes touchant les HTDOC ou avoir le changement appliquée à l'échelle mondiale. Imaginez que le htdocs sont montés en lecture seule. Comment puis-je supprimer des avertissements (ou des avis) uniquement pour certains sites?

Je suppose que Debian/Ubuntu a a2ensite Configurations spécifiques pour une raison et j'espère que je peux modifier ceux-ci. Il y a une directive log_level Dans l'exemple de configuration de "site disponible", mais cela gère la quantité de messages enregistrée. Pas les messages émis par les scripts PHP.

Ajout manuellement des sections dans php.ini Ou Apache2.conf Ou httpd.conf Fonctionnera également. Si c'est possible.

Voir également:

6
Redsandro

Si vous avez accès aux configurations Apache Vhost, vous pouvez également utiliser PHP_FLAG Directives dans un hôte virtuel dans le répertoire disponible sur les sites. De cette façon, ils ne sont appliqués que sur ce Vhost.

Ajoutez quelque chose comme ça dans votre hôte virtuel:

<IfModule mod_php5.c>
    php_admin_flag display_errors off
</IfModule>

Edit:

Si vous ne voulez que des erreurs réelles affichées, vous pouvez utiliser la directive PHP error_reporting Avec une valeur entière décrivant les types de niveaux d'erreur que vous souhaitez afficher:

<IfModule mod_php5.c>
    php_admin_flag display_errors on
    php_admin_value error_reporting 22517
</IfModule>

Cela équivaut à un cadre de

error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED;

en php.ini. Plus de valeurs possibles par exemple ici:

https://web.archive.org/web/20131009000719/http://www.websitefactors.co.uk/php/2013/01/HP-Error-RePorting-Settings

Calculateur de valeur de rapport d'erreur:

http://www.bx.com.au/Tools/ultimate-php-error-reporting-wizard

12
etagenklo

J'ai ajouté :

<IfModule mod_php5.c>
 php_admin_flag display_errors on
 php_admin_value error_reporting 30711
</IfModule>

to/etc/apache2/sites compatible/travail et cela fonctionne simplement bien.

Oui, je sais que je devrais résoudre ces avis, mais je travaille sur un ancien script et je devrai revenir à cela, pour le moment, cela a résolu mon problème et était ce que l'OP cherchait. J'espère que cela aide quelqu'un.

1
Patrick Maher

Il n'y a aucun moyen de le faire sans .htaccess ou d'appliquer la configuration globale. Apache ne peut pas "voir" des fichiers en dehors de son dossier racine (HTDOCS) et de fichiers .htaccess ne fonctionnent que lorsque dans le dossier du site. php_flag ne fonctionne pas en dehors de .htaccess, non plus.

Donc, fondamentalement, il n'est pas possible de faire sur un site par site sans certaines modification ou un fichier .htaccess.

0
Nathan C