PHP OPcache kešuje include
2015-07-22
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.)