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?
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
Kannattaa laittaa pelkkä E_ALL ja korjata deprecated-virheet, ettei seuraavassa päivityksessä käy yllätys, kun softa kaatuu poistuneen ominaisuuden takia.
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
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
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.
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.
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.
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.