Měl jsem problém s rozchozením Wordpress čestiny na mém webhostingu tunaj na Savana.cz. Vše jsem nastavil a několikrát zkontroloval a nic. A doma mi to šlapalo na první nakopnutí. Hrabáním se v kódu jsem dorazil až na místo, kde byl problém.
Problém byl v následující kontrole ve funkci gettext_reader() v souboru gettext.php. Vždy to vyhučelo s tím, že binární MO soubor není košer. Načtou se první 4 bajty, tedy první 32bit integer a porovnáváním s tou magii se řeší malý-velký indián.
Opravdu miluji magická čísla a nejvíce ta, u kterých je připojena vševysvětlující jednoslovná poznámka. Například slovo bug. A je jasno.
// $MAGIC1 = (int)0x950412de; //bug in PHP 5
$MAGIC1 = (int) - 1794895138;
// $MAGIC2 = (int)0xde120495; //bug
$MAGIC2 = (int) - 569244523;
$this->STREAM = $Reader;
$magic = $this->readint();
if ($magic == $MAGIC1) {
$this->BYTEORDER = 0;
} elseif ($magic == $MAGIC2) {
$this->BYTEORDER = 1;
} else {
$this->error = 1; // not MO file
return false;
}
Pátral jsem dál. Pak jsem si řekl, že to musí nějak souviset s verzi php a implementací gettext funkcí. Trošek jsem ještě googlil a našel jsem, že něco podobného už řešil skriker. A to co fungovalo jako oprava pro verzi Wordpress 1.5 na PHP 5, tak funguje i jako oprava pro Wordpress 2.0 na PHP 4.4.0.
Takže, jak už pravil skriker, v souboru wpincludes/gettext.php si poupravte ten chaos kolem magických čísel následovně …
//$MAGIC1 = (int)0×950412de; //bug in PHP 5
//$MAGIC1 = (int) - 1794895138; //bug in PHP 4.4.0
$MAGIC1 = 2500072158;
//$MAGIC2 = (int)0xde120495; //bug
//$MAGIC2 = (int) - 569244523;// bug in PHP 4.4.0
$MAGIC2 = 3725722773;
… a čeština pojede. Du spát, jsem po tom souboji zcela znaven. 