Příručka:Konfigurace nahrávání souborů
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().
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.
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 — aphp_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.
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.
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:
- post_max_size, ve výchozím nastavení 8 megabajtů
- upload_max_filesize, ve výchozím nastavení 2 megabajty
To může vyžadovat root přístup k serveru. (Pokud jste na sdíleném hostiteli, obraťte se na správce serveru.)
- 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]
Ubuntu 16.04: sudo service apache2 restart
(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
<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.
$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í:
- Č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.
- 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). - 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
- Sekce zabezpečení Zabezpečení nahrávání
- Příručka:Nastavení konfigurace#Nahrávání pro seznam všech konfiguračních proměnných souvisejících s nahráváním souborů
- Kategorie:Proměnné aktualizace - podobný seznam jako kategorie (řazeno abecedně)
- Vidíte prázdnou stránku při pokusu o nahrání souboru
- Přidání podpory pro nové typy souborů
Poznámky pod čarou
- ↑ core – Apache HTTP Server verze 2.4 – LimitRequestBody Direktiva, příručka Apache
- ↑ client_max_body_size, příručka Nginx
- ↑ server. max-request-size, příručka Lighthttpd
- ↑ IIS7 novou revizí (verze 7.0) Internetové informační služby, která je součástí Windows Vista a další verze Windows Server.
- ↑ http://xpt.sourceforge.net/techdocs/language/wiki/wikimedia/wkm07-MediaWikiImport/index.html#mass_image_upload_zip_