Page tree
Skip to end of metadata
Go to start of metadata

PHP direktiva open_basedir umožňuje na úrovni serveru nastavit adresáře, ke kterým má aplikace přístup. V případě, že je open_basedir na serveru aktivní, nemá aplikace šanci číst/zapisovat soubory do jiných, než povolených adresářů. Aby Vivo v takovém případě fungovalo správně, je nutné provést v projektu několik úprav.

Detekce aktivního open_basedir

Existuje několik možných způsobů

  • Z phpinfo() - direktiva open_basedir bude mít definovanou hodnotu

  • Z error logů - budou obsahovat text ve tvaru open_basedir restriction in effect
  • Z povahy chyb - pokud nefungují operace související s prací se soubory (např. převzorkování obrázků)
  • Z CLI 

    php --info|grep open_basedir

    Pokud je zobrazena jiná hodnota, než no value, je open_basedir aktivní. Toto nastavení ale nemusí reflektovat hodnoty určené pro konkrétní virtualhost s projektem.

Vytvoření adresáře pro dočasné soubory

V rámci některé z cest povolených v open_basedir je nutné vytvořit adresář pro uchování dočasných souborů. Doporučení je vytvořit adresář tmp v rámci data složky projektu. Adresář musí mít nastavena příslušná oprávnění (čtení+zápis souborů, vytváření podsložek).

Nastavení cesty pro ukládání dočasných souborů

Od verze 2.2.6 podporuje Vivo možnost změnit cestu pro ukládání svých dočasných souborů.

Dočasný adresář je možné konfigurovat pomocí direktivy tmpDir, umístěné na kořenové úrovni konfigurace aplikace. V rámci hodnoty tohoto parametru je pro usnadnění možné použít konstantu APP_DIR, směřující do kořenového adresáře projektu, např.

local.yml
tmpDir: APP_DIR/data/tmp

V případě, že není tmpDir nastaven, použije se výchozí hodnota, získaná ze sys_get_temp_dir(). V rámci aplikace je pak hodnota dostupná pomocí konstanty VIVO_TMP_DIR. Hodnota v této konstantě je vždy bez koncového lomítka.

Zprovoznění uploadu souborů (bez flashe)

Aktivní open_basedir může mít vliv i na funkci uploadu souborů do Viva. Problém je v tom, že dočasný adresář pro ukládání souborů definovaný v PHP (upload_tmp_dir) nemusí být zahrnutý v cestách povolených pomocí open_basedir. Nastavení tohoto adresáře aplikace většinou nemá šanci ovlivnit. Je možné zkusit jej nastavit v .htaccess pomocí direktivy 

.htaccess
php_value upload_tmp_dir /path/to/my/temp/folder

ale pravděpodobně to nebude povoleno. V takovém případě nezbývá, než se s prosbou o korektní nastavení obrátit na správce serveru.

Celý proces je lepší zkoušet s vypnutým flash uploaderem, aby se vyloučily možnosti chyby pramenící z jeho použití (např. chybné nastavení proxy serveru). Toho je možné dosáhnout následujícím blokem konfigurace:

local.yml
ui:
    uploader:
        enable: false

Konfigurace flash uploaderu

Zprovozňování flash uploaderu má smysl věnovat úsilí až v případě, že korektně funguje upload souborů klasickou cestou. V rámci konfigurace je nutné definovat cesty pro uchování dočasných souborů pro uploader:

local.yml
ui:
    uploader:
        enable: true
        tmpDir: /path/to/my/temp/folder
        uploadDir: /path/to/my/temp/folder