Nacházíte se zde: Úvod » Pro zákazníky » Nápověda » PHP skripty

PHP skripty


nahoru

Open_basedir restrikce

Aplikace v jednotlivých subdoménách jsou uzavřeny do svého adresáře open_basedir restrikcí. To znamená, že standardně není možné pracovat se soubory z jiné subdomény na stejné doméně (třeba funkcemi pro includování souborů, pro práci se soubory či obrázky apod.), ale pouze se soubory v prostoru subdomény, ze které je spouštěn příslušný skript.

Restrikci si můžete pro příslušnou (sub)doménu o jednu adresářovou úroveň posunout. Nastavení proveďte v klientské sekci ve správě domény v části Webserver.


nahoru

Nahrávání souborů na server pomocí PHP

Po nahrání pomocí metody POST je soubor uložen do systémového dočasného adresáře. Na serverech s PHP 4 není z důvodu restrikce přístupu (viz. open_basedir restrikce) možné k souboru přímo přistupovat (například funkcí copy(), funkcemi pro práci s obrázky apod.). Proto je nejdříve nutné použít PHP funkci move_uploaded_file(), která soubor přesune z dočasného adresáře do nového umístění do prostoru Vaší domény, kde se souborem již budete moci pracovat. Funkce má dva parametry - jméno nahrávaného souboru v dočasném adresáři a cestu, do které bude soubor uložen. Na serverech s PHP 5 je přímý přístup do dočasného adresáře možný, nicméně pro získání nahraného souboru doporučujeme i zde používat stejný postup.

Jednoduchý příklad použití funkce move_uploaded_file:

<?
  move_uploaded_file($_FILES["muj_soubor"]["tmp_name"],"./nahrane_soubory/novy_soubor");
?>

Funkce nahraje soubor odeslaný z formulářového pole muj_soubor do adresáře nahrane_soubory a uloží jej jako soubor s názvem novy_soubor. Adresář, do kterého je soubor zapisován, musí mít správně nastaveno právo zápisu a spouštění (viz článek nápovědy Přístupová práva a vlastníci souborů). Pokud budete u nahraného a přesunutého souboru potřebovat následně změnit oprávnění, použijte funkci chmod().

Další informace a příklady naleznete na php.net v nápovědě funkce move_uploaded_file(), související funkce is_uploaded_file() a v kapitole Zpracování uploadu souborů.


nahoru

Odesílání e-mailu z PHP

Při odesílání e-mailu z PHP funkcí mail() je dobré dodržovat jednoduché zásady:

  • používat všechny doporučené hlavičky (viz. příklad) - to je důležité zejména pro správné vracení odpovědí a nedoručitelných zpráv. Není-li uvedena žádná z hlaviček From či Return-Path, bude automaticky doplněna výchozí adresa php@ceskyhosting.cz, zprávy z této schránky nejsou klientům k dispozici.
  • hlavičky ukončovat znakem LF (čili \n) a nikoliv znaky CRLF (\r\n)

Následuje příklad na odeslání textového e-mailu z adresy moje@example.net na adresu jeho@example.com:

<?
  //definice hlavicek
  $headers = "From: moje@example.net\n";
  $headers .= "MIME-Version: 1.0\n";
  $headers .= "Content-Type: text/plain; charset=iso-8859-2\n";
  $headers .= "Content-Transfer-Encoding: 8bit\n";
  $headers .= "Return-Path: moje@example.net\n";

  //samotne odeslani
  mail('jeho@example.com', 'Predmet zpravy', 'Obsah zpravy', $headers);
?>

Používáte-li v odesílaných zprávách znaky s diakritikou, měl by být text příslusně zakódován (pomocí quoted-printable nebo base64).

Při rozesílání většího množství zpráv dbejte na to, aby odesíláním nebyli omezeni ostatní uživatelé sdíleného hostingu. Řešením je posílat zprávy po menších množstvích (případně ve více cyklech), rozumné množství je maximálně cca 200 odeslaných zpráv za hodinu (maximum nastavené na serverech je 1000 zpráv za hodinu na doménu).

Zprávy odesílané z PHP jsou kontrolovány antivirem. Pokud antivir zprávu vyhodnotí jako škodlivou, funkce mail() vrátí hodnotu false. Antivirová kontrola v kombinaci s omezením počtu odeslaných zpráv jsou důležitými nástroji omezujícími zneužití nedostatečně zabezpečených uživatelských aplikací k odesílání nevyžádané pošty (více v hostingové zprávě Bezpečnost práce s webovými aplikacemi).


nahoru

Zobrazení chybových zpráv

Na produkčních serverech je ve výchozím nastavení zakázáno vypisování chybových hlášení PHP (display_errors). Při fatální chybě ve skriptu proto aplikace vrátí prázdnou (bílou) stránku.

Na server by měly vždy být umisťovány již odladěné aplikace - tedy aplikace bez chyb. Pokud přesto potřebujete zobrazovat či logovat chyby PHP (typicky dočasně pro účely nalezení a odstranění chyby), změňte si příslušné nastavení PHP. Změnu nastavení pro příslušnou (sub)doménu proveďte v klientské sekci ve správě domény v části Webserver » Nastavení PHP.


nahoru

HTTP autentizace

Nastavení HTTP autentizace můžete provést v klientské sekci (Domény a hosting- Správa domény - Webserver). Autentizaci je také možné zajistit pomocí PHP skriptu. Zde je jednoduchý příklad:

<?
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW']) && 
$_SERVER['PHP_AUTH_USER'] == 'uzivatel' && $_SERVER['PHP_AUTH_PW'] == 'heslo') { // vse v poradku
  echo 'Prihlaseni probehlo uspesne.';
}
else { // chyba prihlaseni
  header('HTTP/1.0 401 Unauthorized');
  header('WWW-Authenticate: Basic realm="Login"');
  echo 'Chyba prihlaseni - zadejte platne uzivatelske jmeno a heslo!';
  exit;
}
?>

Na serverech s PHP 5 nejsou z důvodu jiného zavedení PHP do webserveru přístupné proměnné $_SERVER['PHP_AUTH_USER'] a $_SERVER['PHP_AUTH_PW']. Přihlašovací údaje jsou uloženy v proměnné $_SERVER['REMOTE_USER'] ve formátu popisovaném v RFC 2617. Tedy jako řetězec "Basic base64-user-pass", kde base64-user-pass je v base64 zakódovaný text uživatel:heslo. Aby fungoval výše uvedený skript i zde, stačí před něj umístit například tento převodní kód a požádat zákaznickou podporu o změnu konfigurace dané (sub)domény:

<?
$remote_user = base64_decode(str_replace('Basic ', '', $_SERVER['REMOTE_USER'])); // vrati retezec jmeno:heslo
$password = strstr($remote_user, ':'); // vrati retezec :heslo, nebo false (nebylo-li nic zadano)
if($password !== false) {
  $_SERVER['PHP_AUTH_PW'] = substr($password, 1); // ziska heslo
  $_SERVER['PHP_AUTH_USER'] = ereg_replace($password.'$', '', $remote_user); // ziska jmeno
}
?>

nahoru

Locales

Příklad použití locales:

<?
setlocale( LC_TIME, 'cs_CZ' );
echo strftime( "Dnes je: %A " );
?>

nahoru

Zpět na přehled nápovědy