Stránky

PHP OPcache kešuje include

V PHP rád používám konstrukci:

$ciselnik = include('ciselnik.php');

kde ciselnik.php je:

return array(1, 2, 3);

Tak mám proměnnou $ciselnik naplněnou polem a nemusím se zabývat např. parsováním YML, můžu použít proměné, můžu ho generovat funkcí atd.

Když chci do číselníků přidat položku, můžu to taky udělat v PHP:

$ciselnik[] = 4;
file_put_contents(
    'ciselnik.php',
    '<?php return ' . var_export($ciselnik, true) . ';'
    );

potud všechno super... ale pokud se teď pokusím načíst nový čiselník, stejně jako prve:

$ciselnik = include('ciselnik.php');

pak

var_export($ciselnik);

vrátí

array ( 0 => 1, 1 => 2, 2 => 3, )

Takže PHP už prostě soubor znovu nenačte a spokojí se s obsahem/výsledkem ze začátku…

Tak jsem na to přišel: tohle divné chování je zapřičiněno OPCachí, kterou jsem měl na lokále zapnutou. (Aby mě to napadlo, ztrávil jsem dvě hodiny snahou zorientovat se ve zdrojácích PHP interpreteru, ale i to se může hodit.)

Štítky

Profily

Další odkazy