Nacházíte se zde: Úvod Podpora Nápověda Skripty na serveru Tipy k PHP aplikacím

Tipy k PHP aplikacím

Na této stránce chceme uvést užitečné tipy k PHP aplikacím a stručně upozornit na časté chyby v jejich konstrukci a zabezpečení. Tyto informace vycházejí z našich zkušeností a zkušeností s problémy, se kterými se setkávají naši zákazníci. Budeme je postupně doplňovat. V této souvislosti také doporučujeme prostudovat hostingové zprávy Bezpečnost práce s webovými aplikacemi a Efektivita fungování webových aplikací.

Globální proměnné

Tato poznámka se týká práce s daty získanými od uživatele. Práce s příslušnými proměnnými je ovliněna nastavením direktivy register_globals. Na našich serverech s PHP 5.2 a 5.3 je tato direktiva ve výchozím nastavení vypnuta s možností si ji volitelně zapnout. Od PHP řady 5.4 pak byla vývojáři úplně zrušena. Všechny aplikace doporučujeme vytvářet tak, aby pracovaly s register_globals off. Důvodem je vyšší bezpečnost a také vyhnutí se problémům s kompatibilitou.

Pro získání dat od uživatelů tedy používejte superglobální proměnné ($_POST, $_GET, $_SESSION, $_COOKIE apod.), další informace najdete například na php.net v článku Předdefinované proměnné.

Pokud je to pro Vás problematické například z důvodu příliš rozsáhlých úprav ve stávající aplikaci, můžete na začátek příslušného skriptu (či skriptů) připojit například následující jednoduchý kód. Ten převede data ze superglobálních proměnných na lokální proměnné (například data z proměnné $_POST['jmeno'] převede do proměnné $jmeno).

<?php
if(!empty($_REQUEST)) {
  foreach ($_REQUEST as $key => $value) {
    $$key = $value;
  }
}
?>

Nicméně, toto řešení by mělo být pouze dočasné - viz informace výše.

Volání lokálních souborů externě

Řada PHP funkcí umožňuje pracovat se vzdálenými soubory - to znamená, že je jim možné jako parametr zadat absolutní URL souboru (http://...). Jsou to například funkce pro práci s obrázky, funkce pro načítání či kopírování souborů, apod.

Tímto způsobem je možné načítat i soubory lokální - tedy soubory, které jsou umístěny na stejné doméně, jako příslušný skript. Tento způsob práce je ale problematický - při načtení souboru je vytvořeno další spojení na webserver a vzniká tak zbytečná zátěž. Navíc při větším počtu takových požadavků by mohlo dojít i vyčerpání počtu současných možných spojení či přetížení webserveru. Lokální soubory by měly být načítány lokálně - tzn. zadáním relativní nebo absolutní cesty v rámci serveru.

Pro demonstraci uvedeme jednoduchý příklad. Mějme doménu www.mojedomena.cz a v jejím prostoru skript obrazek.php, který bude pomocí funkce getimagesize() zjišťovat velikost obrázku fotka.jpg umístěného tamtéž.

Správně řešený skript obrazek.php bude vypadat takto:

<?php
  $velikost = getimagesize('fotka.jpg');
?>

Stejného výsledku je možné dosáhnout i následujícím chybným voláním. Při něm je vytvořeno zbytečné spojení na webserver:

<?php
  $velikost = getimagesize('http://www.mojedomena.cz/fotka.jpg');
?>

Máte-li načítané soubory umístěny v jiné subdoméně dané domény, není přímá práce s nimi kvůli nastavené open_basedir restrikci možná. Nicméně restrikci můžeme na požádání posunout - viz článek Open_basedir restrikce.

Zpět na nadřazené téma

Objednejte si hosting ještě dnes

Špičkový webhosting s pohodlnou klientskou sekcí a profesionální zákaznickou podporou.

  • 14 dní na vyzkoušení
  • Garance vrácení platby do 30 dnů

125 Kč 59 Kč

71,39 Kč s DPH/měsíc

Akční sleva 53 % pro nové objednávky na 1. rok

Nahoru