Manual:ファイルのアップロードの設定

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Configuring file uploads and the translation is 73% complete.
Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Türkçe • ‎français • ‎русский • ‎中文 • ‎日本語 • ‎한국어

MediaWikiはメディアファイルのアップロードと統合をサポートします。 このページではこの機能の技術的な面を説明します。一般的な使い方の情報については Manual:画像の管理 および Help:画像 を参照してください。

アップロード機能はMediaWikiバージョン 1.1から実装されていますが、セキュリティを考慮しデフォルトでは無効になっています。 アップロードはコンフィギュレーション設定で有効にすることが出来ますが、まずは前提条件を確認することをお勧めします:

前提条件

アップロードがPHPで有効になっていることを確認する

以下の項目は php.ini で設定する必要があります:

file_uploads = On

設定されていない場合、PHPスクリプトはアップロード機能を使用できないのでMediaWikiのアップロード機能も有効になりません。

「open_basedir」が設定されている場合、MediaWiki インストレーションのディレクトリ({$IP}/images)と「upload_tmp_dir」フォルダ(設定していない場合は既定のシステムフォルダ)の両方を対象に指定する必要があります。 「upload_tmp_dir」を追加すると「Could not find file "/var/tmp/php31aWnF"」(「upload_tmp_dir」が「/var/tmp」である場合)のようなメッセージを避けることができます。 より詳しくはPHPのファイルアップロードについての文書ファイルアップロードの基本そして特にmove_uploaded_file()を参照してください。

注記: この変数の正規値はブール演算子で記述します。 PHPはFalse値として認識されない各文字列をtrueとして扱います。したがって、よく使われる「on」値は同じ結果をもたらします。

Windows と IIS 利用者対策

%SystemRoot%\TEMP の設定により Internet Guest Account (IUSR_MachineName または IIS 7 以降はIUSR): を読み取り・書き込み・実行可能に設定。

ディレクトリのセキュリティを調査する

アップロードディレクトリの設定では、エンドユーザーによるwikiもしくはウェブサイトに損害を与える可能性のある外部スクリプトを実行不能にして (参照)、アップロードとウェブディレクトリへの不正なアクセスを予防する必要があります。

/images フォルダ (または以前のバージョンでは/uploadsフォルダ ) に「755」許可を設定。

  • ユーザーは読み取り、書き込み、実行ができるようにします。
  • グループは読み取り、実行ができるようにします。
  • ワールドは読み取り、実行ができるようにします。
許可の設定は必ずフォルダに限定します。実行パーミッションをファイル単位で設定してはいけません。 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

safe_mode を使用している場合は、php スクリプトの実行に使用されているユーザー (つまり、apacheユーザー) がそのディレクトリを所有していることを確認してください。

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

If using CentOS 6 or Mageia the owner:group in the chown command should be "apache:apache" instead of "www-data:www-data".

If using SELinux , make sure to adjust the ACLs accordingly (see there).

  • イメージフォルダのディレクトリリストを制限する

パブリックユーザにイメージフォルダのリストを表示させたくない場合は、これをApache設定で設定することもできます:

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

.htaccess ファイルの確認

MediaWikiのインストールフォルダにあるimagesディレクトリには、いくつかの設定がある.htaccessファイルが含まれています。 このファイルの目的は、アップロードフォルダをより安全にすることです。アップロードディレクトリを別の場所に置く場合は、.htaccessファイルを新しい場所にコピーするか、サーバー上でその設定を直接適用することをお勧めします。 ただし、これらの構成の中には、サーバーの構成によっては競合やエラーの原因となるものがあります。

Some things to take into account:

  • サーバーが.htaccessファイルのディレクティブを設定または上書きできない場合、そのフォルダーの下のファイルにアクセスすると、一般的な「HTTP 500エラー」が発生する可能性があります。 その場合は、行をコメントアウトし、それらのディレクティブをサーバー構成ファイルに直接適用する必要があります。 問題の原因となる可能性の高いディレクティブは、HTMLとPHPファイルがHTMLとして扱われるのを防ぐ AddType とPHPファイルがサーバー上で解析されて実行されないようにするphp_admin_flagです。
  • MediaWiki 1.27より前に、thumb.php スクリプトでサムネイルを生成するカスタム404ハンドラがある場合、この.htaccessファイルの書き換えルールは、RewriteOptions inheritオプション(タスク T67220)がないため、以前のルールを無効にすることがあります。

アップロードをon/offに設定する

MediaWiki バージョン: 1.5

MediaWiki バージョン 1.5以降は、設定する属性は LocalSettings.php に存在し、その $wgEnableUploads の内容は以下の通りです:

$wgEnableUploads = true; # アップロードを有効にする

アップロード機能を無効にするためにはこの属性をfalseに設定します:

$wgEnableUploads = false; # アップロードを無効にする
MediaWiki バージョン: 1.4

ソフトウェアの古いバージョンでは、設定する属性は LocalSettings.php に存在しますが、逆転しています、すなわち $wgDisableUploads です。 デフォルトは次の通りです:

$wgDisableUploads = true; # アップロードを無効にする

アップロードを有効にするために値を反転させる:

$wgDisableUploads = false; # アップロードを有効にする

集中リポジトリを使う

InstantCommonsは設定変更が可能な機能で、ウィキメディアコモンズの何百万という無料の(自由にライセンスされた)ファイルにすぐにアクセスできます。

アップロードの権限

既定では、登録されているすべての利用者がファイルをアップロードできます。 これを制限するには $wgGroupPermissions を変更してください:

  • 一般利用者にはファイル アップロードを許可しない:
    $wgGroupPermissions['user']['upload'] = false;
  • 「uploadaccess」という名前の特殊グループを作成し、所属するメンバーにファイル アップロードを許可する:
    $wgGroupPermissions['uploadaccess']['upload'] = true;
  • 自動承認された利用者 (新規ではない利用者) にファイル アップロードを許可する:
    $wgGroupPermissions['autoconfirmed']['upload'] = true;

既存ファイルを置き換える権限は、reuploadと呼ばれる追加の許可で制御されています。

  • 一般利用者に既存ファイルの上書きを許可しない:
    $wgGroupPermissions['user']['reupload'] = false;
  • 自動承認された利用者 (新規ではない利用者) にファイル更新を許可する:
    $wgGroupPermissions['autoconfirmed']['reupload'] = true;

ForeignFileRepoが設定されている場合、ローカルにあるファイルを置き換える権限は reupload-shared と呼ばれる特別な権限で制御されています。

  • ローカルにあるファイル リポジトリのファイルの上書きを一般利用者に許可しない:
    $wgGroupPermissions['user']['reupload-shared'] = false;
  • 自動承認された利用者 (新規ではない利用者) に対しローカルのファイル リポジトリにあるファイルの置換を許可する:
    $wgGroupPermissions['autoconfirmed']['reupload-shared'] = true;

ユーザ権限について詳しくはManual:User rightsを、アクセス制限について詳しくはManual:Preventing accessをご覧ください。

ファイルタイプの設定

LocalSettings.phpに$wgFileExtensionsを追加することにより、その他の希望する種類のファイルをアップロードできるようになります。 例えば、$wgFileExtensions の行を以下のように変更することができます。

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

もしくは

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

もしくは

# DefaultSettings.php で定義されている既存のアップロード許可ファイル種別リストに、新たなファイル種を追加してください。
$wgFileExtensions[] = 'docx';
$wgFileExtensions[] = 'xls';
$wgFileExtensions[] = 'pdf';
$wgFileExtensions[] = 'mpp';
$wgFileExtensions[] = 'odt';
$wgFileExtensions[] = 'ods';

ブラックリストに掲載されているファイルタイプの制限があります。 ブラックリストの拡張子を持つファイルをアップロードするには、ブラックリストを変更する必要があります。 たとえば、利用者が実行可能ファイルをアップロードできるようにするには:

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

In addition, $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).

$wgStrictFileExtensions を設定することもできます

$wgStrictFileExtensions = false;

ほとんどの種類のファイルをアップロードできるようにします。ただし、ブラックリストに載っているファイルタイプとMIMEタイプは引き続き許可されません。

警告 警告: $wgStrictFileExtensionsをfalseに設定するか、$wgFileBlacklistを変更すると、セキュリティリスクにさらされる可能性があります。

「ファイルが壊れているか、拡張子が間違っています」というエラーが表示された場合は、mime type detectionが正しく動作していることを確認してください。

If you decide to allow any kind of file, make sure your mime detection is working and think about enabling virus scans for uploads .

To enable zip extension (tested in MediaWiki v1.19.23) the following will be necessary in the LocalSettings.php file:

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

ログイン

標準では、anonymousによるアップロードは許可されていません。 You must register and log in before the upload file link appears in the toolbox.

サムネイル

自動的な画像処理/サムネール化の情報は、Image thumbnailing (画像サムネール) を参照してください。 For problems with thumbnailing, see Image Thumbnails not working and/or appearing.

MediaWiki バージョン: 1.11

ファイルが画像やビデオのように視覚的でない場合、代わりにファイルアイコンが使用されます。 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.

ファイルのアップロードのための最大サイズを設定する

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.
php.iniのpost_max_sizeとupload_max_filesize

既定では、php.ini の設定は、アップロードされるファイルのサイズを2メガバイト(およびポスト操作の最大サイズは8メガバイト)に制限します。 さらに大きなファイルをアップロードできるようにしたい場合、php.ini 内でこれらのパラメーターを編集してください:

これはサーバにアクセスするroot権限が必要です - 共有サーバ上にある場合、サーバの管理者に連絡をして下さい。

If you are increasing the maximum upload filesize to a value greater than 100MB, you will need to add $wgMaxUploadSize with the new upload filesize value to LocalSettings.php .
Locating the php.ini file
php.ini の典型的な保存先。

php.ini ファイルの保存先はご利用の配布により異なります。 (config file は "locate php.ini" または "php -i" で検索できる場合もあります。) [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. もし PHP >= 5.3 をご利用で利用可能に設定するには、 php.ini ディレクティブを.user.ini files に配置します。

Webサーバの制限

ご利用のWebサーバによっては、アップロードできるファイルのサイズにさらに制限条件が付加されます。 Apache では LimitRequestBody もそのような設定の一つです。 [2] Nginx 向けはclient_max_body_size が該当の設定です[3] Lighttpd では場合により server.max-request-size の調整が必要[4]

php.ini もしくはWebサーバ設定を編集後、Apache または IIS の再起動が必要な場合があります。

Ubuntu 16.04: sudo service apache2 restart

PHP (Ngingx サーバも対象?) 設定を変更後にも、php5-fpmの再起動が必要な場合があります。

(たとえば Linux の sudo /etc/init.d/php5-fpm リスタート。)

画像ファイルが重すぎるときの警告

MediaWiki は $wgUploadSizeWarning オプションよりも大きなファイルをアップロードしようとすると警告を発します。 これはPHPによる制限とは独立しています。

一時的なアップロード制限

アップロード制限を一時的に変更するには (特定のファームウェアで複数のウィキを走らせる場合など)、次の行を追加します。

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

追加はウィキ単位で、場所は MediaWiki LocalSettings.php 設定ファイルです。 このサンプルの PHP 上限は 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 アップロード上限
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.

アップロードできるファイルの上限を2ギガにする:

以下を $LocalSettings に追加

$wgUploadSizeWarning = 2147483647;
$wgMaxUploadSize = 2147483647;

php.ini で以下の行を調整

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

IIS web.config file で 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

Java JAR のアップロードの許可

MediaWiki は既定ですべての ZIP 形式に見えるファイルをスキャンし、Java .class を検出するとファイルを拒否します。 セキュリティ上、悪意のある Java applet のアップロードの予防策として実施されています。 非公開サイト限定で、以下を使いこの検知を無効にします。

$wgAllowJavaUploads = true;

これを利用し、制限を迂回して mimetypes を無差別にアップロードさせることができます。 たとえば Word 2007 で作成した .doc ファイルをアップロードしたい場合、テキスト リストを添付しても、また mimetype 検知の許可と拒否に無関係に、以下のメッセージが表示される場合があります。

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

Word 2007 で保存した拡張子.doc のファイル (おそらくそれ以降のバージョンでも) には小さな ZIP 形式の圧縮が含まれ、2007以前のワードと異なりバイナリの .doc 形式で表現可能できない metadata が書き込まれています。 この埋め込み ZIP データが引っかかり、Java archive 検査器は .doc ファイルを拒否します。 それより新しい .docx 形式のファイルは ZIP 圧縮に問題がまったくないため、アップロードは正常に行われ $wgAllowJavaUploads の設定は不要です。

URLより直接アップロード("Sideloading")

コンピューター内のファイルの代わりに URL を指定する直接アップロードを利用者に対し許可する場合、$wgAllowCopyUploads = true を設定してください。

既定では URL からの直接アップロードは API (またはUploadWizardなど拡張機能) の使用が条件です。 「特別:アップロード」でこのオプションを有効にするには、 $wgCopyUploadsFromSpecialUpload を true に変えることも忘れないでください。 するとアップロード用フォームのファイル名記入欄の下に、URL記入欄が追加されます。 このURL欄は既定では記入できなうようにグレー表示ですが、欄の横のボタン (チェックボックス) で有効と無効を切り替えます。

ただしこの機能の利用は、利用者権限 upload_by_urlのある場合に限定されます。 システム管理者は、MediaWiki 1.20 以前とは異なり、既定ではなく個別に権限を申請することになりました。 通常のユーザ向けに許可する方法。

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

PHP's cURL support must be enabled to support this feature. Configure your PHP when installing using the --with-curl option.
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 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 $wgDeletedDirectory should be used instead.

まとめてアップロード

複数のファイルをアップロードするには、個別ではなくまとめて処理するツールがいくつかあります。

拡張機能 説明 リリースの状態 要件
Extension:UploadWizard ウィキメディア・コモンズで使用されています 安定版 MediaWiki 1.23+
Extension:MsUpload Allows a user to upload multiple files including by dragging & dropping files. 安定版 1.17, 1.18, 1.19, 1.20, 1.21, 1.22
Extension:SimpleBatchUpload Basic, no-frills uploading of multiple files to MediaWiki 安定版 1.26+
Extension:MultiUpload 現在は保守されていません 破損 1.19+
Commonist (external link to Wiki Commons) 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]
User:Nichalp/Upload script
Commons:File upload service/Script 廃止予定
User:File Upload Bot (Kernigh)

アップロード ディレクトリ

画像を1件アップロードすると、いくつか生成されるものがあります。

  1. ファイル名前空間の記事。記事のタイトルにはファイル名、たとえば File:MyPicture.png を使用。 このページが保存されると、通常のページ同様に編集できます。
  2. ファイル自体はファイルシステムの$wgUploadDirectory で設定されたフォルダもしくはそのサブフォルダに保存されます (以下を参照してください。)
  3. サムネイル化が用意できる場合は、ファイルのサムネイル版画像を作成して提供します (ファイル説明ページで使用する場合など。 それぞれのサムネイルはメインの画像ファイル名にしたがって、個別のフォルダに入れてサムネイルディレクトリに保存します。

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 サイト

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

アップロード用フォームの設定

インストールに含まれる既定のアップロード用フォームはメッセージを (「ファイルをアップロード」リンクやSpecial:Uploadリンクを押した時に) 表示しますが、必ずしもご利用のウィキに適しているとは限りません。

その場合にはMediaWiki:Uploadtextの内容を編集し、メッセージを書き換えます。 ご利用のウィキが多言語版の場合は、MediaWiki:Uploadtext/deなどを編集して地域化するのをお忘れなく。

MediaWiki:Licenses ページにあるドロップダウンメニューで、 ご利用のウィキのアップロードのライセンスを個別化します。

ただしMediaWiki:Licenses/deなど地域化したバージョンは既定では表示されません。 有効にするには、$wgForceUIMsgAsContentMsg変数を設定します。

アップロードフォームの「要約欄」に表示する既定のメッセージは、MediaWiki:Upload-default-descriptionを編集して追加します(例えばご利用のウィキサイトでアップロード要約欄に既定のテンプレートを設定して全員に使用させたい場合など。)

関連項目: Upload form changes

Windowsにおける既知の問題

Windows サーバ上で MediaWiki を走らせると 、PHP バグが原因でファイル名にいくつか制限があります。 PHP は非ASCII文字を使ったファイル名を正しく処理できないため(訳注:後出)、MediaWiki ではアップロード失敗の予防策としてファイル名にそれら文字を使ったファイルに対し、このウィキではファイル名に特殊文字を使用できません。 を表示して受付を拒否する (タスク T3780) ことがあります。

MediaWiki 1.31 以降で PHP 7.1 以降を使う場合、MediaWiki で非ASCII文字が処理できるようになりました。

英字・数字以外の文字を使用したデータベースにおける既知の問題

もし $wgDBname に 英字・数字以外の文字が含まれている場合、以下のようなエラーが発生する場合があります: Could not create directory "mwstore://local-backend/local-public/<path>".. ファイルバックエンドの有効なコンテナ名を内部チェックが原因ですが、構成に$wgDBnameを使用しています。

MediaWiki 1.26より、$wgDBnameにドットが含まれている場合でのアップロードが可能となりました。

関連項目

脚注

  1. For an example of where the php.ini file is, see Where is php.ini located?.
  2. core - Apache HTTP Server Version 2.4 - LimitRequestBody Directive、Apache manual
  3. Nginx マニュアルはclient_max_body_size こちら
  4. Lighthttpd のマニュアルはserver.max-request-size こちら
  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_