Deaktivieren strenger Standards in PHP 5.4

95

Ich betreibe derzeit eine Site auf PHP 5.4, vorher habe ich meine Site auf 5.3.8 ausgeführt. Leider kombiniert PHP 5.4 E_ALLund E_STRICT, was bedeutet, dass meine vorherige Einstellung für error_reportingjetzt nicht funktioniert. Mein vorheriger Wert war E_ALL & ~E_NOTICE & ~E_STRICTSollte ich nur Werte einzeln aktivieren?

Ich habe viel zu viele Fehler und die Dateien enthalten zu viel Code, als dass ich ihn beheben könnte.

icomrade
quelle
11
Tipp ... Beheben Sie den Code oder die Fehler würden besser und schwieriger zu debuggen werden
Baba
7
s / Leider / Zum Glück
NikiC
96
Vielen Dank für den Rat, aber mir fehlen die erforderlichen Kenntnisse, um das gesamte jfusion phpbb3-Plugin neu zu schreiben. Danke, dass du herablassend bist.
icomrade
12
Ich stimme unseren Freunden zu, dass Sie versuchen sollten, die Fehler zu beheben. Sie könnten kommen und sich in den Knöchel beißen. Wenn Sie alle Fehler verbergen, wird das Debuggen schwierig. Aber ich denke auch nicht, dass es fair ist, das Poster für diese einsame Frage zu beurteilen, wenn Sie nie eine schreckliche Arbeit schreiben mussten, weil Ihr Kunde Ihre ungeborenen Kinder verhext, mit denen Sie nicht lange genug gearbeitet haben
Jonathan dos Santos
7
Dies ist eine völlig vernünftige Frage, und ja, @icomrade - Sie haben Recht mit der Herablassung und dem Sarkasmus hier. Dies ist eine der weniger attraktiven Eigenschaften von StackOverflow. Trotzdem empfehle ich Ihnen, zumindest einige der Warnungen in Angriff zu nehmen, die Sie erhalten - auch wenn Sie nicht alle ausführen können.
Halfer

Antworten:

139

Wie die Kommentatoren angegeben haben, besteht die beste Option darin, die Fehler zu beheben, aber mit begrenzter Zeit oder begrenzten Kenntnissen ist dies nicht immer möglich. In Ihrer php.ini ändern

error_reporting = E_ALL

zu

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Wenn Sie keinen Zugriff auf die php.ini haben, können Sie dies möglicherweise in Ihre .htaccess-Datei einfügen:

php_value error_reporting 30711

Dies ist der E_ALL-Wert (32767) und das Entfernen der Werte E_STRICT (2048) und E_NOTICE (8).

Wenn Sie keinen Zugriff auf die .htaccess-Datei haben oder diese nicht aktiviert ist, müssen Sie diese wahrscheinlich oben im PHP-Abschnitt eines Skripts einfügen, das von einem Browseraufruf geladen wird:

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

Eine davon soll Ihnen helfen, die Software zu verwenden. Die Hinweise und strengen Informationen sind jedoch Indikatoren für Probleme oder potenzielle Probleme, und Sie können feststellen, dass ein Teil des Codes in PHP 5.4 nicht richtig funktioniert.

David Stockton
quelle
11
Ich benutze PHP 5.4.5 und habe alle oben genannten Versuche unternommen, aber ich konnte strenge Benachrichtigungen nicht deaktivieren :( irgendwelche anderen Ideen?
ro ko
2
Sie können versuchen, & ~ E_DEPRECATED zusammen mit den anderen Teilen in error_reporting () einzufügen. Welche Nachrichten sehen Sie?
David Stockton
4
@roko Ist es möglich, dass Ihr Code dies irgendwo überschreibt? Ich sah immer noch strenge Fehler, nachdem ich es in php.ini deaktiviert hatte, dann wurde mir klar, dass es nur für einige Websites war, die Drupal verwendeten, wo der Wert im Code festgelegt wurde
andrewtweber
1
@ AndrewSpear Das ist seltsam. Theoretisch sollte sich die Einstellung error_reporting auf die Fehler auswirken, die an einer beliebigen Stelle angezeigt werden. Die Einstellung display_errors sollte sich darauf auswirken, ob Sie die Fehler in der Ausgabe (auf den PHP-Seiten) erhalten oder nicht, und das error_log würde sich darauf auswirken, wo die Fehler in das Protokoll geschrieben werden. Wenn display_errors aktiviert ist, sollten auf dem Bildschirm dieselben Fehler wie im Protokoll angezeigt werden.
David Stockton
4
+1 für die Beantwortung einer einfachen Frage mit einer einfachen Antwort, ohne sich in einen StackOverflow Smuglord ™ zu verwandeln.
Joshua Pech
2

.htaccess php_value funktioniert nur, wenn Sie die PHP Server API als Modul des Webservers Apache verwenden. Verwenden Sie die IfModule-Syntax:

# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
    php_value error_reporting 30711
</IfModule>

Wenn Sie PHP Server API CGI / FastCGI verwenden, verwenden Sie

ini_set('error_reporting', 30711);

oder

error_reporting(E_ALL & ~E_STRICT & ~E_NOTICE);

in Ihrem PHP-Code oder in den PHP-Konfigurationsdateien .user.ini | php.ini Modifikation:

error_reporting = E_ALL & ~E_STRICT & ~E_NOTICE

auf Ihrem virtuellen Host auf Serverebene.

Taras
quelle
1

Es hat bei mir funktioniert, als ich error_reporting an zwei Stellen gleichzeitig

irgendwo im PHP-Code gesetzt habe

ini_set('error_reporting', 30711);


und in der .htaccess-Datei

php_value error_reporting 30711
Guzik
quelle
Das einzige, was für mich ohne Zugriff auf php.ini funktioniert hat, ein anderes der oben genannten würde nicht von selbst funktionieren, hat nur einen 500-Fehler zurückgegeben. Beides zusammen Baby !!!
Jamie Hutber
1

Wenn Sie auch E_DEPRACATED deaktivieren müssen, verwenden Sie:

php_value error_reporting 22527

In meinem Fall beschwerte sich CMS Made Simple über "E_STRICT ist in der Fehlerberichterstattung aktiviert" sowie "E_DEPRECATED ist aktiviert". Durch Hinzufügen dieser einen Zeile zu .htaccess wurden beide Fehlkonfigurationen behoben.

ux.engineer
quelle
0

Kopf hoch, möglicherweise müssen Sie LAMP, Apache oder was auch immer Sie verwenden neu starten, damit dies wirksam wird. Wir haben uns eine Weile den Kopf zerbrochen und schienen keine Auswirkungen zu haben, bis die Dienste neu gestartet wurden, vermutlich weil die Website zwischengespeichert wurde.

Mond
quelle
Nee. Dies liegt daran, dass Apache die Einstellungen für PHP neu laden muss. Dies wird AFAIK nur durchgeführt, wenn der Dienst gestartet wird.
svin83