Handbuch:Datei-Uploads konfigurieren

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

MediaWiki unterstützt das Hochladen und das Einbinden von Mediendateien. Diese Seite beschreibt die technischen Aspekte dieses Features. Siehe Handbuch:Verwalten von Bildern und Hilfe:Bilder für allgemeine Anwendungsinformationen.

Seit MediaWiki Version 1.1 ist das Hochladen aus Sicherheitsgründen standardmäßig abgeschaltet. Das Hochladen kann mit einer Konfigurationseinstellung eingeschaltet werden. Es empfiehlt sich jedoch, zunächst mehrere Voraussetzungen zu überprüfen.

Voraussetzungen

Stelle sicher, dass das Hochladen in PHP angeschaltet ist

Folgendes muss in der php.ini gesetzt sein:

file_uploads = On

Wenn das nicht gesetzt ist, können PHP-Skripte nicht die Hochladen-Funktion nutzen und das Hochladen wird im MediaWiki nicht funktionieren.

Wenn der open_basedir-Befehl gesetzt ist, muss er das Zielverzeichnis für das Hochladen in der MediaWiki-Installation enthalten ({$IP}/images) und das upload_tmp_dir-Verzeichnis (das ist das Standardverzeichnis, wenn nicht anders konfiguriert). Das Hinzufügen der upload_tmp_dir kann die Meldung Could not find file "/var/tmp/php31aWnF" vermeiden (worin in diesem Beispiel /var/tmp die upload_tmp_dir ist). Lies mehr über das Hochladen von Dateien mit PHP in den File upload basics (englisch) und spezieller unter move_uploaded_file (englisch).

Der formale Inhalt der Variablen ist ein boolscher Ausdruck. PHP liest jeden String, der nicht den Wert FALSCH hat als WAHR, deshalb führt der oft verwendete Wert ON zum gleichen Ergebnis.


Prüfungen für Windows- und IIS-Benutzer

Setze für %SystemRoot%\TEMP die Rechte als Internetgastaccount (IUSR_Rechnername, oder IUSR für IIS 7+): Lesen, Schreiben und Ausführen;

Prüfe die Verzeichnissicherheit

Das Hochladeverzeichnis muss so konfiguriert sein, dass es einem Endbenutzer (jemand, der sich das Wiki mit einem Browser ansieht) nicht möglich ist, andere Skripte hochzuladen und auszuführen, weil das sonst einen Exploit-Zugang zu Deinem Webverzeichnis ermöglichen könnte und das Wiki oder die Webseite zerstört werden könnten.

Setze das /images-Verzeichnis (oder das /uploads-Verzeichnis in früheren Versionen) auf die Berechtigung 755:

  • User kann lesen, schreiben und ausführen;
  • Group kann lesen und ausführen;
  • World kann lesen und ausführen.
Nur die Ordner müssen über ausführbare Berechtigungen verfügen. Dateien dürfen nicht die Berechtigung zum Ausführen haben. In Linux, to remove executable permissions from all files in a folder, and to add executable permissions to the folder and all sub folders: chmod -x+X uploads_folder -R

Wenn Du SELinux verwendest, stelle sicher, dass die ACLs entsprechend eingestellt sind (siehe dort).

Check webserver security

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.

Beschränke die Anzeige von Verzeichnissen im Bilderverzeichnis

Wenn Du nicht allen Benutzern ermöglichen willst, Dein Bilderverzeichnis einzusehen, könntest Du das in Deiner Apachekonfiguration verhindern:

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


Check .htaccess file

Das Verzeichnis images im MediaWiki-Installationsordner enthält eine .htaccess-Datei mit einigen Konfigurationen. The goal of this file is to make the upload folder more secure, and if you place your upload directory somewhere else, it's recommended to also copy the .htaccess file to the new location, or apply that configuration on the server directly. However, some of those configurations may cause conflicts or errors, depending on how the server is configured.

Some things to take into account:

  • If the server doesn't allow to set or override directives in .htaccess files, accessing any file under that folder may result in a generic "HTTP 500 error".

If that's the case, you should comment-out the lines, and apply those directives directly on the server configuration files. The directives that are most likely causing the problems are AddType —which prevents HTML and PHP files from being served as HTML—, and php_admin_flag —which would prevent PHP files from being parsed and executed on the server as such.

Das Hochladen An- und Ausschalten

MediaWiki Version:
1.5

In MediaWiki Version 1.5 und später steht das zu setzenden Attribut in der LocalSettings.php und $wgEnableUploads wird so gesetzt:

$wgEnableUploads = true; # Hochladen aktivieren

Um die Upload-Funktion zu deaktivieren, setze das Attribut auf false:

$wgEnableUploads = false; # Hochladen deaktivieren

Using a central repository

InstantCommons ist eine Funktion, die mit einer Konfigurationsänderung aktiviert wird, die Ihnen sofortigen Zugriff auf die Millionen von kostenlosen (frei lizenzierten) Dateien in Wikimedia Commons ermöglicht.

Hochladerechte

Per Standard können alle registrierten Benutzer Dateien hochladen. Um das einzuschränken, musst Du die $wgGroupPermissions ändern:

  • Um normale Benutzer am Hochladen zu hindern:
    $wgGroupPermissions['user']['upload'] = false;
  • Um eine spezielle Gruppe namens "uploadaccess" anzulegen und den Mitglieder der Gruppe das Hochladen von Dateien zu erlauben:
    $wgGroupPermissions['uploadaccess']['upload'] = true;
  • Um automatisch bestätigten ("autoconfirmed") Benutzern ("non-newbie") zu erlauben, Dateien hochzuladen:
    $wgGroupPermissions['autoconfirmed']['upload'] = true;

Das Recht, bestehende Dateien zu ersetzen wird mit einer anderen Berechtigung gesteuert, genannt reupload:

  • Um normalen Benutzern zu verwehren, bestehende Dateien zu überschreiben:
    $wgGroupPermissions['user']['reupload'] = false;
  • Um automatisch bestätigten ("autoconfirmed") Benutzern ("non-newbie") zu erlauben, bestehende Dateien zu überschreiben:
    $wgGroupPermissions['autoconfirmed']['reupload'] = true;

Wenn ein ForeignFileRepo gesetzt ist, wird das Recht, diese Dateien lokal zu ersetzen mit einer speziellen Berechtigung gesteuert, genannt reupload-shared:

  • Um normalen Benutzern zu verwehren, filerepo-Dateien lokal zu überschreiben:
    $wgGroupPermissions['user']['reupload-shared'] = false;
  • Um automatisch bestätigten ("autoconfirmed") Benutzern ("non-newbie") zu erlauben, filerepo-Dateien lokal zu überschreiben:
    $wgGroupPermissions['autoconfirmed']['reupload-shared'] = true;

Siehe Manual:User rights für Details zu den Benutzerrechten und Manual:Preventing access für mehr Informationen zum Beschränken von Zugängen.

Konfiguration von Dateitypen

Du kannst $wgFileExtensions in der LocalSettings.php hinzufügen, um das Hochladen von anderen Dateitypen zu erlauben. Beispielsweise kannst Du die $wgFileExtensions-Zeile so ändern

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

oder

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

oder

# Neue Typen zur bestehenden Liste von DefaultSettings.php hinzufügen
$wgFileExtensions[] = 'docx';
$wgFileExtensions[] = 'xls';
$wgFileExtensions[] = 'pdf';
$wgFileExtensions[] = 'mpp';
$wgFileExtensions[] = 'odt';
$wgFileExtensions[] = 'ods';

Mehrere Dateitypen stehen jedoch auf einer Schwarzen Liste ($wgProhibitedFileExtensions ) und können auch nicht hochgeladen werden, wenn sie $wgFileExtensions hinzugefügt wurden. Um Dateien mit gesperrten Endungen hochladen zu können, musst Du die Schwarze Liste bearbeiten. Um beispielsweise ausführbare Dateien hochladen zu lassen:

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

In addition, $wgMimeTypeExclusions (formerly $wgMimeTypeBlacklist ) prevents certain file types based on MIME type; .zip files, for example, are prohibited based on MIME type (MediaWiki version 1.14 up to 1.17).

Du kannst außerdem $wgStrictFileExtensions verändern

$wgStrictFileExtensions = false;

Das erlaubt, die meisten Dateitypen hochzuladen. An Hand der Schwarzen Liste und des MIME-Typs gesperrte Dateitypen können dann aber immer noch nicht hochgeladen werden.

Warnung Warnung: Wenn Du $wgStrictFileExtensions auf false setzt oder $wgFileBlacklist veränderst, könnte das Dich oder Deine Benutzer Sicherheitsrisiken aussetzen.

Wenn Sie den Fehler "The file is corrupt or has an incorrect extension" erhalten, stellen Sie sicher, dass die MIME-Typ-Erkennung korrekt funktioniert.

Wenn Du jeden Dateityp zulässt, stelle sicher, dass Deine MIME-Typ-Erkennung funktioniert und denke darüber nach, Virusscans für hochgeladene Dateien zu ermöglichen .

Um die Erweiterung zip' zu aktivieren (getestet in MediaWiki v1.19.23), ist folgendes in der Datei LocalSettings.php notwendig:

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


Login

Per Standard können nicht angemeldete Benutzer keine Dateien hochladen. Sie müssen sich registrieren und anmelden, bevor der Link Datei hochladen im Menü erscheint.

Thumbnailing. Das Erstellen von kleinen Vorschaubildern

Für Informationen zum automatischen Erstellen von Vorschaubildern siehe Image_thumbnailing . Bei Problemen mit dem Thumbnailing siehe Image Thumbnails not working and/or appearing.

MediaWiki Version:
1.11

Wenn die Datei nicht visuell ist (also keine Bilder oder Videos), wird an Stelle der Datei ein Icon angezeigt. Diese werden mit der iconThumb()-Funktion in der Dateiklasse in der FileRepo-Gruppe erzeugt. Die Icons werden in $wgStyleDirectory/common/images/icons/ im fileicon-$extension.png-Format gespeichert.

Die Maximalgröße für hochzuladene Dateien setzen

Browsers tell the server the size of the file to be uploaded before it actually sends the file.

If the upload is too big, it is rejected by the target (server) and the upload fails providing multiple errors depending at which layer the limit was imposed:

  • If it's a server limit (nginx, Apache) on the maximum amount of transmitted data, it may simply fail with a HTTP 500 error or HTTP 413 – Request entity too large.
  • If the limit it's at the PHP level, if post_max_size is hit, you may get a generic HTTP 500 error (or simply a blank page) otherwise, MediaWiki should give a more meaningful error message.
post_max_size und upload_max_filesize in der php.ini-Datei

Per Standard erlaubt PHP das Hochladen von Dateien mit nicht mehr als 2 Megabyte Größe. Wenn Du größere Dateien hochladen willst, ändere zwei Parameter in der php.ini:

  • post_max_size[1] 8 Megabyte als Standard
  • upload_max_filesize[2] 2 Megabyte als Standard

Das kann Root-Zugriff auf den Server voraussetzen. (Wenn Du einen Shared Host hast, kontaktiere Deinen Serveradministrator.)

Wenn Sie die maximale Upload-Dateigröße auf einen Wert größer als 100 MB erhöhen, müssen Sie $wgMaxUploadSize mit dem neuen Upload-Dateigrößenwert zu LocalSettings.php hinzufügen.
Locating the php.ini file

Der Ort der php.ini variiert je nach verwendeter Distribution. See Handbuch:Php.ini for instructions for locating php.ini used by your server.

Mehrere Webseiten auf einem Server

Wenn Du mehr als eine Webseite auf einem Server hast und Du Änderungen nur für MediaWiki vornehmen willst, füge Deine /etc/apache2/sites-enabled/your_wiki_site.com in <Virtual Host> ein:

php_value upload_max_filesize 100M
php_value post_max_size 100M

Beide obigen Einstellungen funktionieren auch in einer .htaccess-Datei. If your site uses PHP >= 5.3 and allows it, you can place php.ini directives in .user.ini files instead.

Webserver-Grenzen

Dein Webserver kann weitere Grenzen für hochzuladene Dateien verhängt haben. Für Apache ist eine der relevanten Einstellungen LimitRequestBody. [3] Für Nginx ist client_max_body_size eine relevante Einstellung.[4]

Du könntest Apache oder IIS neu starten müssen, nachdem Du Deine PHP- oder Webserver-Konfiguration geändert hast.

Ubuntu 16.04: sudo service apache2 restart

Möglicherweise müssen Sie auch php5-fpm' neu starten, nachdem Sie Ihre PHP- (oder ngingx-Server?) Konfiguration geändert haben.

(sudo /etc/init.d/php5-fpm restart in Linux, for example.)

Die Warnung beim Hochladen zu großer Dateien

MediaWiki selbst gibt eine Warnung aus, wenn Du versuchst, Dateien größer als spezifiziert durch die $wgUploadSizeWarning -Option hochzuladen. Das ist unabhängig von der hart durch PHP gesetzten Grenze.

Temporäre Hochladebegrenzungen

Zeitweise Änderungen der Hochladebegrenzung (bei multiplen Wikis in einer Farm zum Beispiel) können durch das Hinzufügen dieser Zeilen:

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

in der MediaWiki-LocalSettings.php-Datei für jedes Wiki gesetzt werden. In diesem Beispiel steht das PHP-Limit bei 50 Megabyte. Beachte, dass diese Einstellungen nicht die oben gesetzte Maximalgröße überschreiben werden (, weil die Basis-php.ini und die apache2-php.ini das absolute Maximum setzen). Diese Methode setzt Maxima, die kleiner sind als das absolute Maximum.

IIS7-Hochladebegrenzung
Per Standard erlaubt IIS7[5] unter Windows 2008, dass von einer Webanwendung nur 30 MB hochgeladen werden. Größere Dateien geben nach dem Hochladen den Fehler 404 zurück. Wenn Du dieses Problem hast, kannst Du es lösen, indem Du die maximale Dateigröße unter ‎<system.webServer> in der web.config-Datei setzt:
<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="50000000" />
  </requestFiltering>
</security>

Mit der obigen maxAllowedContentLength können Benutzer Dateien hochladen, die 50.000.000 Bytes (50 MB) groß sind. Diese Einstellung wird sofort funktionieren, ohne dass Du die IIS-Dienste neu starten musst. Die web.config-Datei befindet sich im root-Verzeichnis Deiner Webseite.

Dateien größer als 2 GB hochladen

Füge folgende Zeile der LocalSettings.php hinzu:

$wgUploadSizeWarning = 2147483647;
$wgMaxUploadSize = 2147483647;

Ändere außerdem folgende Zeilen in der PHP.INI:

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

In der IIS-web.config-Datei überschreibe den Wert von maxRequestLength. Der folgende Eintrag in der web.config erlaubt beispielsweise, Dateien kleiner oder gleich 2 Gigabytes (GB) hochzuladen:

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

Im IIS 7 musst Du außerdem das Hochladen von großen Dateien erlauben. Du findest das, wenn Du auf “Request Filtering > Edit Feature Settings” im IIS-Abschnitt in der Mitte des Fensters klickst. Sette das ”Maximum allowed content length (Bytes)”-Feld auf 2147482624. Wenn Die "Request Filtering" im IIS-Abschnitt nicht findest, muss es unter “Internet Information Services > World Wide Web Services > Security” im “Turn Windows features on or off”-Feld in den Systemeinstellungen angeschaltet werden.

Wenn obiger Tip nicht das Hochladen großer Dateien ermöglicht, dann öffne eine Kommandozeile und gib dieses Kommando ein:

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


Allowing Java JAR Uploads

The details described in this section may no longer work. $wgAllowJavaUploads variable has been removed in MW 1.39.0.

By default, MediaWiki will scan all uploads that appear to be ZIP archives and reject any that contain Java .class files. This is a security measure to prevent users uploading a malicious Java applet. For non-public sites only, use the following to disable this check:

$wgAllowJavaUploads = true;

This setting can be used as a work around for allowing MIME types to be accepted indiscriminately. For example, if you attempt to upload a .doc file created by Word 2007, no matter the text list you provide and MIME type checking you invoke or prohibit, you will receive the message:

The file is a corrupt or otherwise unreadable ZIP file. It cannot be properly checked for security.

.doc files saved by Word 2007 (and possibly later versions) contain a small embedded ZIP archive storing metadata that is not representable in the binary .doc format as used by earlier versions of Word. This embedded ZIP data confuses the Java archive scanner, causing the .doc file to be rejected. Files in the newer .docx file format are valid ZIP archives in their entirety, and can be uploaded successfully without setting $wgAllowJavaUploads .

Direkt von einer URL hochladen ("Sideloading")

Wenn Du erlauben willst, dass Dateien von einer URL hochgeladen werden, anstatt vom lokalen Computer, dann setze $wgAllowCopyUploads = true.

By default, upload by URL are only possible using the API (or extensions such as UploadWizard ). To make the option usable from Special:Upload, you need to set $wgCopyUploadsFromSpecialUpload to true as well. Im Hochladeformular erscheint dann ein neues Feld für die URL unter dem üblichen Dateinamenfeld. Das URL-Feld ist per Standard ausgegraut, kann aber aktiviert werden, indem man den Radiobutton links vom Feld anklickt.

Um diese Funktion nutzen zu können, müssen Benutzer das Benutzerrecht upload_by_url haben, das normalerweise nur Sysops haben. This right was granted to sysops by default until MediaWiki 1.20 but it now needs to be granted explicitly. Um das normalen Benutzern zu erlauben, setze

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

Beachte, dass das Erlauben des Hochladens von Dateien von anderen Webseiten es einfacher macht, zufälliges, unerwünschtes Material hochzuladen und es kann als EInladung missverstanden werden, alles Hochzuladen, was die Leute im Netz so finden.

PHPs cURL-Unterstützung muss aktiviert sein, um diese Funktion zu unterstützen. Konfiguriere Dein PHP bei der Installation mit der --with-curl-Option.
Wenn Dein Server auf das Internet durch einen Proxy zugreift, dann muss $wgHTTPProxy entsprechend gesetzt sein. Entweder Du stellst es selbst bereit oder, wenn Dein Server die Umgebungsvariable http_proxy liefert (siehe phpinfo()), dann kannst Du diesen Code in Deiner LocalSettings.php verwenden:
/*
 * Proxy to use for CURL requests.
 */
if ( isset( $_ENV['http_proxy'] )) $wgHTTPProxy = $_ENV['http_proxy'];

Hochladen großer Mengen von Dateien

Es gibt einige Tools für das Hochladen mehrerer Dateien auf einmal:

Erweiterung Beschreibung Erscheinungsstatus: Anforderungen
Erweiterung:UploadWizard Wird auf Wikimedia Commons verwendet Stabil MediaWiki 1.23+
Extension:MsUpload Allows a user to upload multiple files including by dragging & dropping files. Stabil 1.32+
Erweiterung:SimpleBatchUpload Basic, no-frills uploading of multiple files to MediaWiki Stabil 1.31+
Extension:PageProperties#File_upload Includes a fully-configurable multiple file upload with filename formula and CRUD operations Stable 1.35+
Commonist (Externer Link zu Wikimedia Commons) Erfordert Dateihochladung via api.php
importImages.php "Place the files on the server in a readable location and execute the maintenance/importImages.php script from the command line."[6]

Upload directory

Whenever an image is uploaded, several things are created:

  1. An article in the file namespace with the name of the file, e.g. File:MyPicture.png.

This page is stored and can be edited like any other page.

  1. The file itself is stored into the folder on the file system, which is configured in $wgUploadDirectory or into one if its subfolders (see below).
  1. If thumbnailing is available, thumbnailed versions of the file will be created when necessary (such as for the usage on the file description page.

These are stored in the thumb directory of the image directory, in a separate directory for each main file.

If $wgHashedUploadDirectory is enabled (by default), MediaWiki creates several subdirectories in the images directory.

If $wgHashedUploadDirectory is set to true, uploaded files will be distributed into sub-directories of $wgUploadDirectory based on the first two characters of the md5 hash of the filename. (e.g. $IP/images/a/ab/foo.jpg) Creation of such subdirectories is handled automatically. This is used to avoid having too many files in one folder because some filesystems don't perform well with large numbers of files in one folder.

If you only maintain a small wiki with few uploaded images, you could turn this off by setting $wgHashedUploadDirectory = false, all images are uploaded in $wgUploadDirectory itself. (e.g. $IP/images/foo.jpg)

Multiwiki sites

  • Make sure you've changed the site location in LocalSettings.php from, e.g. /var/lib/mediawiki to wherever your installation is, and created a writeable images directory (most of the rest can be symlinked).

Not doing so will mysteriously break image uploads.

Configuring the upload form

The upload form message provided with the default MediaWiki installation (which appears when you click "Upload file" link or go to Special:Upload link) may not go very well for you.

For that case you can edit MediaWiki:Uploadtext contents and provide your own text. If your wiki site is multilanguage don't forget to edit localized versions like MediaWiki:Uploadtext/de.

On the MediaWiki:Licenses page you can customize a drop-down list of licenses for uploads of your site. See the documentation of this feature.

Take into account that localized versions like MediaWiki:Licenses/de won't work by default. To enable them you must configure the $wgForceUIMsgAsContentMsg variable.

Edit MediaWiki:Upload-default-description to add an initial text to the "Summary" field of your upload form (for example your wiki site has a universal template for upload summaries and you want everyone to use that template).

Known problems on Windows

Running MediaWiki on Windows server has some restrictions in allowed filenames, due to a PHP bug. PHP can't handle filenames with non-ascii characters on it correctly, and MediaWiki will refuse to upload files containing such characters to prevent broken uploads (task T3780), with the message Dieses Wiki unterstützt keine Dateinamen, die Sonderzeichen enthalten..

Since MediaWiki 1.31 MediaWiki can handle filenames with non-ascii characters if it's using PHP 7.1 or later.

Known problems with database names having non-alphanumeric characters

If $wgDBname contains non-alphanumeric characters, uploads may fail with errors like Could not create directory "mwstore://local-backend/local-public/<path>".. This is caused by an internal check for valid container name for file backend, but it's constructed using $wgDBname.

Since MediaWiki 1.26, it allows uploads when $wgDBname contains dots.

Siehe auch

Einzelnachweise

  1. post-max-size, PHP Core Manual.
  2. upload-max-filesize, PHP Core Manual.
  3. core - Apache HTTP Server Version 2.4 - LimitRequestBody Directive, Apache-Manual
  4. client_max_body_size, Nginx-Manual
  5. IIS7 ist eine neue Revision (Version 7.0) der Internet Information Services, die Teil von Windows Vista und der nächsten Windows Server-Version sind.
  6. http://xpt.sourceforge.net/techdocs/language/wiki/wikimedia/wkm07-MediaWikiImport/index.html#mass_image_upload_zip_