Jak povolit nebo zakázat PHP funkci ve VPS Centru
PHP nabízí stovky vestavěných funkcí, ale řada z nich je z bezpečnostních důvodů ve výchozí konfiguraci serverů Váš Hosting zakázaná — typicky funkce schopné spustit systémový příkaz (exec, shell_exec, passthru), pracovat s nízkoúrovňovými sokety, nebo dekódovat zakódovaná data (base64_decode, gzinflate). Tyto funkce jsou oblíbenými nástroji útočníků při kompromitaci webu a jejich plošné zakázání snižuje dopad případného úspěšného útoku.
Pokud jste narazili na chybu typu Call to undefined function exec() nebo Function exec() is disabled, potřebujete upravit direktivu disable_functions v PHP-FPM pool configu vaší domény. Ve VPS Centru V3 i V2 to jde z UI; ve V3 je změna aktivní okamžitě, ve V2 se aplikuje po naplánovaném restartu webserveru (typicky do minuty).
Rychlý přehled pro pokročilé
Tato část slouží pouze pro ověření pro velmi zkušené uživatele, kteří si chtějí pouze ověřit postup a nepotřebují číst celý článek. Pro všechny ostatní doporučujeme pokračovat další sekcí.
- Webhosting: PHP funkce nelze měnit z uživatelského rozhraní — povolení po dohodě s podporou (bez garance), nebo přechod na VPS.
- VPS Centrum V3: Detail domény → Přehled → sekce Webserver → tři tečky vedle tlačítka Nastavení → Upravit PHP konfiguraci → najít aktivní řádek php_admin_value[disable_functions] → odebrat (povolení) nebo přidat (zákaz) název funkce → Uložit změny a provést reload.
- VPS Centrum V2: V pravém zeleně orámovaném panelu vybrat doménu → Nastavení → sjet na sekci Nastavení PHP → najít aktivní řádek php_admin_value[disable_functions] → upravit → Uložit v dolní části stránky → změna se aplikuje po naplánovaném restartu webserveru (čas v zeleném banneru).
- Ověření: přes SSH php -i | grep disable_functions, nebo dočasným souborem info.php s <?php phpinfo();. Ve VPS Centru V2 zkratka přes Nástroje → PHP info.
Co je dobré vědět předem
Postup je krátký — na úpravu si vyhraďte přibližně 5 minut. Ve VPS Centru V3 je změna aktivní okamžitě po uložení (PHP-FPM se reloaduje automaticky), ve V2 se aplikuje po naplánovaném restartu webserveru (typicky do minuty).
Co budete potřebovat
- Přístup do VPS Centra k vašemu serveru (na webhostingu funkce nelze měnit ze Zákaznického portálu — viz
Postup pro webhosting). - Přesný název funkce, kterou chcete povolit nebo zakázat — najdete ho buď v dokumentaci aplikace, nebo přímo v chybové hlášce vašeho webu.
- Pro ověření přes SSH: přístup na server přes SSH (volitelné — alternativa přes prohlížeč je popsaná níže).
Jak zjistíte verzi VPS Centra
Verzi VPS Centra zjistíte ze záhlaví rozhraní u loga. Pokud číslo začíná „3.“ (např. 3.1.2), používáte VPS Centrum V3. Pokud „2.“ (např. 2.66), je to VPS Centrum V2. Postup je v obou verzích podobný (najít řádek a upravit), liší se jen umístění editoru PHP configu v UI.
Postup pro webhosting
Na webhostingu PHP funkce z uživatelského rozhraní měnit nelze — direktiva disable_functions je nastavená na úrovni serveru a uživatelé webhostingu k ní nemají přístup. Důvod je sdílený charakter webhostingu: povolení rizikové funkce na jedné doméně by mohlo ohrozit ostatní weby na stejném serveru.
Máte dvě možnosti:
- Kontaktovat podporu s žádostí o povolení konkrétní funkce. Po domluvě je možné některé funkce povolit, ale negarantujeme to — záleží na bezpečnostních dopadech a typu funkce.
- Přejít na VPS nebo VDS, kde máte plnou kontrolu nad PHP konfigurací včetně disable_functions, a změny si děláte sami z VPS Centra. Konfigurátor a parametry najdete v nabídce serverů.
Pokud je vaše aplikace závislá na specifických PHP funkcích (Magento vyžaduje putenv a syslog, řada WordPress pluginů potřebuje gzdeflate a gzinflate, TCPDF používá gzuncompress), VPS je dlouhodobě praktičtější řešení než opakované žádosti podpoře.
Postup pro VPS Centrum V3
Postup ve V3 je krátký. PHP konfigurace je per doména — každá doména na serveru má vlastní pool config soubor (/etc/php/domains/fpm/pool.d/DOMENA.conf), který lze editovat přímo ve VPS Centru. Po uložení se PHP-FPM reloaduje automaticky.
Otevřete editor PHP konfigurace
V levém panelu klikněte na Domény a vyberte doménu, jejíž PHP konfiguraci chcete upravit. V detailu domény najděte sekci Webserver. Vedle tlačítka Nastavení se nacházejí tři tečky (kebab menu) — klikněte na ně a v rozbalené nabídce vyberte Upravit PHP konfiguraci.

Najděte řádek disable_functions
Otevře se dialog Upravit PHP konfiguraci s editorem souboru /etc/php/domains/fpm/pool.d/DOMENA.conf (kde DOMENA je vaše doména — např. example.cz). Najděte řádek začínající php_admin_value[disable_functions].
V souboru mohou být dva výskyty tohoto řádku:
- Aktivní řádek — bez středníku na začátku, právě se používá.
- Zakomentovaný řádek — začíná středníkem (;), slouží jako reference původního výchozího seznamu od Váš Hosting. Pokud se rozhodnete vrátit k výchozí konfiguraci, můžete podle něj snadno obnovit aktivní řádek.

Povolte nebo zakažte funkci
Funkce v seznamu jsou oddělené čárkou.
- Pro povolení funkce — z aktivního řádku php_admin_value[disable_functions] smažte název funkce (a uvolněnou čárku).
- Pro zakázání funkce — k aktivnímu řádku přidejte název funkce, oddělený čárkou.
Příklad — povolení funkce gzdeflate (často potřebná pro instalaci pluginů ve WordPressu):
Před úpravou (zkráceno):
php_admin_value[disable_functions] = apache_child_terminate, backtick, gzdeflate, gzinflate, exec, shell_exec
Po úpravě:
php_admin_value[disable_functions] = apache_child_terminate, backtick, gzinflate, exec, shell_exec
Uložte konfiguraci
V dolní části dialogu klikněte na tlačítko Uložit změny a provést reload. PHP-FPM se reloaduje automaticky a změna je ihned aktivní.

V pravém horním rohu se objeví potvrzovací zpráva Změny byly uloženy.
Postup pro VPS Centrum V2
Ve V2 se PHP konfigurace upravuje na stránce Nastavení domény v sekci Nastavení PHP.
Přejděte do Nastavení domény
V pravém zeleně orámovaném panelu vyberte v dropdownu doménu, jejíž PHP konfiguraci chcete upravit, a klikněte na Nastavení. Otevře se stránka Nastavení domény DOMENA (kde DOMENA je vaše doména — např. example.cz) s defaultním tabem Webserver.

Najděte sekci Nastavení PHP
Sjeďte na stránce dolů — pod sekcemi SSL a Nastavení verze PHP najdete sekci Nastavení PHP. Obsahuje textový editor s číslovanými řádky pool config souboru. Najděte řádek php_admin_value[disable_functions] — pokud je odkomentovaný (bez středníku na začátku), je to aktivní verze, která se právě používá.
Stejně jako ve V3 zde mohou být dva výskyty řádku — zakomentovaný (s ; na začátku, jako reference původní výchozí konfigurace od Váš Hosting) a aktivní.

Upravte seznam funkcí
Funkce v seznamu jsou oddělené čárkou.
- Pro povolení funkce — z aktivního řádku odeberte název funkce (a uvolněnou čárku).
- Pro zakázání funkce — k aktivnímu řádku přidejte název funkce, oddělený čárkou.
Konkrétní příklad úpravy najdete v postupu pro VPS Centrum V3 — princip čárkového oddělování je stejný v obou verzích.
Uložte změny
Sjeďte ve stránce úplně dolů a klikněte na tlačítko Uložit. Po uložení se v horní části stránky objeví zelený informační banner s textem Nastavení PHP bude změněno v HH:MM po naplánovaném restartu webserveru. Do té doby se bude ve formuláři níže zobrazovat aktuální nastavení. — to je potvrzení, že vaše změna byla zaregistrována a čeká na zpracování.
Naplánovaný úkol uvidíte zároveň v pravém panelu v sekci Příkazy na zpracování — s časovým razítkem a příkazem, který se provede

Ověření, že je funkce skutečně povolená
Po uložení doporučujeme ověřit, že je funkce skutečně povolená. Existují dvě varianty.
Ověření přes SSH
Připojte se na server přes SSH a spusťte:
php -i | grep disable_functions
Výstup zobrazí aktuální obsah direktivy. Pokud funkci, kterou jste povolili, ve výstupu nevidíte, je povolená správně.
Ověření přes phpinfo() v prohlížeči
Pokud nemáte SSH přístup nebo chcete vidět kompletní PHP konfiguraci konkrétní domény přesně tak, jak ji vidí PHP-FPM:
- Vytvořte v dokumentovém kořenu vaší domény soubor info.php s obsahem <?php phpinfo(); — buď přes Správce souborů ve VPS Centru V3 (detail domény → Soubory), nebo přes FTP klienta.
- Otevřete v prohlížeči adresu https://vasedomena.cz/info.php.
- V tabulce vyhledejte (Ctrl+F nebo Cmd+F) disable_functions a zkontrolujte aktuální seznam.
- Po ověření soubor okamžitě smažte. Soubor s phpinfo() zveřejňuje detaily PHP konfigurace serveru, které by neměly být veřejně dostupné.
Doporučení k povolování funkcí
PHP funkce v disable_functions nejsou všechny stejně rizikové. Při rozhodování, zda funkci povolit, je vhodné rozdělit je podle míry rizika.
Funkce s vysokým rizikem
Funkce schopné spustit libovolný systémový příkaz nebo manipulovat s prostředím procesu:
- exec, shell_exec, passthru, system, popen, proc_open, backtick — spouštění shell příkazů na serveru.
- escapeshellcmd, escapeshellarg — používané v kombinaci s předchozími.
Pokud útočník získá přístup k uploadu PHP souboru (přes zranitelný plugin, slabé heslo administrátora, zastaralou aplikaci), tyto funkce mu umožní okamžitě nainstalovat malware nebo backdoor a získat plnou kontrolu nad uživatelským účtem domény. Před povolením vždy zvažte, zda neexistuje bezpečnější alternativa — například nahrazení shell_exec('convert ...') PHP knihovnou jako Imagick, nebo exec('curl ...') PHP funkcí cURL.
Funkce se středním rizikem
- fsockopen, socket_create, socket_connect, stream_socket_client — nízkoúrovňové síťové operace. Často používané pro odesílání e-mailů přes SMTP nebo komunikaci s API. Riziko: zneužití serveru jako proxy nebo k interním síťovým útokům.
- putenv, syslog — manipulace s prostředím a systémovými logy. Některé legitimní aplikace je vyžadují (např. Magento), pro běžné weby spíš ne.
Funkce s nízkým rizikem
- base64_decode, base64_encode — kódování dat. Široce používané v legitimních knihovnách (JSON Web Tokens, e-mailové přílohy, inline obrázky). Někdy zakázáno preventivně, protože se objevuje v obfuskovaném malware kódu — samo o sobě ale bezpečnostní hrozbu nepředstavuje.
- gzdeflate, gzinflate, gzuncompress — komprese dat. Vyžadované řadou WordPress pluginů a běžných PHP knihoven.
Řešení problémů
Funkce je odebraná z disable_functions, ale stále nefunguje
- Symptom: Web vrací chybu Call to undefined function nazev_funkce() i po uložení změny v PHP konfiguraci.
- Příčina: Existuje několik možných příčin: chybějící PHP modul (rozšíření), blokace na vyšší úrovni, jiná verze PHP než ta, kterou jste editovali, nebo aktivní OPcache se starou hodnotou.
- Řešení:
- Ověřte, že jste editovali config správné PHP verze. Verzi domény najdete ve V3 v detailu domény u sekce Webserver (badge PHP X.Y), ve V2 na stránce Nastavení domény v sekci Nastavení verze PHP pro doménu DOMENA (aktivní verze je vybraná radio buttonem). Pokud máte na různých doménách různé verze PHP, mění se i config.
- Spusťte přes SSH php -m | grep -i nazev_modulu — pokud modul chybí, doinstalujte ho. Na Debianu apt install phpVERZE-NAZEV (např. pro PHP 8.4 a modul IMAP apt install php8.4-imap), na CentOS dnf install php-NAZEV.
Po instalaci modulu restartujte PHP-FPM: systemctl restart phpVERZE-fpm (např. systemctl restart php8.4-fpm). - Pokud reload PHP-FPM neproběhl (ve V2 například ještě nedorazil naplánovaný restart webserveru), proveďte ho ručně přes SSH: systemctl reload phpVERZE-fpm (např. systemctl reload php8.4-fpm). Tím se zároveň vymaže OPcache.
Po uložení vidím v editoru původní obsah
- Symptom: Změny v editoru vypadají uložené, ale po znovuotevření dialogu vidím staré hodnoty. Příčina: Liší se podle verze VPS Centra:
- V3 — pravděpodobně jste klikli na křížek dialogu místo na tlačítko Uložit změny a provést reload. Editor neukládá změny automaticky.
- V2 — toto je očekávané chování: do proběhnutí naplánovaného restartu webserveru zobrazuje formulář aktuálně aktivní konfiguraci, ne vámi uloženou novou verzi. Že je úprava registrovaná, poznáte podle zeleného banneru v horní části stránky a sekce Příkazy na zpracování v pravém panelu.
- Řešení:
- V3 — Otevřete editor znovu, proveďte změnu a klikněte explicitně na tlačítko Uložit změny a provést reload. Po úspěšném uložení uvidíte v pravém horním rohu potvrzení Změny byly uloženy.
- V2 — Zkontrolujte, zda je v horní části stránky zelený banner s plánovaným časem restartu. Pokud ano, počkejte na proběhnutí naplánovaného restartu — pak formulář zobrazí novou verzi. Pokud banner chybí, klikněte na Uložit znovu.
Nevím, jak se funkce přesně jmenuje
- Symptom: Aplikace hlásí chybu, ale není jasné, kterou funkci přesně potřebuje.
- Příčina: Chybové hlášky se liší podle PHP verze a konkrétní aplikace.
- Řešení: Hledejte v error logu aplikace nebo PHP-FPM (ve VPS Centru V3: detail domény → Logy) přesnou hlášku typu Call to undefined function NAZEV_FUNKCE() nebo Function NAZEV_FUNKCE() is disabled. Název v závorce je přesně to, co potřebujete povolit. Pokud aplikace chyby do logu nezapisuje, postup zapnutí najdete v článku Jak zobrazit chyby v PHP. Oficiální dokumentaci PHP funkcí najdete na php.net/manual.
Funkci jsem omylem zakázal a teď web nefunguje
- Symptom: Po úpravě disable_functions web vrací chybu error 500 nebo bílou stránku.
- Příčina: Pravděpodobně jste do aktivního řádku přidali funkci, kterou aplikace potřebuje.
- Řešení: Vraťte se do editoru PHP konfigurace a v aktivním řádku php_admin_value[disable_functions] odstraňte funkci, kterou jste nedávno přidali (včetně uvolněné čárky). Poté uložte.
Chci zakázat eval, ale po přidání do seznamu pořád funguje
- Symptom: Přidal/a jsem eval do disable_functions a uložil/a, ale eval() na webu stále funguje.
- Příčina: eval je v PHP jazyková konstrukce, ne funkce. Direktiva disable_functions ji nedokáže zablokovat — viz informační box v sekci Doporučení k povolování funkcí.
- Řešení: Pro skutečné zakázání eval() je nutné použít externí PHP extension (Suhosin pro PHP 7, php-evil pro PHP 8+).
Pokud problém přetrvává nebo si v něčem nejste jisti, kontaktujte naši podporu.
Podobné články
- Video návod: Jak vytvořit samostatný účet pro doménu ve VPS Centru?
- Analytika ve VPS Centru – co všechno o návštěvnosti webu zjistíte
- Video návod: Jak spravovat databáze ve VPS Centru
- Video návod: První kroky ve VPS Centru
- Git a automatický deploy ve VPS Centru
- Jak zjistit, co vytěžuje server — monitoring procesů ve VPS Centru