Manuel:Configuration du téléversement de fichiers

From MediaWiki.org
Jump to: navigation, search
This page is a translated version of the page Manual:Configuring file uploads and the translation is 35% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎français • ‎Bahasa Indonesia • ‎日本語 • ‎polski • ‎русский • ‎中文

MediaWiki supporte le téléversement et l'intégration de fichiers multimédia Cette page décrit les aspects techniques de cette propriété, voir Manuel:Gestion des imagesManual:Image administration et Help:Images pour l'usage général des informations.

Existant depuis MediaWiki version 1.1, le téléversement de fichiers est initialement désactivé par défaut, pour des questions de sécurité. Le téléversement de fichiers peut être activé via un paramètre de configuration, bien qu'il soit recommandé de vérifier d'abord certains pré-requis.

Prérequis[edit]

Vérifier que les téléversements sont activés en PHP[edit]

Les éléments suivants doivent être paramétrés dans le fichier php.ini (pouvant être situé quelque part comme /etc/php/php.ini, /etc/php4/php.ini, /etc/php5/cli/php.ini & /etc/php5/apache2/php.ini (openSUSE 11.2), /usr/local/lib/php.ini ou sur Win32 C:\Windows\php.ini):

file_uploads = On

Si cela n'est pas paramétré, les scripts PHP ne pourront pas utiliser les fonctions de téléversement, et les téléversements de MediaWiki ne seront pas activés.

Si la directive open_basedir est paramétrée, elle devra inclure à la fois le fichier de destination de téléversement de votre installation MediaWiki ("{$IP}/images") et le 'upload_tmp_dir' (dossier système par défaut si non paramétré). L'ajout du 'upload_tmp_dir' peut éviter les messages comme "Could not find file "/var/tmp/php31aWnF" (où dans cet exemple le upload_tmp_dir' est '/var/tmp')

Apprenez-en davantage sur le téléversement de fichiers sur File upload basics et en particulier move_uploaded_file.

Note: La valeur formelle pour la variable est une expression booléenne.

PHP traite chaque chaîne non reconnue comme la valeur 'false' comme étant 'true', par conséquent la valeur 'on', souvent utilisée, renvoie le même résultat.

Vérification pour utilisateurs de Windows et IIS[edit]

Paramétrez %SystemRoot%\TEMP pour donner au compte invité internet (IUSR_MachineName, or IUSR for IIS 7+): lecture, écriture et exécution;

Vérification de la sécurité du répertoire[edit]

Le répertoire de téléversement doit être configuré pour qu'il ne soit pas possible pour un utilisateur final de téléverser et exécuter d'autres types de scripts, qui pourraient alors s'octroyer un accès à votre répertoire web et endommager votre wiki ou votre site web.

Paramétrez le dossier /images (ou le dossier /uploads pour les précédentes versions)pour avoir la permission "755".

  • L'Utilisateur peut lire, écrire et exécuter;
  • Le Groupe peut lire et exécuter;
  • Les Autres peuvent lire et exécuter.

En cas d'utilisation du safe_mode, assurez-vous que le répertoire est la propriété de l'utilisateur qui exécute le script php (qui est l'utilisateur Apache, ou, dans le cas de suphp, le propriétaire du script).

sudo chown -R www-data:www-data images/

En cas d'utilisation de CentOS 6 ou Mageia, les paramètres "owner:group" de la commande chown doivent être "apache:apache" au lieu de "www-data:www-data".

En cas d'utilisation de SELinux, vérifiez les paramètres ACLs (voir la documentation).

En cas d'utilisation de suphp, vérifiez que le umask a la valeur 0022 (ou moins) dans le fichier /etc/suphp.conf.

  • Restriction du listage de répertoire au dossier des images

Si vous ne souhaitez pas qu'un utilisateur public puisse lister votre répertoire d'images, une option est de le paramétrer dans votre configuration apache:

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

Vérifier le fichier .htaccess[edit]

Le répertoire images du dossier d'installation MediaWiki contient un fichier .htaccess contenant des paramètres de configuration. Le but de ce fichier est de rendre le dossier de téléversement plus sécurisé, et si vous placez votre répertoire de téléversement ailleurs, il est recommandé de copier également le fichier .htaccess vers un autre endroit, ou d'appliquer cette configuration directement sur le serveur. Toutefois, certains de ces paramètres de configuration peuvent être à l'origine de conflits ou d'erreurs, selon la façon dont le serveur est configuré.

Quelques éléments à prendre en compte:

  • Si le serveur ne permet pas de modifier ou de retirer des paramètres des fichiers .htaccess, demander l'accès à un fichier placé dans ce dossier peut occasionner l'erreur générique "HTTP 500 error". Si tel est le cas, vous devrez décommenter les lignes, et appliquer ces instructions directement sur les fichiers de configuration du serveur. Les instructions qui ont le plus de chances de causer des problèmes sont AddType - qui empêche les fichiers HTML et PHP d'être renvoyés en HTML - , et php_admin_flag - qui empêche les fichiers PHP d'être parsés et exécutés en tant que tels sur le serveur.

Avant MediaWiki 1.27, si vous avez un gestionnaire 404 personnalisé pour générer des miniatures avec le script thumb.phpManual:thumb.php, les règles de ré-écriture dans ce fichier .htaccess pourraient annuler les règles pré-existantes, parce qu'il ne dispose pas de l'option RewriteOptions inherit (task T67220).

Paramétrer le téléversement sur on/off[edit]

Version de MediaWiki : 1.5

Dans MediaWiki version 1.5 ou supérieures, l'attribut qui doit être paramétré dans LocalSettings.php et $wgEnableUploads est paramétré de la manière suivante:

$wgEnableUploads = true; # Activer les téléversements

Ceci active les téléversements, comme on peut s'y attendre. Pour les désactiver, paramétrer l'attribut sur 'false':

$wgEnableUploads = false; # Désactiver les téléversements


Version de MediaWiki : 1.4

Dans les versions plus anciennes du logiciel, l'attribut à paramétrer se situe dans LocalSettings.php, mais il est il est placé plus haut, c'est à dire $wgDisableUploads. La valeur par défaut est la suivante:

$wgDisableUploads = true; # Désactiver les téléversements

Inverser la valeur pour activer les téléversements:

$wgDisableUploads = false; # Activer les téléversements

Utilisation d'un répertoire central[edit]

InstantCommons est une caractéristique, activée par un changement dans la configuration, qui vous donne un accès immédiat aux millions de fichiers libres (dont la licence est libre) de Wikimedia Commons.

Permissions de téléversement[edit]

Par défaut, tous les utilisateurs enregistrés peuvent téléverser des fichiers. Pour limiter ces permissions, vous devez changer $wgGroupPermissions:

  • Pour empêcher les simples utilisateurs de téléverser des fichiers:
    $wgGroupPermissions['user']['upload'] = false;
  • Pour créer un groupe spécial nommé "uploadaccess", et autoriser les membres de ce groupe à téléverser des fichiers:
    $wgGroupPermissions['uploadaccess']['upload'] = true;
  • Pour autoriser les utilisateurs "autoconfirmés" (non débutants) à téléverser des fichiers:
    $wgGroupPermissions['autoconfirmed']['upload'] = true;

Le droit de remplacer des fichiers existants est géré par une permission spéciale, appelée reupload:

  • Pour empêcher les simples utilisateurs d'effacer des fichiers existants:
    $wgGroupPermissions['user']['reupload'] = false;
  • Pour autoriser les utilisateurs "autoconfirmés" (non débutants) à remplacer des fichiers existants:
    $wgGroupPermissions['autoconfirmed']['reupload'] = true;

Si un fichier des dépôts extérieurs (ForeignFileRepo) est configuré, le droit de remplacer localement ces fichiers est géré par une permission spéciale, appelée reupload-shared:

  • Pour empêcher les simples utilisateurs d'effacer localement ces fichiers de dépôts:
    $wgGroupPermissions['user']['reupload-shared'] = false;
  • Pour autoriser les utilisateurs "autoconfirmés" (non débutants) de déplacer localement ces fichiers de dépôts:
    $wgGroupPermissions['autoconfirmed']['reupload-shared'] = true;

Voir Manual:User rights pour plus de détails sur les droits des utilisateurs, et Manual:Preventing access pour plus d'informations sur les limitations des droits.

Configuration des types de fichier[edit]

Vous pouvez ajouter $wgFileExtensions dans le fichier LocalSettings.php pour autoriser les téléversements des autres types de fichiers souhaités. Par exemple, vous pouvez changer la ligne de $wgFileExtensions pour obtenir quelque chose comme

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

ou

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

ou

# Ajouter le nouveaux types à la liste existante depuis DefaultSettings.php
$wgFileExtensions[] = 'docx';
$wgFileExtensions[] = 'xls';
$wgFileExtensions[] = 'pdf';
$wgFileExtensions[] = 'mpp';
$wgFileExtensions[] = 'odt';
$wgFileExtensions[] = 'ods';

Cependant, certaines extensions de fichier sont blacklistées ($wgFileBlacklist) et ne peuvent pas être téléversées, même si elles sont ajoutées à $wgFileExtensions. Pour téléverser les fichier dont les extensions sont blacklistées, vous devez modifier la blacklist. Par exemple, pour autoriser les utilisateurs à téléverser des exécutables:

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

De plus, $wgMimeTypeBlacklist empêche certains types de fichier basés sur des types MIME; les fichiers .zip, par exemple, sont interdits car basés sur des types MIME (MediaWiki version 1.14 à 1.17).

Vous pouvez aussi paramétrer $wgStrictFileExtensions

$wgStrictFileExtensions = false;

Pour autoriser les plupart des types de fichiers. Cependant, les types de fichiers blacklistés et les types MIME ne seront toujours pas permis.

Avertissement Avertissement : Paramétrer $wgStrictFileExtensions sur 'false', ou mofifier $wgFileBlacklist pourrait vous exposer vous ou vos utilisateurs à des risques de sécurité.

Si vous recevez l'erreur "The file is corrupt or has an incorrect extension", assurez-vous que la détection des types MIME fonctionne correctement.

Si vous décidez d'autoriser n'importe quel type de fichier, assurez-vous que votre détection MIME fonctionne et pensez à activer un antivirus pour les téléversements.

Pour activer l'extension zip (testée avec MediaWiki v1.19.23) le paramétrage suivant sera nécessaire dans le fichier LocalSettings.php:

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

Logon[edit]

By default anonymous uploads are not allowed. You must register and logon before the upload file option appears in the toolbox.

Thumbnailing[edit]

For information about automatic rendering/thumbnailing of images, see Manual:Image_thumbnailing. For problems with thumbnailing, see Image Thumbnails not working and/or appearing.


Version de MediaWiki : 1.11

If the file is not visual (like an Image or Video) a fileicon is used instead. These are generated by the iconThumb() function in the File class in the FileRepo group. Icons stored in "$wgStyleDirectory/common/images/icons/" in a "fileicon-$extension.png"-format.

Set maximum size for file uploads[edit]

post_max_size and upload_max_filesize in php.ini

By default, the configuration code in php.iniManual:Php.ini limits the size of files to be uploaded to 2 megabytes (and the maximum size of a post operation to 8 megabytes). To allow uploading of larger files, edit these parameters in php.ini:

This may require root access to the server. (If you are on a shared host, contact your server administrator.)

Locating the php.ini file
Typical location in which php.ini may be found.

The location of the php.ini file varies on the distribution you are using. (Try "locate php.ini" or "php -i" to find the location of your config file.) [1]

It is important to change the php.ini file in the apache2 folder. For example, there may be a core default php.ini at /etc/php5/cli/php.ini as well as one at /etc/php5/apache2/php.ini. If you are using mod_php (most common), the most likely location for the correct php.ini file is in /etc/php5/apache2 or /etc/php/7.0/apache2. For php-fastcgi, edit /etc/php5/cgi/php.ini.

Multiple websites hosted on a server

If you have more than one website hosted on a server and want to change only for Mediawiki, insert into your /etc/apache2/sites-enabled/your_wiki_site.com inside <Virtual Host>:

php_value upload_max_filesize 100M
php_value post_max_size 100M

Both above settings also work in a .htaccess file if your site uses mod_php. If your site uses PHP >= 5.3 and allows it, you can place php.ini directives in .user.ini files instead.

web server limits

Your web server may impose further limits on the size of files allowed for upload. For Apache, one of the relevant settings is LimitRequestBody. [2] For Nginx, client_max_body_size is the relevant setting.[3] For Lighttpd, server.max-request-size is what may need modification.[4]

Note Note : You may need to restart Apache or IIS after altering your PHP or web server configuration. (sudo /etc/init.d/apache2 restart in Linux, for example.)

Note Note : You may also need to restart php5-fpm after altering your PHP (or ngingx server?) configuration. (sudo /etc/init.d/php5-fpm restart in Linux, for example.)

uploading too large of files warning

MediaWiki itself issues a warning if you try to upload files larger than what is specified by $wgUploadSizeWarning option. This is independent of the hard limit imposed by PHP. MediaWiki also has a $wgMaxUploadSize option, but that is currently not enforced for normal uploads (when uploading a local file). The only way of restricting the upload size is through the use of modifying the php configuration.

temporary upload limits

Temporary changes to upload limits (when using multiple wikis on a farm, for example) can be altered by adding the lines:

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

to the MediaWiki LocalSettings.php configuration file for each wiki. In this example the PHP limit is set at 50 Mb. Note that these settings will not override the maximum settings set above (since the core php.ini and apache2 php.ini files set the absolute maximum). This method sets maximums that are less than the absolute maximum.

IIS7 upload limit

Note Note : By default, IIS7[5] on Windows 2008 allows only 30MB to be uploaded via a web application. Larger files will return a 404 error after the upload. If you have this problem, you can solve it by increasing the maximum file size by adding the following code to <system.webServer> in the web.config file:

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="50000000" />
  </requestFiltering>
</security>

With the above maxAllowedContentLength, users can upload files that are 50,000,000 bytes (50 MB) in size. This setting will work immediately without restarting IIS services. The web.config file is located in the root directory of your web site.

To allow uploading files up to 2G:

add the following lines to LocalSettings.php:

$wgUploadSizeWarning = 2147483647;
$wgMaxUploadSize = 2147483647;

Also, modify the following lines in php.iniManual:Php.ini:

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

In the IIS web.config file, override the value of maxRequestLength. For example, the following entry in web.config allows files that are less than or equal to 2 gigabytes (GB) to be uploaded:

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

With IIS 7, you also need to configure it to allow large uploads. This is found by clicking “Request Filtering > Edit Feature Settings” in the IIS section in the middle of the window. Set the ”Maximum allowed content length (Bytes)” field to 2147482624. If you don’t see "Request Filtering" in the IIS section, it needs enabled via Internet Information Services > World Wide Web Services > Security in the "Turn Windows features on or off" area in Control Panel.

If the above tip does not enable large uploads, then open a command prompt and execute this command as well:

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


Allowing Java JAR Uploads[edit]

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 mimetypes to be accepted indiscriminately. For example, if you attempt to upload a .doc file created by Word 2007, no matter the ext list you provide and mimetype 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 $wgAllowJavaUploadsManual:$wgAllowJavaUploads.

Uploading directly from a URL ("Sideloading")[edit]

If you want to allow a user to directly upload files from a URL, instead of from a file on their local computer, set $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. On the upload form, you will then see an additional field for the URL, below the usual filename field. The URL field is greyed out per default, but can be activated by activating the radiobutton (checkbox) to the left of the field.

In order to use this feature, users must have the user right upload_by_url. This right was granted to sysops by default until MediaWiki 1.20 but it now needs to be granted explicitly. To allow this to normal users, set

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

Keep in mind that allowing uploads directly from an arbitrary location on the web makes it easier to upload random, unwanted material, and it might be misunderstood as an invitation to upload anything that people might come across on the web.

Note Note : PHP's cURL support must be enabled to support this feature. Configure your PHP when installing using the --with-curl option. Note Note : If your server is accessing internet through a proxy then $wgHTTPProxy needs to be set accordingly. Either you supply it directly or, if your server supplies the environment variable "http_proxy" see your phpinfo(), then you could use the following code in your LocalSettings.php:

/*
 * Proxy to use for CURL requests.
 */
if ( isset( $_ENV['http_proxy'] )) $wgHTTPProxy = $_ENV['http_proxy'];

Undeleting images[edit]

Undeleting images is possible as an option since MediaWiki 1.8, and enabled by default since MediaWiki 1.11.

Prior to MediaWiki 1.11, you can enable undeletion of images by setting $wgSaveDeletedFiles = true. Since version 1.11, the behavior is controlled by $wgFileStore, and deleted files are per default stored in $wgUploadDirectory/deleted. Since version 1.17, $wgFileStore has been deprecated and $wgDeletedDirectoryManual:$wgDeletedDirectory should be used instead.

Mass uploading[edit]

A number of tools are available for uploading multiple files in one go rather than each file separately:


Extension Description Statut de parution Prérequis
Extension:UploadWizardExtension:UploadWizard Used on Wikimedia Commons Stable MediaWiki 1.23+
Extension:MsUploadExtension:MsUpload Allows a user to upload multiple files including by dragging & dropping files. Stable 1.17, 1.18, 1.19, 1.20, 1.21, 1.22
Extension:SimpleBatchUploadExtension:SimpleBatchUpload Basic, no-frills uploading of multiple files to MediaWiki Stable 1.26+
Extension:UploadLocalExtension:UploadLocal Beta
Extension:MultiUploadExtension:MultiUpload Non maintenu à l'heure actuelle Broken 1.19+
Commonist (Lien externe vers le Commons du Wiki). Nécessite le téléversement du fichier via api.php.
importImages.phpManual:importImages.php "Place the files on the server in a readable location and execute the maintenance/importImages.php script from the command line."[6]
script pour le téléversement par Nichalp
Commons:File upload service/Script Dévalorisé
User:File Upload Bot (Kernigh)

Upload directory[edit]

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.
  2. 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).
  3. If necessary and 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[edit]

  • 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[edit]

The upload form message provided with the default MediWiki 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.

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).

See also: Upload form changesUpload form changes

Known problems on Windows[edit]

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 This wiki does not support filenames with special characters..

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[edit]

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.

See also[edit]

References[edit]

  1. For an example of where the php.ini file is, see Where is php.ini located?.
  2. LimitRequestBody, Apache manual
  3. client_max_body_size, Nginx manual
  4. server.max-request-size, Lighthttpd manual
  5. IIS7 is a new revision (version 7.0) of the Internet Information Services that is part of Windows Vista and the next Windows Server version.
  6. http://xpt.sourceforge.net/techdocs/language/wiki/wikimedia/wkm07-MediaWikiImport/index.html#mass_image_upload_zip_