Manuel:$wgForeignFileRepos

From mediawiki.org
This page is a translated version of the page Manual:$wgForeignFileRepos and the translation is 100% complete.
Téléversements partagés: $wgForeignFileRepos
Un tableau de structure de répertoire pour les répertoires externes.
Introduit dans la version :1.11.0 (r22580)
Retiré dans la version :Encore utilisé
Valeurs autorisées :(tableau)
Valeur par défaut :(voir ci-dessous)

Détails

Avertissement Avertissement : Si vous utilisez Wikimedia Commons, vous devez utiliser HTTPS pour les liens, au lieu de HTTP. Depuis 2015, la Fondation Wikimedia redirige le trafic de HTTP vers HTTPS. Pour des raisons de sécurité MediaWiki ne suit pas ces redirections (voir tâche T102566).

La solution est d'utiliser HTTPS dans les URLs pour Wikimedia Commons ! Si vous utilisez $wgUseInstantCommons , ce problème est automatiquement corrigé en utilisant MediaWiki 1.25.2+ . Si vous avez défini des paramètres personnalisés avec $wgForeignFileRepos pour Wikimedia Commons, alors les URLs doivent être ajustées en conséquence !

Propriétés nécessaires pour tous les dépôts

class
Nom de classe du dépôt. Peut venir du noyau ou d'une extension. Les classes du dépôt du noyau sont LocalRepo, ForeignDBRepo, FileRepo et ForeignAPIRepo.
name
Nom unique de répertoire.

Pour tous les dépôts du noyau

url
URL publique de la base
thumbUrl
URL des vignettes de la base, si différente de url/thumb
hashLevels
Nombre de niveaux de répertoires pour les divisions de fichiers basées sur le hachage
thumbScriptUrl
URL pour thumb.php (optionnel, non recommandé)
transformVia404
Indique s'il faut sauter la transformation des fichiers média par l'analyseur syntaxique et en remplacement, s'appuyer sur un gestionnaire 404.
initialCapital
Equivaut à $wgCapitalLinks , détermine si les noms de fichiers commencent implicitement par une lettre majuscule. L'implémentation courante peut donner des liens eronnés vers la page de description lorsque le $wgCapitalLinks local et initialCapital ne correspondent pas.
pathDisclosureProtection
Peut être 'paranoid' pour supprimer tous les paramètres dans les messages d'erreur, 'none' pour laisser les chemins inchangés, ou 'simple' pour remplacer les chemins par des jokers. Par défaut, pour LocalRepo la valeur est 'simple'. Notez que certains logiciels de vignette d'image écrivent le chemin de la vignette dans les métadonnées de la vignette générée, donc ce paramètre peut ne pas fournir une protection totale.
descBaseUrl
URL de la page de description de l'image, par exemple https://en.wikipedia.org/wiki/File:
scriptDirUrl
URL de l'installation MediaWiki, équivaut à $wgScriptPath , par exemple : https://en.wikipedia.org/w
articleUrl
Equivaut à $wgArticlePath , par exemple https://en.wikipedia.org/wiki/$1
fetchDescription
Va chercher le texte de la page distante de description de fichier. Equivaut à $wgFetchCommonsDescriptions .
Avertissement Avertissement : A cause d'un bogue dans MediaWiki, le wiki externe doit avoir une URL complète, ou dépendante du protocole (et non simplement relative) dans $wgUploadPath , sinon les pages de description avec des images dessus ne seront pas récupérées correctement.
descriptionCacheExpiry
S'il est mis à 0, il n'y a pas de mise en cache. S'il vaut 1 ou plus (en secondes) alors il définit le temps pendant lequel la description des pages reste dans le cache local. Ceci ne fonctionne que lorsque fetchDescription vaut true .

Classe ForeignAPIRepo

apibase
L'URL de la base pour l'API du dépôt distant (par exemple https://commons.wikimedia.org/w/api.php). Uniquement utilisé pour ForeignAPIRepo.
apiThumbCacheExpiry
Durée pendant laquelle les vignettes doivent rester dans le cache local. S'il est mis à 0, alors les vignettes ne sont pas mises dans le cache local La mise en cache locale de la miniature réduira la charge sur le serveur étranger et améliorera la confidentialité des utilisateurs. Cependant, cela peut ralentir légèrement votre wiki.

Classe ForeignDBRepo

directory
Chemin vers un répertoire de médias de MediaWiki, local au serveur, tel que /var/www/wiki/images.
dbType, dbServer, dbUser, dbPassword, dbName, dbFlags
équivaut au membre correspondant de $wgDBservers
tablePrefix
Préfixe de tableau, le $wgDBprefix du wiki externe
hasSharedCache
True si le cache partagé du wiki est accessible via le $wgMemc local
favicon
Une icône favorite pour le dépôt distant

Valeur par défaut (code dans includes/SetupDynamicConfig.php) :

if ( $wgUseSharedUploads ) {
	if ( $wgSharedUploadDBname ) {
		$wgForeignFileRepos[] = [
			'class' => ForeignDBRepo::class,
			'name' => 'shared',
			'directory' => $wgSharedUploadDirectory,
			'url' => $wgSharedUploadPath,
			'hashLevels' => $wgHashedSharedUploadDirectory ? 2 : 0,
			'thumbScriptUrl' => $wgSharedThumbnailScriptPath,
			'transformVia404' => !$wgGenerateThumbnailOnParse,
			'dbType' => $wgDBtype,
			'dbServer' => $wgDBserver,
			'dbUser' => $wgDBuser,
			'dbPassword' => $wgDBpassword,
			'dbName' => $wgSharedUploadDBname,
			'dbFlags' => ( $wgDebugDumpSql ? DBO_DEBUG : 0 ) | DBO_DEFAULT,
			'tablePrefix' => $wgSharedUploadDBprefix,
			'hasSharedCache' => $wgCacheSharedUploads,
			'descBaseUrl' => $wgRepositoryBaseUrl,
			'fetchDescription' => $wgFetchCommonsDescriptions,
		];
	} else {
		$wgForeignFileRepos[] = [
			'class' => FileRepo::class,
			'name' => 'shared',
			'directory' => $wgSharedUploadDirectory,
			'url' => $wgSharedUploadPath,
			'hashLevels' => $wgHashedSharedUploadDirectory ? 2 : 0,
			'thumbScriptUrl' => $wgSharedThumbnailScriptPath,
			'transformVia404' => !$wgGenerateThumbnailOnParse,
			'descBaseUrl' => $wgRepositoryBaseUrl,
			'fetchDescription' => $wgFetchCommonsDescriptions,
		];
	}
}

Classe ForeignDBViaLBRepo

wiki
wiki-db-name utilisé dans $wgLBFactoryConf

Droits sur les répertoires

Vous aurez besoin des droits 'rw' sur $IP/images et sur $IP/images/thumbs quelque soit l'utilisateur pour lequel PHP s'exécute.

Utilisation

Version de MediaWiki :
1.31

Utiliser les fichiers de Wikimedia Commons : ForeignAPIRepo

Depuis 1.16.0 il existe un raccourci plus pratique dans l'utilisation de Commons en tant que dépôt externe : $wgUseInstantCommons .

Vous pouvez configurer votre wiki pour qu'il utilise directement les médias de Wikimedia Commons (ou de tout autre site bâti sur MediaWiki, voir ci-dessous). Néanmoins, faites attention à ce que cela implique au niveau des droits d'utilisation.

Pour utiliser ceci, il faut :

  • MediaWiki 1.13 +
  • PHP avec prise en charge de JSON (pour la fonction json_decode()). JSON est activé par défaut depuis PHP 5.2.0; pour les versions plus anciennes, vous aurez besoin de l'extension PECL. Depuis MediaWiki 1.16, cela n'est plus nécessaire; la version 1.16 utilisera du code personnalisé (et plus lent) si JSON n'est pas disponible.
  • Le wiki distant doit également utiliser MediaWiki 1.13 ou plus récent; sinon son api.php renvoie {"error":{"code":"iiunknown_iiprop","info":"Unrecognised values for parameter 'iiprop'"}} et les requêtes de fichiers échouent silencieusement (c'est à dire que les fichiers demandés sont traités comme s'ils n'existaient pas).

Le code ci-dessous vous permet d'avoir des fichiers média de Wikimedia Commons sur votre site. Vous devez le mettre dans votre fichier « LocalSettings.php » :

$wgForeignFileRepos[] = [
	'class' => ForeignAPIRepo::class,
	'name' => 'commonswiki', // doit être un nom différent
	'apibase' => 'https://commons.wikimedia.org/w/api.php',
	'hashLevels' => 2,
	'fetchDescription' => true, // Optionnel
	'descriptionCacheExpiry' => 43200, // 12 heures, optionnel (valeurs en secondes)
    'apiMetadataExpiry' => 14400, // 4 heures, facultatif. Augmenter pour une meilleure performance.
	'apiThumbCacheExpiry' => 86400, // 24 heures, facultatif, mais nécessaire pour la mise en cache local des vignettes (notez que cette dernière est souvent plus lente que si on ne la fait pas)
];
Si vous choisissez de mettre ce paramètre dans votre fichier « LocalSettings.php » au lieu d'utiliser $wgUseInstantCommons , vous ne pouvez pas utiliser wikimediacommons comme paramètre pour name parce qu'il existe déjà dans le code du noyau MediaWiki (dans « Setup.php »).

Pour récupérer les images d'un autre projet Wikimedia, initialisez apibase avec le fichier « api.php » de ce wiki comme par exemple https://en.wikipedia.org/w/api.php. Exemple :

$wgForeignFileRepos[] = [
	'class' => ForeignAPIRepo::class,
	'name' => 'enwikipedia',
	'apibase' => 'https://en.wikipedia.org/w/api.php',
	'hashLevels' => 2,
	'fetchDescription' => true,
	'descriptionCacheExpiry' => 43200,
	'apiThumbCacheExpiry' => 86400,
];

Pour inclure une image dans votre installation, utilisez simplement [[File:name_of_commons_picture.jpg]].

Performances

Il est possible que vous ayiez à configurer aussi le $wgMainCacheType . La valeur par défaut est souvent de CACHE_NONE, ce qui signifie qu'il chargera l'image de l'hôte distant à chaque chargement de page, ce qui sera très lent. De même, vous devez initialiser apiThumbCacheExpiry à zéro si vous préférez utiliser les miniatures étrangères qui seront plus rapides. La valeur par défaut pour apiMetadataExpiry est de 4 heures. C'est l'un des paramètres les plus impactants pour la performance. Considérez initialiser une valeur très élevée, comme 604 800 (1 semaine) pour obtenir une meilleure performance. Cependant, cela peut signifier qu'il peut prendre tant de temps jusqu'à ce que toutes modifications du le fichier arrivent sur votre wiki.

La définition de $wgResponsiveImages = false; peut améliorer les performances des biens communs instantanés au détriment de la qualité des images sur les écrans haute résolution.

Actuellement, MediaWiki ne prend pas en charge l'enchaînement (pipelining) des requêtes API étrangères. Un site hautes performances peut souhaiter mettre en place un proxy local (tel que nginx) qui peut fusionner plusieurs requêtes en une seule requête pipeline afin de réduire le temps des allers-retours des prises de contact TCP et TLS.

Il existe également une alternative de mise en œuvre à Extension:QuickInstantCommons qui peut être beaucoup plus rapide

Utiliser les fichiers d'une base de données accessible : ForeignDBRepo, ForeignDBViaLBRepo

La classe ForeignDBRepo est très utile pour créer des familles de wikis. Dans une famille de wikis, chacun des wikis possède sa propre base de données ou le même préfixe de table. En utilisant cette classe, vous pouvez faire en sorte qu'un membre de la famille connaisse les tables d'un autre membre de cette famille. L'accès via ForeignDBRepo est plus rapide que par ForeignAPIRepo. Ce code doit être déployé au LocalSettings.php.

$wgForeignFileRepos[] = [
	'class' => ForeignDBRepo::class,
	'name' => 'otherwiki',
	'url' => "https://example.org/w/images",
	'directory' => '/path/to/uploads',
	'hashLevels' => 2, // C'est la même chose pour l'autre membre de la famille
	'dbType' => $wgDBtype,
	'dbServer' => $wgDBserver,
	'dbUser' => $wgDBuser,
	'dbPassword' => $wgDBpassword,
	'dbFlags' => DBO_DEFAULT,
	'dbName' => 'mydb',
	'tablePrefix' => 'mw_',
	'hasSharedCache' => false,
	'descBaseUrl' => 'https://example.org/wiki/File:',
	'fetchDescription' => false
];

De la même façon, si $wgLBFactoryConf est initialisé pour des wikis multiples, vous pouvez utiliser 'class' => ForeignDBViaLBRepo::class :

$wgForeignFileRepos[] = [
	'class' => ForeignDBViaLBRepo::class,
	'wiki' => 'wiki-db-name-used-with-wgLBFactoryConf',
	'name' => 'otherwiki', # nom de l'affichage (par exemple, l'onglet de l'habillage Vector, vector-skin-tab ''View on OtherWiki''); il peut être initialisé à wiki-specific MediaWiki:Shared-repo-name-<otherwiki>
	'url' => 'https://example.org/w/images',
	'directory' => '/path/to/uploads',
	'hashLevels' => 2, # C'est la même chose pour l'autre membre de la famille
	'tablePrefix' => 'mw_',
	'hasSharedCache' => false,
	'fetchDescription' => true,
	'scriptDirUrl' => 'https://example.org/w', # effectif si la description peut être trouvée
];

Pour cela, tous les paramètres db* ne sont pas nécessaires comme dans ForeignDBRepo.

Utiliser les fichiers d'un répertoire local : FileRepo

Vous pouvez configurer votre wiki pour qu'il n'utilise les médias que d'un seul répertoire. Actuellement, ce n'est qu'une fonctionalité de démonstration, qui sera probablement trop lente pour des wikis chargés ou des serveurs lents à cause de l'absence de cache. Ce code doit être ajouté à LocalSettings.php.

Le code ci-dessous permet d'y récupérer les fichiers média :

$wgForeignFileRepos[] = [
	'class' => FileRepo::class,
	'name' => 'sharedFsRepo',
	'directory' => 'media',
	'hashLevels' => 0,
	'url' => 'https://shared.example.org/path/to/media',
];

Mises en garde

Pour des performances optimales, utilisez un wiki dont le but premier est de servir de base commune pour la cible $wgForeignFileRepos. Evitez par exemple d'avoir deux wikis de contenu qui se pointent mutuellement dessus en tant que dépôts externes dans le but de se partager des fichiers, car cela va générer un nombre excessif de requêtes de fichiers lors de l'affichage des pages ou de leur modification, car chacun des wikis va demander les fichiers à l'autre.

De la même manière, évitez de partager une base de données entre le wiki commun et les autres wikis de contenu, particulièrement si vous devez utiliser ForeignAPIRepo au lieu de ForeignDBRepo parce qu'il existe des limitations imposées par votre fournisseur de services ou votre administrateur. Ceci génère un grand nombre de connexions de base de données établies durant un temps potentiellement très long, ce qui peut se traduire par une chute des performances, ou un dépassement du nombre limite de connexions de la base de données même sur des wikis qui ont peu de trafic ou d'activité.

Voir aussi