Příručka:Konfigurace nahrávání souborů

This page is a translated version of the page Manual:Configuring file uploads and the translation is 97% complete.
Outdated translations are marked like this.

MediaWiki podporuje nahrávání a integraci mediálních souborů. Tato stránka popisuje technické aspekty této funkce, obecné informace o použití viz Příručka:Správa obrázků a Nápověda:Obrázky .

Počínaje verzí MediaWiki 1.1 je nahrávání zpočátku z bezpečnostních důvodů zakázáno. Nahrávání lze povolit prostřednictvím nastavení konfigurace, i když se doporučuje nejprve zkontrolovat určité předpoklady.

Předpoklady

Ujistěte se, že je v PHP povoleno nahrávání

V php.ini je třeba nastavit následující:

file_uploads = On

Pokud toto není nastaveno, PHP skripty nemohou používat funkce nahrávání a nahrávání MediaWiki nebude povoleno.

Pokud je nastavena direktiva open_basedir, musí obsahovat jak cílovou složku pro nahrávání ve vaší instalaci MediaWiki ("{$IP}/images"), tak složku 'upload_tmp_dir' (výchozí systémová složka, pokud není nastavena). If this is in effect, also check if your hoster has properly configured 'sys_temp_dir', because sometimes they forget about that as well and you cannot write temporary files at all (upload, session or any other tmp file).

Přidání 'upload_tmp_dir' může zabránit zprávám jako "Nelze najít soubor "/var/tmp/php31aWnF" (kde v tomto příkladu 'upload_tmp_dir' je '/var/tmp'). Přečtěte si více o nahrávání souborů PHP na Základy nahrávání souborů a zejména move_uploaded_file().

Formální hodnota proměnné je booleovský výraz. PHP považuje každý řetězec, který není rozpoznán jako hodnotu False, za pravdivý, a proto často používaná hodnota "on" dává stejný výsledek.

Zkontrolujte uživatele systému Windows a IIS

Nastavte %SystemRoot%\TEMP tak, aby měl oprávnění pro internetový účet hosta (IUSR_MachineName nebo IUSR pro IIS 7+): Čtení, zápis a provést;

Zkontrolujte zabezpečení adresáře

Adresář pro nahrávání je třeba nakonfigurovat tak, aby koncový uživatel nemohl nahrávat a spouštět další skripty, které by pak mohly zneužít přístup k vašemu webovému adresáři a poškodit vaši wiki nebo webovou stránku. .

Nastavte složku /images (nebo složku /uploads v předchozích verzích), aby měla oprávnění "755":

  • User může číst, zapisovat a spouštět;
  • Group může číst a spouštět;
  • World může číst a spouštět.
Pouze složky musí mít oprávnění ke spuštění. Soubory nesmí mít oprávnění ke spuštění. Chcete-li v systému Linux odebrat oprávnění ke spustitelným souborům ze všech souborů ve složce a přidat oprávnění ke spuštění do složky a všech podsložek: chmod -x+X uploads_folder -R

Pokud používáte SELinux , nezapomeňte odpovídajícím způsobem upravit ACL (viz tam).

Zkontrolujte zabezpečení webového serveru

See Manual:Security#Upload security for changes to make to your webserver configuration to prevent uploaded files from executing code or having browsers execute malicious files.

  • Omezení výpisu adresářů ve složce obrázků

Pokud nechcete, aby veřejný uživatel vypisoval vaši složku obrázků, můžete to nastavit v konfiguraci Apache:

        <Directory /var/www/wiki/images>
                Options -Indexes
        </Directory>

Zkontrolujte soubor .htaccess

Adresář images v instalační složce MediaWiki obsahuje soubor .htaccess s některými konfiguracemi. Cílem tohoto souboru je zajistit větší zabezpečení složky pro nahrávání, a pokud umístíte svůj adresář pro nahrávání někam jinam, doporučuje se také zkopírovat soubor .htaccess do nového umístění nebo použít tuto konfiguraci přímo na serveru. Některé z těchto konfigurací však mohou způsobit konflikty nebo chyby v závislosti na konfiguraci serveru.

Některé věci, které je třeba vzít v úvahu:

  • Pokud server neumožňuje nastavit nebo přepsat direktivy v souborech .htaccess, může mít přístup k libovolnému souboru v této složce za následek obecnou "chybu HTTP 500". V takovém případě byste měli řádky okomentovat a aplikovat tyto direktivy přímo na konfigurační soubory serveru. Direktivy, které s největší pravděpodobností způsobují problémy, jsou AddType — který brání souborům HTML a PHP sloužit jako HTML — a php_admin_flag — který by bránil analyzovat a spouštět soubory PHP na serveru jako takovém.

Zapnutí/vypnutí nahrávání

Verze MediaWiki:
1.5

V MediaWiki verze 1.5 a novější je atribut, který má být nastaven, umístěn v LocalSettings.php a $wgEnableUploads je nastaven následovně:

$wgEnableUploads = true; # Povolení nahrávání

Chcete-li funkci nahrávání zakázat, nastavte atribut na hodnotu false:

$wgEnableUploads = false; # Zakázání nahrávání

Použití centrálního úložiště

InstantCommons je funkce povolená změnou konfigurace, která vám poskytuje okamžitý přístup k milionům bezplatných (volně licencovaných) souborů na Wikimedia Commons.

Oprávnění k nahrávání

Ve výchozím nastavení mohou soubory nahrávat všichni registrovaní uživatelé. Chcete-li to omezit, musíte změnit $wgGroupPermissions :

  • Chcete-li zabránit běžným uživatelům v nahrávání souborů:
    $wgGroupPermissions['user']['upload'] = false;
  • Chcete-li vytvořit speciální skupinu s názvem "uploadaccess" a umožnit členům této skupiny nahrávat soubory:
    $wgGroupPermissions['uploadaccess']['upload'] = true;
  • Chcete-li povolit "autoconfirmed" (automaticky potvrzeným) uživatelům (nezačátečníkům) nahrávat soubory:
    $wgGroupPermissions['autoconfirmed']['upload'] = true;

Právo nahradit existující soubory je řešeno zvláštním oprávněním, které se nazývá reupload:

  • Chcete-li běžným uživatelům zabránit v přepsání existujících souborů:
    $wgGroupPermissions['user']['reupload'] = false;
  • Chcete-li umožnit "automaticky potvrzeným" uživatelům (nezačátečníkům) nahradit existující soubory:
    $wgGroupPermissions['autoconfirmed']['reupload'] = true;

Pokud je nastaveno ForeignFileRepo, právo na místní nahrazení těchto souborů se řídí speciálním oprávněním, které se nazývá reupload-shared:

  • Chcete-li běžným uživatelům zabránit v místním přepisování souborů filerepo:
    $wgGroupPermissions['user']['reupload-shared'] = false;
  • Chcete-li umožnit "automaticky potvrzeným" uživatelům (nezačátečníkům) nahradit soubory filerepo lokálně:
    $wgGroupPermissions['autoconfirmed']['reupload-shared'] = true;

Viz Příručka:Uživatelská práva pro podrobnosti o uživatelských právech a Příručka:Zabránění přístupu pro více informací o omezení přístupu.

Konfigurace typů souborů

Můžete přidat $wgFileExtensions do LocalSettings.php , abyste umožnili nahrávání jiných požadovaných typů souborů. Můžete například změnit řádek $wgFileExtensions, aby vypadal nějak takto

$wgFileExtensions = [ 'png', 'gif', 'jpg', 'jpeg', 'doc',
	'xls', 'mpp', 'pdf', 'ppt', 'tiff', 'bmp', 'docx', 'xlsx',
	'pptx', 'ps', 'odt', 'ods', 'odp', 'odg'
];

nebo

$wgFileExtensions = array_merge( $wgFileExtensions, [
	'doc', 'xls', 'mpp', 'pdf', 'ppt', 'xlsx', 'jpg', 
	'tiff', 'odt', 'odg', 'ods', 'odp'
] );

nebo

# Přidejte nové typy do stávajícího seznamu z DefaultSettings.php
$wgFileExtensions[] = 'docx';
$wgFileExtensions[] = 'xls';
$wgFileExtensions[] = 'pdf';
$wgFileExtensions[] = 'mpp';
$wgFileExtensions[] = 'odt';
$wgFileExtensions[] = 'ods';

Některé přípony souborů jsou však zakázány ($1, dříve $2 pro MediaWiki 1.36 a starší) a nelze je nahrát, i když jsou přidány do $wgFileExtensions. Chcete-li nahrát soubory se zakázanými příponami, musíte upravit $wgProhibitedFileExtensions . Chcete-li například uživatelům umožnit nahrávat spustitelné soubory:

$wgFileExtensions[] = 'exe';
$wgProhibitedFileExtensions = array_diff( $wgProhibitedFileExtensions, [ 'exe' ] );

Navíc $wgMimeTypeExclusions (dříve $3) zabraňuje určitým typům souborů založeným na MIME typu. Soubory .zip jsou například zakázány na základě typu MIME (MediaWiki verze 1.14 až 1.17).

Můžete také nastavit $wgStrictFileExtensions

$wgStrictFileExtensions = false;

aby bylo možné nahrát většinu typů souborů. Zakázané typy souborů a typy MIME však stále nebudou povoleny.

  Varování: Nastavení $wgStrictFileExtensions na hodnotu false nebo změna $wgProhibitedFileExtensions může vést k tomu, že vy nebo vaši uživatelé budou vystaveni bezpečnostním rizikům.

Pokud se vám zobrazuje chyba "Soubor je poškozený nebo má nesprávnou příponu", ujistěte se, že detekce typu mime funguje správně.

Pokud se rozhodnete povolit jakýkoli druh souboru, ujistěte se, že vaše detekce mime funguje a zvažte aktivaci antivirové kontroly pro nahrávání .

Chcete-li povolit rozšíření zip (testováno v MediaWiki v1.19.23), bude v souboru LocalSettings.php nutné následující:

$wgFileExtensions[] = 'zip';
// $wgTrustedMediaFormats[] = 'ARCHIVE';
$wgTrustedMediaFormats[] = 'application/zip';


Náhled

Informace o automatickém vykreslování/miniaturách obrázků viz Náhledy obrázků . Problémy s náhledy viz Miniatury obrázků nefungují a/nebo se nezobrazují.

Verze MediaWiki:
1.11

Pokud soubor není vizuální (jako obrázek nebo video), použije se místo něj ikona souboru. Ty jsou generovány funkcí iconThumb() ve třídě File ve skupině FileRepo. Ikony uložené v "$wgStyleDirectory/common/images/icons/" ve formátu "fileicon-$extension.png".

Nastavení maximální velikosti pro nahrávání souborů

Prohlížeče sdělí serveru velikost souboru, který má být nahrán, ještě předtím, než soubor skutečně odešle.

Pokud je nahrávání příliš velké, je cílem (serverem) odmítnuto a nahrávání se nezdaří a poskytuje více chyb v závislosti na tom, na které vrstvě byl limit uložen:

  • Pokud se jedná o serverový limit (nginx, Apache) na maximální množství přenášených dat, může jednoduše selhat s chybou HTTP 500 nebo HTTP 413 – entita požadavku je příliš velká.
  • Pokud je limit na úrovni PHP, pokud je dosaženo post_max_size, můžete dostat obecnou chybu HTTP 500 (nebo jednoduše prázdnou stránku), jinak by MediaWiki měla poskytnout smysluplnější chybovou zprávu.
 
post_max_size a upload_max_filesize v php.ini

Ve výchozím nastavení omezuje konfigurační kód v php.ini velikost nahrávaných souborů na 2 megabajty (a maximální velikost post operace na 8 megabajtů). Chcete-li povolit nahrávání větších souborů, upravte tyto parametry v php.ini:

To může vyžadovat root přístup k serveru. (Pokud jste na sdíleném hostiteli, obraťte se na správce serveru.)

Pokud zvyšujete maximální velikost nahrávaného souboru na hodnotu větší než 100 MB, budete muset přidat $wgMaxUploadSize s novou hodnotou velikosti nahrávaného souboru do LocalSettings.php .
Vyhledání souboru php.ini

Umístění souboru php.ini se liší podle distribuce, kterou používáte. Viz Příručka:Php.ini , kde najdete pokyny pro nalezení správné php.ini používané vaším webovým serverem (na rozdíl od php.ini používaného binárním souborem příkazového řádku).

Více webových stránek hostovaných na serveru

Pokud máte více než jednu webovou stránku hostovanou na serveru a chcete změnit pouze pro MediaWiki, vložte do svého /etc/apache2/sites-enabled/your_wiki_site.com uvnitř <Virtual Host> (virtuálního hostitele):

php_value upload_max_filesize 100M
php_value post_max_size 100M

Obě výše uvedená nastavení fungují také v souboru .htaccess, pokud váš web používá mod_php. Pokud váš web používá PHP >= 5.3 a umožňuje to, můžete místo toho umístit direktivy php.ini do .user.ini souborů.

Limity webového serveru

Váš webový server může uložit další limity na velikost souborů povolených pro nahrávání. Pro Apache je jedním z relevantních nastavení LimitRequestBody. [1] Pro Nginx , relevantní nastavení je client_max_body_size.[2] Pro Lighttpd, server.max -request-size může vyžadovat úpravu.[3]

Po úpravě konfigurace php.ini nebo webového serveru budete muset restartovat Apache nebo IIS.

Ubuntu 16.04: sudo service apache2 restart

Možná budete také muset restartovat php5-fpm po změně konfigurace PHP (nebo ngingx server?).

(sudo /etc/init.d/php5-fpm restartujte například v Linuxu.)

Upozornění na nahrávání příliš velkých souborů

Samotná MediaWiki vydá varování, pokud se pokusíte nahrát soubory větší, než je specifikováno volbou $wgUploadSizeWarning . To je nezávislé na pevném limitu stanoveném PHP.

Dočasné limity nahrávání

Dočasné změny limitů nahrávání (například při používání více wikin na farmě) lze změnit přidáním řádků:

ini_set( 'post_max_size', '50M' );
ini_set( 'upload_max_filesize', '50M' );

do konfiguračního souboru MediaWiki LocalSettings.php pro každou wiki. V tomto příkladu je limit PHP nastaven na 50 Mb. Všimněte si, že tato nastavení nepřepíší maximální nastavení nastavená výše (protože základní soubory php.ini a apache2 php.ini nastavují absolutní maximum). Tato metoda nastavuje maxima, která jsou menší než absolutní maximum.

Limit nahrávání IIS7
Ve výchozím nastavení je IIS7[4] v systému Windows 2008 umožňuje nahrát pouze 30 MB prostřednictvím webové aplikace. Větší soubory po nahrání vrátí chybu 404. Pokud máte tento problém, můžete jej vyřešit zvýšením maximální velikosti souboru přidáním následujícího kódu do ‎<system.webServer> v souboru web.config:
<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="50000000" />
  </requestFiltering>
</security>

S výše uvedenou maxAllowedContentLength mohou uživatelé nahrávat soubory o velikosti 50 000 000 bajtů (50 MB). Toto nastavení bude fungovat okamžitě bez restartování služeb IIS. Soubor web.config se nachází v kořenovém adresáři vašeho webu.

Povolení nahrávání souborů až do 2G:

přidejte následující řádky k LocalSettings.php:

$wgUploadSizeWarning = 2147483647;
$wgMaxUploadSize = 2147483647;

Také upravte následující řádky v $php ini:

memory_limit = 2048M (this line may not be necessary)
post_max_size = 2048M
upload_max_filesize = 2048M

V souboru web.config IIS přepište hodnotu maxRequestLength. Například následující položka v souboru web.config umožňuje nahrát soubory, které jsou menší nebo rovné 2 gigabajtům (GB):

<httpRuntime maxRequestLength="2097151" executionTimeout="18000"/>

Se službou IIS 7 ji také musíte nakonfigurovat tak, aby umožňovala nahrávání velkého množství. To zjistíte kliknutím na "Request Filtering > Edit Feature Settings" (filtrování požadavků > upravit nastavení funkcí) v části IIS uprostřed okna. Nastavte pole "Maximální povolená délka obsahu (bajty)" na 2147482624. Pokud v části IIS nevidíte "Request Filtering" (filtrování požadavků), je třeba jej povolit prostřednictvím Internet Information Services > World Wide Web Services > Security (internetových informačních služeb > služby World Wide Web > zabezpečení) v oblasti "Zapnout nebo vypnout funkce systému Windows" v Ovládacích panelech.

Pokud výše uvedený tip neumožňuje nahrávání velkého množství, otevřete příkazový řádek a spusťte také tento příkaz:

%windir%\system32\inetsrv\appcmd set config -section:requestFiltering -requestLimits.maxAllowedContentLength: 2147482624

Nahrávání přímo z adresy URL ("Sideloading")

Pokud chcete, aby uživatel mohl přímo nahrávat soubory z adresy URL, nikoli ze souboru v místním počítači, nastavte $wgAllowCopyUploads = true.

Ve výchozím nastavení je nahrávání pomocí URL možné pouze pomocí API (nebo rozšíření, jako je UploadWizard ). Aby byla možnost použitelná ze Special:Upload, musíte také nastavit $wgCopyUploadsFromSpecialUpload na true. Na formuláři pro nahrávání pak uvidíte další pole pro adresu URL pod obvyklým polem názvu souboru. Pole URL je ve výchozím nastavení zašedlé, ale lze jej aktivovat přepínacím tlačítkem (zaškrtávacího políčka) nalevo od pole.

Aby uživatelé mohli používat tuto funkci, musí mít uživatelské právo upload_by_url. Toto právo bylo sysopům standardně uděleno až do MediaWiki 1.20, ale nyní je třeba je udělit explicitně. Chcete-li to umožnit normálním uživatelům, nastavte

 $wgGroupPermissions['user']['upload_by_url'] = true;

Mějte na paměti, že povolení nahrávání přímo z libovolného místa na webu usnadňuje nahrávání náhodného nechtěného materiálu a může být špatně pochopeno jako pozvánka k nahrávání čehokoli, s čím se lidé mohou na webu setkat.

Pro podporu této funkce musí být povolena podpora cURL v PHP. Nakonfigurujte si PHP při instalaci pomocí volby --with-curl.
Pokud váš server přistupuje k internetu přes proxy, je třeba odpovídajícím způsobem nastavit $wgHTTPProxy . Buď jej zadáte přímo, nebo, pokud váš server poskytuje proměnnou prostředí http_proxy, podívejte se na své phpinfo(), pak můžete použít následující kód v LocalSettings.php:
/*
 * Proxy to use for CURL requests.
 */
if ( isset( $_ENV['http_proxy'] )) $wgHTTPProxy = $_ENV['http_proxy'];

Hromadné nahrávání

Pro nahrání více souborů najednou je k dispozici řada nástrojů, nikoli každý soubor samostatně:

Rozšíření Popis Stav vydání Požadavky
Extension:UploadWizard Použito na Wikimedia Commons Stabilní MediaWiki 1.23+
Extension:MsUpload Umožňuje uživateli nahrát více souborů, včetně přetažení souborů. Stabilní 1.32+
Extension:SimpleBatchUpload Základní, bezproblémové nahrávání více souborů na MediaWiki Stabilní 1.31+
Extension:VisualData/File_upload Includes a fully-configurable multiple file upload with filename formula and CRUD operations Stabilní 1.35+
Commonist (externí odkaz na Wikimedia Commons) Vyžaduje nahrání souboru prostřednictvím api.php.
importImages.php "Umístěte soubory na server na čitelné místo a spusťte skript maintenance/importImages.php z příkazového řádku."[5]

Adresář pro nahrání

Při každém nahrání obrázku se vytvoří několik věcí:

  1. Článek ve jmenném prostoru souboru s názvem souboru, např. Soubor:MyPicture.png. Tato stránka je uložena a lze ji upravovat jako kteroukoli jinou stránku.
  2. Soubor samotný je uložen do složky v souborovém systému, který je nakonfigurován v $wgUploadDirectory nebo do jedné z jejích podsložek (viz níže).
  3. Pokud je k dispozici miniatura, v případě potřeby se vytvoří miniaturní verze souboru (například pro použití na stránce s popisem souboru. Ty jsou uloženy v adresáři thumb adresáře s obrázky, v samostatném adresáři pro každý hlavní soubor.

Pokud je povoleno $wgHashedUploadDirectory (ve výchozím nastavení), MediaWiki vytvoří několik podadresářů v adresáři obrázků.

Pokud je $wgHashedUploadDirectory nastaveno na true, nahrané soubory budou distribuovány do podadresářů $wgUploadDirectory na základě prvních dvou znaků md5 hash názvu souboru. (např. $IP/images/a/ab/foo.jpg) Vytvoření takových podadresářů probíhá automaticky. Toho se používá, aby se zabránilo příliš mnoha souborům v jedné složce, protože některé systémy souborů nefungují dobře s velkým počtem souborů v jedné složce.

Pokud máte pouze malou wiki s malým počtem nahraných obrázků, můžete to vypnout nastavením $wgHashedUploadDirectory = false, všechny obrázky se nahrávají v samotném $wgUploadDirectory. (např. $IP/images/foo.jpg)

Multiwiki stránky

  • Ujistěte se, že jste změnili umístění webu v LocalSettings.php z, např. /var/lib/mediawiki do libovolného místa instalace a vytvořil adresář s obrázky, do kterého lze zapisovat (většinu zbytku lze symbolicky propojit).

Pokud tak neučiníte, dojde k záhadnému přerušení nahrávání obrázků.

Konfigurace formuláře pro nahrávání

Zpráva formuláře pro nahrání poskytnutá s výchozí instalací MediWiki (která se zobrazí, když kliknete na odkaz "Nahrát soubor" nebo přejdete na odkaz Special:Upload), nemusí se vám hodit.

V takovém případě můžete upravit obsah MediaWiki:Uploadtext a zadat svůj vlastní text. Pokud je vaše wiki stránka vícejazyčná, nezapomeňte upravit lokalizované verze jako MediaWiki:Uploadtext/de.

Na stránce MediaWiki:Licenses si můžete přizpůsobit rozevírací seznam licencí pro nahrávání vašich stránek. Viz dokumentaci této funkce.

Vezměte v úvahu, že lokalizované verze jako MediaWiki:Licenses/de nebudou ve výchozím nastavení fungovat. Chcete-li je povolit, musíte nakonfigurovat proměnnou $wgForceUIMsgAsContentMsg .

Upravte MediaWiki:Upload-default-description a přidejte počáteční text do pole "Souhrn" formuláře pro nahrávání (například vaše wiki stránka má univerzální šablonu pro souhrny pro nahrávání a chcete, aby tuto šablonu používali všichni).

Známé problémy ve Windows

Spuštění MediaWiki na Windows serveru má určitá omezení v povolených názvech souborů kvůli chybě PHP. PHP nedokáže správně zpracovat názvy souborů s jinými znaky než ASCII a MediaWiki odmítne nahrát soubory obsahující takové znaky, aby se zabránilo nefunkčnímu nahrávání (úkol T3780), se zprávou Tato wiki nepodporuje názvy souborů obsahující zvláštní znaky..

Od MediaWiki 1.31 MediaWiki může zpracovávat názvy souborů s neascii znaky, pokud používá PHP 7.1 nebo novější.

Známé problémy s názvy databází s nealfanumerickými znaky

Pokud $wgDBname obsahuje nealfanumerické znaky, nahrávání může selhat s chybami jako Nelze vytvořit adresář "mwstore://local-backend/local-public/<path>".. To je způsobeno interní kontrolou platného názvu kontejneru pro backend soubor, ale je vytvořen pomocí $wgDBname.

Od MediaWiki 1.26 umožňuje nahrávání, když $wgDBname obsahuje tečky.

Související odkazy

Poznámky pod čarou