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