downfile.inc.php

サマリ任意のファイルのダウンロードを行うプラグイン
リビジョン0.4
対応バージョン1.4.7
投稿者Makichan?
投稿日2007-10-26 (金) 01:13:43

Wiki管轄外の任意のファイルを任意の名前でダウンロード可能にするプラグイン。
質問箱4/172欲しいプラグイン/317を受けて作成。

ダウンロード

こちら

使い方

インラインプラグインとしてリンクを設置したい場所に記述します。

&downfile(filename[,downname[,title]]);
filename
サーバ上でのファイル名
downname
ダウンロード時のContent-Dispositionに設定する名前
一般的にはこれがクライアントに保存するファイル名になります
省略時はfilenameと同一になります
title
リンクの文字列
省略時はdownnameと同一になります(downname省略時はfilename)

使用例:

&downfile(nihingo.zip,日本語.zip,ここをクリック);

と記述すると、

<a href="ダウンロードのためのURL">ここをクリック</a>

と展開され、クリックすると日本語.zipという名前でダウンロードを開始します。

設定項目

downfile.inc.phpの6行目

define('PLUGIN_DOWNFILE_DIR', 'download/');

を適宜変更することでダウンロードファイルを設置する場所を変更できます。
デフォルトでは PukiWiki設置ディレクトリ/download/ となっています。
このままの設定で利用するのなら、PukiWiki設置ディレクトリにdownloadというディレクトリを作成してください。
また、ブラウザからこのディレクトリへの直接参照を禁止するために、適切な内容の .htaccess を設置した方がいいかもしれません。
WEBとは関係ないディレクトリを絶対パス指定で設定する方がセキュリティ的には安全です。

現状の問題点

  • ファイル名に、たとえば ../../../../../../../foo/bar と設定することで、OSの任意のディレクトリの任意のファイルにアクセスできてしまう
  • エラーチェックがほぼ皆無まだ甘い

ライセンス

GNU General Public License(GPL)

履歴

0.1
とりあえず公開
0.2
URLエンコードとデコードのミススペル修正(2007-10-26 (金) 17:59:02)
0.3
ファイル名の中にパスを遡る記述('../')があるとエラーになるように変更
ダウンロード名はパス部分を除去するように修正(2007-10-30 (火) 11:41:22)
0.4
コメントにライセンス追記
$script を get_script_uri() に変更(2007-11-09 (金) 03:51:56)

  • rawurlencode と書くべきところが rawurldecodeになってました... 修正orz -- Makichan? 2007-10-26 (金) 18:00:23
  • dev:BugTrack2/61 を参考に、クレジットを先頭に追加して下さい。ライセンスは、既存のPukiWikiのコードを流用している場合はそれにならって下さい。そうでなければ決めて下さい。 -- henoheno 2007-11-01 (木) 00:08:09
    • なお・・・ (1)clearstatcache() の意図がわかっていません (2)$script が。 -- henoheno 2007-11-01 (木) 00:15:55
  • ご指摘の点、修正しました。 -- Makichan? 2007-11-09 (金) 03:10:03
    • クレジットを入れました。
    • (1)clearstatcache()というか、PHPがどのレベルでファイルの情報をキャッシュするのかわかってません。plugin_downfile_inline()呼び出し時と、その後のplugin_downfile_action()呼び出しの間にファイルが変更されていたら嫌だなぁってことで念のためclearstatcache()してます。
      PHPのキャッシュが、httpリクエストの度にクリアされるのなら不要でしょう。多分。
    • (2)global 指定が抜けてました。で、せっかくだからget_script_uri()に変更しました。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-05-24 (土) 09:22:59
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u1. HTML convert time: 0.361 sec.

OSDN