Nacházíte se zde: Úvod Podpora Nápověda Skripty na serveru PHP skripty

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, díky čemuž bude aplikace moct pracovat se soubory v celém prostoru domény. Nastavení proveďte v klientské sekci ve správě domény v části Webserver » Nastavení PHP.

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

Soubor nahraný na server pomocí metody POST je uložen do systémového dočasného adresáře. Odtud jej aplikace může získat pomocí PHP funkce move_uploaded_file(). Následuje jednoduchý příklad jejího použití:

<?php
  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 v dokumentaci funkce move_uploaded_file(), související funkce is_uploaded_file() a v kapitole Zpracování uploadu souborů.

Odesílání e-mailu z PHP

Pro odesílání e-mailu z PHP je určena funkce mail(). Při jejím využívání je nutné dodržovat tyto 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. Adresa odesílatele musí být existující a funkční schránka. Není-li uvedena žádná z hlaviček From či Return-Path, bude automaticky doplněna výchozí adresa php@jmenovasidomeny.tld .
  • Hlavičky ukončovat znakem LF (čili \n) a nikoliv znaky CRLF (\r\n)
  • Zakódovat znaky s diakritikou v hlavičkách (viz. dále)
  • Doména odesílatele i příjemce musí mít platný MX záznam (bez toho může odeslání zprávy selhat)

E-mailová adresa uvedená v hlavičce From (tj. Od), musí být na doméně, na níž běží příslušný skript.

Následuje příklad na odeslání textového e-mailu ze skriptu na doméně example.net z adresy odesilatel@example.net na adresu prijemce@example.com:

<?php
  //definice hlavicek
  $headers = "From: odesilatel@example.net\n";
  $headers .= "MIME-Version: 1.0\n";
  $headers .= "Content-Type: text/plain; charset=utf-8\n";
  $headers .= "Content-Transfer-Encoding: 8bit\n";

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

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é hostingových služeb, a postupujte prosím v souladu s naší politikou prevence SPAMu. Zprávy ideálně posílejte postupně v menších dávkách, rozumné množství je maximálně cca 200 odeslaných zpráv za hodinu (maximum nastavené na serverech sdíleného hostingu je 1 000 zpráv za hodinu na doménu). Na virtuálních a dedikovaných serverech můžeme nastavit dle vybrané služby možnosti rozesílání individuálně. Odesílání můžete automatizovat například vhodným skriptem spouštěným pravidelně v cronu.

Zprávy odesílané z PHP jsou kontrolovány antivirem a antispamem. Pokud některá z kontrol zprávu vyhodnotí jako škodlivou, funkce mail() vrátí hodnotu false. Tyto kontroly 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).

Pro situace, kdy v aplikaci z nějakého důvodu není možné použít PHP funkci mail(), nabízíme službu WebSMTP. Další způsoby odesílání zpráv z PHP (například přes nějaký cizí odesílací SMTP server, či přímým připojením na přijímací SMTP server) nejsou standardně povoleny. Povolit je (v závislosti na konkrétní situaci) můžeme na požádání.

Kódování znaků s diakritikou

Pokud v hlavičkách zprávy, tj. například v předmětu, v adrese odesílatele či příjemce apod. používáte znaky s diakritikou, je potřeba je zakódovat dle standardu RFC2047 (pomocí kódování base64, nebo quoted-printable), například takto:

$from_name = 'Josef Novák'; // jmeno odesilatele
$from_email = 'novak@example.cz'; // e-mail odesilatele
// vysledna zakodovana hlavicka From
$from_header = "From: =?UTF-8?B?".base64_encode($from_name)."?= <$from_email>\n";

či takto:

$subject = 'Poptávka z mého webu'; // predmet zprávy
// vysledna zakodovana hlavicka Subject
$subject_header = "Subject: =?UTF-8?B?".base64_encode($subject)."?=\n";

Zprávy obsahující hlavičky s nezakódovanými znaky s diakritikou je možné doručit pouze těm příjemcům, jejichž poštovní servery podporují standard RFC6531 - SMTPUTF8. To je v současnosti spíše výjimka, takže ve většině případů taková zpráva doručena nebude a odesílatel ani nedostane zprávu o nedoručitelnosti. Obdobně může být potřeba zakódovat i tělo zprávy.

WebSMTP

WebSMTP je sdílený odesílací SMTP server určený pro odesílání e-mailů z PHP skriptů pro případy, kdy z nějakého důvodu není možné využít standardní funkci mail(). Přístup na tento server je možné aktivovat v klientské sekci, ve správě příslušné domény v záložce Webserver. Při aktivaci je zadáno přístupové heslo.

Pro připojení z PHP aplikace po aktivaci WebSMTP použijte tyto údaje:

SMTP server websmtp.cesky-hosting.cz
Uživatelské jméno Jméno příslušné domény (např. example.com)
Heslo Heslo, které jste si nastavili
Port 25
Šifrování Žádné, nebo TLS

K používání WebSMTP se váží tyto tři podmínky:

  • Je omezen počet odeslaných zpráv na jednoho uživatele (tj. doménu). Limit je 100 příjemců za hodinu (což může být například 100 zpráv pro jednotlivé příjemce, nebo jedna zpráva pro 100 příjemců).
  • E-mailová adresa odesílatele musí být na příslušné doméně, nebo jejích aliasech. Odesílání z adres na jiných doménách není povoleno.
  • Pokud je na dané doméně aktivováno SPF, musí být tento server mezi povolenými zdroji odesílaných zpráv (tzn. SPF záznam musí obsahovat zápis include:websmtp.cesky-hosting.cz). Pokud tomu tak není, odeslání zprávy bude zamítnuto.

Pro WebSMTP je možné po aktivaci volitelně zapnout DKIM. Taktéž generátor SPF s WebSMTP počítá.

Tato služba není z technických důvodů k dispozici na starých webserverech - tedy serverech sdíleného hosting s PHP 5.3 a nižší, a na starých vyhrazených serverech.

Zobrazení chybových zpráv

Na produkčních serverech je ve výchozím nastavení vypnuté jak vypisování chybových hlášení PHP (display_errors), tak jejich logování (log_errors). Při fatální chybě ve skriptu proto aplikace vrátí prázdnou (bílou) stránku.

Na servery by měly být umisťovány aplikace odladěné pro provoz - tedy schopné provozu 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 v klientské sekci ve správě domény v části Webserver » Nastavení PHP. Typ vypisovaných chyb můžete definovat ve své aplikaci pomocí funkce error_reporting().

Pokud si zapnete logování chyb, kontrolujte a odmazávejte soubor logu! Jeho nekontrolovaný nárůst může vést i k vyčerpání prostoru pro danou doménu (případně vyhrazený server).

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 starších serverech s PHP 5 nejsou z důvodu nastavení PHP standardně přístupné proměnné $_SERVER['PHP_AUTH_USER'] a $_SERVER['PHP_AUTH_PW']. Jejich dostupnost je možné zajistit úpravou konfigurace dané (sub)domény, kterou Vám na požádání provede naše zákaznická podpora.

Locales

Příklad použití locales:

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

Zabezpečené připojení na vzdálený server

Předpokladem úspěšného navázání zabezpečeného (https) připojení na vzdálený server je ověření SSL certifikátu cílové domény oproti kořenovému certifikátu certifikační autority, která doménový certifikát vydala. Na našich serverech (tj. pro PHP aplikace u nás hostované) jsou standardně instalovány pouze některé kořenové certifikáty - necháváme na uživatelích, zda a kterým autoritám chtějí důvěřovat. Ověřování důvěryhodnosti šifrovaných spojení na vzdálené servery je ve výchozím nastavení zapnuté až od PHP řady 5.6. Druhým předpokladem úspěšného navázání zabezpečeného spojení je aktuální software na webserveru. Připojení ze serverů se starším PHP nemusí všude fungovat korektně, i proto doporučujeme používat co nejnovější řadu PHP.

Aby mohlo být spojení navázáno a bylo ověřené, může tedy být potřeba do aplikace potřeba přidat příslušný kořenový certifikát (čí certifikáty). V PHP rozšíření cURL, které se pro práci se vzdálenými servery obvykle používá, se to provede jednoduše pomocí volby CURLOPT_CAINFO, která se definuje funkcí curl_setopt. Kořenové certifikáty nejpoužívanějších důvěryhodných autorit jsou (v jednom souboru) k dispozici například na adrese https://curl.haxx.se/ca/cacert.pem. Ověřování je také alternativně možné vypnout (nastavením volby CURLOPT_SSL_VERIFYPEER na hodnotu false), což ale z bezpečnostních důvodů nedoporučujeme.

PHP skript běžící jako služba

Na vyhrazených serverech nabízíme jako doplňkovou funkci možnost spouštět PHP skripty jako serverovou službu (démona). Daný skript tak může běžet nepřetržitě (nekonečná smyčka), nebo je automaticky spuštěn v případě ukončení (ať už v důsledku programové logiky, nebo nějaké chyby). Díky této funkci je skript možné využít například jako WebSockets server, nebo pro úlohy, které je třeba spouštět častěji, než 1x za minutu (což je minimální perioda spouštění cronu).

Pro ovládání běhu démona je v SSH shellu k dispozici příkaz daemon. Přidání a zrušení démona se provádí v klientské sekci, ve správě příslušné domény v záložce Webserver.

Tuto funkci na serveru zprovozníme na požádání, instalace je zpoplatněna jednorázovým poplatkem podle ceníku. Po aktivaci je tato funkce k dispozici pro všechny domény hostované na příslušném serveru.

Tato funkcionalita je určena zkušeným uživatelům. Trvale běžící skript může mít významný vliv využití systémových prostředků serveru, a tím i provoz ostatních aplikací.

Composer

Composer je nástroj pro správu PHP knihoven a jejich závislostí. Umožňuje jednoduše stahovat a aktualizovat vybrané součásti aplikace. Používá se z příkazového řádku a je součástí našeho omezeného shellu na webserverech s PHP 7.3 a vyšším.

Spouští se standardně - tedy příkazem composer v adresáři příslušné aplikace. Konfigurace se řídí souborem composer.json, který je tam třeba umístit. Příklady volání:
composer update - stažení chybějících balíčku/aktualizace již stažených
composer info - informace o stažených balíčcích

Alternativně je Composer možné spouštět i s využitím staženého PHP archivu composer.phar a příkazu php (např.
php composer.phar update). To se může hodit třeba ke spuštění Composeru jiné, než systémové verze (např. na webserveru se starším PHP).

Na některých dříve založených hostinzích nemusí být kvůli starší konfiguraci systémový Composer funkční. Opravu rádi provedeme na požádání.

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