Portujeme PHP kód - lomítka
Napsal autor dne 16.1.2012 v 22:08
Přečteno 80 krát.
Při vývoji webových aplikací v jazyce PHP se nám může stát, že narazíme na problém, kdy naše aplikace bude muset čelit změně operačního systému. Stát se nám to může v okamžiku, kdy vyvíjíme pro Windows a hostovat chceme na Linuxu, či naopak. Mě se před nedávnem přihodila právě druhá zmiňovaná věc, proto píšu tento krátký příspěvek.
Nebudu se zabývat rozdílnými vlasnostmi, jaké oba dva systémy mají. Dnes se omezím pouze na používání lomítek v názvech souborů, resp. cestám k nim. Začnu pozitivně - jak Linux, tak Windows používají normální lomítka, tedy /. V relativním vyjádření není tedy problém. Řádek "include "./slozka/soubor.php" bude fungovat stejna na Windows i na Llinuxu.
Problém nastává v případě absolutních cest. Řekněme, že mám konstantu, ve které mám uloženou cestu ke kořenu webu (tzv. root). Používám jí při include/require souborů v rámci celé aplikace. Nemusím se tedy starat, jak "daleko" je daný adresář od adresáře (například) se třídami. Onen problém je v tom, že Windows označují kořen systému jako C:// (či jiné písmenko), kdežto Linux jako / (pouze lomítko). Nebudu zde dlouze opisovat krátkou myšlenku. Raděi přistoupím rovnou ke kódu.
<?php
define("CESTA", dirname(__FILE__));
// Linux
echo CESTA."/soubor.php"; // /cesta/k/souboru/soubor.php
// Windows
echo CESTA."/soubor.php"; // C:\\cesta\k\souboru/soubor.php
?>
Jasně zde vidíme, že tudy cesta nevede. Předchozí kód vylepšíme nahrazením lomítka konstatnou DIRECTORY_SEPARATOR.
<?php
define("CESTA", dirname(__FILE__));
// Linux
echo CESTA.DIRECTORY_SEPARATOR."soubor.php"; // /cesta/k/souboru/soubor.php
// Windows
echo CESTA.DIRECTORY_SEPARATOR."soubor.php"; // C:\\cesta\k\souboru\soubor.php
?>
A máme vyhráno. DIRECTORY_SEPARATOR nemusíme nikde definovat ani zjišťovat, je definovaná sama od sebe.
Pamatujme si: Vkládáme-li soubory pomocí absolutní adresy, nezapomínáme na konstantu DIRECTORY_SEPARATOR. V opačném případě si přiděláme spoustu práce při pokusu o instalaci naší aplikace na server s jiným systémem, než na který jsme byli připraveni. Používáme-li pouze relativní zápis cesty k souborům, je vše v pořádku a můžeme jednoduše použít obyčejná lomítka.
Autorem blogu je devatenáctietý student neratovického gymnázia, amatérský fotograf, obyčejný internetový pisálek z počítačového prostředí.
Ha! A já byl vždycky líný přemýšlet o tom, proč se ten DIRECTORY_SEPARATOR používá :D Sice pochybuji, že někdy budu nějaký svůj výtvor deployovat na windows server, ale i tak dobré info ze života prgáče :)
Jinak kamarád mi řekl jednu dobrou větu, která naráží na tvoji nerozvynutou myšlenku : "Na windows jsou složky, na linuxu adresáře" :)