Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP 8.x error_reporting samanlaiseksi kuin 7.4:ssä

Sivun loppuun

xxmss [26.03.2025 23:16:20]

#

Kun aikoinaan PHP 7.4 vaihtui 8.x:ään, tuli lisättyä seuraavanlaista koodia:

php_flag display_errors Off
php_value error_reporting E_ALL & ~E_DEPRECATED & ~E_STRICT

Tarkoituksena saada error_log-tiedostoon virheraportointi samaan tapaan kuin oli PHP 7.4:ssä. Nyt näyttää kuitenkin siltä, että error_log:iin ei virherivejä tule, vaikka niin oli tarkoitus.

Mitenkähän tämän saisi toimimaan niin, että error_log sisältäisi virheilmoitukset, joihin PHP 7.4 aikoinaan oletusarvoisesti reagoi?

neosofta [27.03.2025 07:43:55]

#

E_STRICT on vanhentunut. PHP 8.4 ja eteenpäin E_STRICT käyttäminen lähettää vanhentumisilmoituksen. Käytä pelkkää: php_value error_reporting E_ALL & ~E_DEPRECATED.
Lätki log_errors asetukseksi On

Metabolix [27.03.2025 11:00:01]

#

Kannattaa laittaa pelkkä E_ALL ja korjata deprecated-virheet, ettei seuraavassa päivityksessä käy yllätys, kun softa kaatuu poistuneen ominaisuuden takia.

xxmss [27.03.2025 12:11:19]

#

Kiitos edellisille! Tarkentava kysymys vielä. Miten PHP 8.x:ssa kannattaa nykyään laittaa error_reporting, jotta seuraavanlaisia rivejä ei tule error_log-tiedostoon?

[26-Mar-2025 10:15:55 Europe/London] PHP Warning:  Undefined array key 0 in /home/user1234/public_html/more/vara.php on line 143

pevm [27.03.2025 12:22:29]

#

Miksi "Warning" -viestit tulisi piilottaa? Eikös ne usein ole hyviä merkkejä huonosta koodista? :) Tulisi korjata ehdottomasti...

Mutta meniskö näin:
error_reporting = E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR

Lebe80 [27.03.2025 12:53:22]

#

xxmss kirjoitti:

(27.03.2025 12:11:19): Kiitos edellisille! Tarkentava kysymys vielä...

Mä olen piilottanut noi korjaamalla koodin sellaiseksi, että tsekataan koodista onko muuttujat olemassa, onko niillä oikeanlaisia arvoja ennen kuin niiden arvoja yritetään lukea.

Metabolix [27.03.2025 20:35:27]

#

xxmss kirjoitti:

... jotta seuraavanlaisia rivejä ei tule error_log-tiedostoon?

Varoitukset kannattaa korjata jo nyt koodista eikä asetuksista, koska jossain tulevassa PHP-versiossa varoitus voikin olla virhe ja asetusten muuttaminen ei enää ratkaise ongelmaa.

muuskanuikku [03.04.2025 18:19:33]

#

xxmss kirjoitti:

(27.03.2025 12:11:19): Kiitos edellisille! Tarkentava kysymys vielä...

Korjaa virheesi, älä piilota niitä. Tuo on alkeellisin ja laiskin ohjelmointivirhe.

"Undefined index" tarkoittaa sitä että et välitä ohjelmoinnista etkä koodin laadusta yhtään mitään.

En edes tiedä js:n ohella mitään toista ohjelmointikieltä, jossa kyseinen virhe ei johtaisi sovelluksen kaatumiseen. PHP:ssä se on valitettavasti alennettu alimman luokan virheeksi eli ns. noticeksi.

muuskanuikku [03.04.2025 18:22:33]

#

pevm kirjoitti:

Miksi "Warning" -viestit tulisi piilottaa? Eikös ne usein ole hyviä merkkejä huonosta koodista? :) Tulisi korjata ehdottomasti...

Mutta meniskö näin:
error_reporting = E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR

Ei mene. Oikea ratkaisu ei ole kääntää pois kaikenlaisia varoituksia ymmärtämättä yhtään mitään. "Oikea ratkaisu"(*) on kääntää pois virheviestin synnyttävä virhetaso eli E_NOTICE.

(*) Oikea ratkaisu on korjata virheet eikä piilotella niitä. Virhe ei poistu koodista virheilmoitukset piilottamalla.

Koodi pitäisi aina kirjoittaa E_ALL-tilassa mitään piilottamatta. Virheilmoituksia piilotellaan vain tuotantotilassa, ja silloinkin vain estetään niitä tulostusmasta ruudulle. Tuotannossa virheet ohjataan lokitiedostoon.


Sivun alkuun

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta