tavis nörttimaailmassa

EksisONE - artikkeleita ja ohjeita nörttimaailmasta

php.ini ei päivity

Silloin tällöin tulee tarve päivittää PHP:n asetuksia. Useimmiten silloin kun sivustolla ei upload onnistu, koska PHP rajoittaa tiedostokoon lapselliseen kahteen megaan. Tai saa time out -virheen, koska suoritusaika oli liian pitkä – tulee muuten helpostikin esimerkiksi backuppeja tehdessä. Silloin muokataan tiedostoa php.ini ja hetken kuluttua etsitään google punaisena sauhuten syytä siihen miksi mikään ei muuttunutkaan. Yleisin syy on, että on muokattu väärää php.ini tiedostoa, niitä kun on yleensä vähintään kaksi, ja toisena syynä tulee se, että PHP:tä käyttävälle palvelulle ei ole kerrottu muutoksesta. Sitten on kolmaskin syy: syystä X muutos ei vain mene läpi.

Ohjeet ovat Ubuntulle, ja ilmeisesti hyvin pitkälle sama pätee kaikissa Debian-pohjaisissa. Jos käytät jotain muuta lixuxjakelua, niin etsi vastaavat paikat; en osaa auttaa, mutta silti ihan samat asiat tehdään. Olen aina SSH:ssa kirjautuneena root-tunnuksella, joten jos itse käytät omaa tunnustasi, niin muista laittaa sudo tai su sopiviin paikkoihin.

Oikea php.ini

Jos sinulla on käytössä Apache2 ilman muita virityksiä, niin muokkaat tätä (versionumero korjaten):

  • /etc/php/7.3/apache2/php.ini

Jos sinulla on PHP-FPM asennettuna, kuten ainakin Nginxin kanssa aina on, niin muokkaat tätä:

  • /etc/php/7.3/fpm/php.ini

Se kolmas php.ini hakemistossa /etc/php/7.3/cli koskee shelliä, komentoriviä. Siihen tavallisen webmasterin tarvitsee koskea harvoin, jos koskaan.

Voit myös tarkistaa oikean muokattavan tiedoston. Et kuitenkaan pysty helposti tarkistamaan komentoriviltä mitä php.ini -tiedostoa websivusi käyttävät, joten joudutaan tekemään erillinen tiedosto.

nano /var/www/html/versio.php

Kopioi sinne tämä:

<?php phpinfo(); ?>

Tallenna ja poistu.

Kun menet osoitteeseen http(s);//www.eaxmple.com/versio.php niin saat jotain tämän näköistä:

Kohta Loaded Configuration File kertoo polun kanssa sen ini-tiedoston, jota tulee muokata.

Jos selaat sivua alaspäin, niin löydät kaikki voimassa olevat muutokset. Joten jos olet vaikka muuttanut uploadin max-arvoa, niin uudelleenlatamalla sivun tiedät, että onnistuiko muutos. Jos arvo muuttuu, niin kaikki on hyvin.

Kun olet valmis, niin saattaa olla syytä poistaa tekemäsi tiedosto. Ei siitä sinällään sen suurempaa harmia ole, mutta jos jostain moduulista löytyykin jokin hyödynnettävä aukko, niin tällä tiedostolla kerrot hyökkääjälle helpoimmalla mahdollisella tavalla onko sinulla se käytössä vai ei.

Uudelleenkäynnistys

Pelkkä muutos ei vielä tee mitään. Tarvitset uudelleenkäynnistyksen.

  • Jos muutit Apachen käyttämää php.ini tiedostoa: systemctl restart apache2
  • Jos muutit PHP-FPM:n käyttämää (korjaa versio): systemctl restart php7.3-fpm

Kun ei muutos muutu…

Aina silloin tällöin PHP:n asetukset eivät muut, vaikka on taatusti muokattu oikeaa php.ini tiedostoa ja uudelleenkäynnistykset on tehty kaiken taiteen ja tieteen oppien mukaan. Googlella löydät useita kysymyksiä, joihin 95 prosentissa vastaus on väärä ini-tiedosto tai tekemätön uudelleenkäynnistys – mutta niihin loppuun viiteen prosenttiin ei sitten vastauksia löydykään.

Minulla muutosten päivittymättömyys käyttöön on tullut vain ja ainoastaan versiopäivitysten jälkeen, kun käyttöön tulee neitseellinen php.ini (ihanko oikeasti linuxmaailma vuonna 2020 ei kykene tekemään järjestelmää, jossa asetukset säilyvät?)

Jos ratkaistava ongelma on vaikka uploadin rajoitus, niin varsinaiseen ongelmaan, eli php.ini muutos ei näy, niin Nginxillä tarjotaan sen omien asetusten muuttamista (googleta). Ehkä se auttaa, ehkä ei, sillä 80-prosenttisesti netin web/IT-ohjeet eivät toimi, mutta ihmettelen miten Nginx pystyisi ylittämään PHP:n asettamat rajoitukset. Ehkä se pystyy. WordPressissä neuvotaan laittamaan joko functions.php tai wp-config.php tiedostoihin esimerkiksi @ini_set( 'upload_max_size' , '16M' ); joka ei taatusti toimi, sillä se ei pysty ylittämään serverin rajoja. Sama juttu .htaccess viritysten kanssa.

Osa on neuvonut tyhjentämään OPcachen. Ohje ilmeisesti tulee siitä, että tiedetään sen liittyvät jotenkin PHP:hen ja siinä sitten tietämisen raja tulikin. OPcachce tyhjenee aina, kun Apache2 tai PHP-FPM käynnistetään. Itseasiassa, PHP-FPM:n kanssa ei ole edes mahdollista erikseen flushata OPcachea.

Työkalut alkavat olla aika vähissä. Minä painin aina tämän asian kanssa, kun PHP:n versio muuttuu ja siksi vältän sitä viimeiseen saakka. Ehkä olen vain huonotuurinen, mutta minulla on virtuaaliserverillä PHP päivittynyt uuteen versioon neljä kertaa, ja aina se, että php.ini muutos ei tule voimaan. on ensimmäinen ongelmista.

Minulla ei ole auttanut

  • systemctl stop/start apache2
  • systemctl stop/start php<versio)-fpm
  • reboot

Minulle on aina auttanut yksi asia:

  • muuta memory_limit arvoa