** downfile.inc.php [#y44fbcf7] |RIGHT:100|LEFT:360|c |~サマリ|任意のファイルのダウンロードを行うプラグイン| |~リビジョン|0.4| |~対応バージョン|1.4.7| |~投稿者|[[Makichan]]| |~投稿日|&new{2007-10-26 (金) 01:13:43};| Wiki管轄外の任意のファイルを任意の名前でダウンロード可能にするプラグイン。~ [[質問箱4/172]]、[[欲しいプラグイン/317]]を受けて作成。 **ダウンロード [#w5b8169a] [[こちら>http://www.makichan.jp/home/?%3Aattach]] **使い方 [#iac81b5f] インラインプラグインとしてリンクを設置したい場所に記述します。 &downfile(filename[,downname[,title]]); :filename|サーバ上でのファイル名 :downname|ダウンロード時のContent-Dispositionに設定する名前~ 一般的にはこれがクライアントに保存するファイル名になります~ 省略時は''filename''と同一になります :title|リンクの文字列~ 省略時は''downname''と同一になります(''downname''省略時は''filename'') 使用例: &downfile(nihingo.zip,日本語.zip,ここをクリック); と記述すると、 <a href="ダウンロードのためのURL">ここをクリック</a> と展開され、クリックすると''日本語.zip''という名前でダウンロードを開始します。 **設定項目 [#z5768c57] downfile.inc.phpの6行目 define('PLUGIN_DOWNFILE_DIR', 'download/'); を適宜変更することでダウンロードファイルを設置する場所を変更できます。~ デフォルトでは '''PukiWiki設置ディレクトリ/'''download/ となっています。~ このままの設定で利用するのなら、PukiWiki設置ディレクトリにdownloadというディレクトリを作成してください。~ また、ブラウザからこのディレクトリへの直接参照を禁止するために、適切な内容の .htaccess を設置した方がいいかもしれません。~ また、ブラウザからこのディレクトリへの直接参照を禁止するために、適切な内容の [[.htaccess]] を設置した方がいいかもしれません。~ WEBとは関係ないディレクトリを絶対パス指定で設定する方がセキュリティ的には安全です。 **現状の問題点 [#m177d09c] -%%ファイル名に、たとえば ../../../../../../../foo/bar と設定することで、OSの任意のディレクトリの任意のファイルにアクセスできてしまう%% -エラーチェックが%%ほぼ皆無%%まだ甘い **ライセンス [#c1032aa6] [[GNU General Public License(GPL):http://opensource.org/licenses/gpl-license.php]] **履歴 [#c244a6e2] :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]] &new{2007-10-26 (金) 18:00:23}; - [[dev:BugTrack2/61]] を参考に、クレジットを先頭に追加して下さい。ライセンスは、既存のPukiWikiのコードを流用している場合はそれにならって下さい。そうでなければ決めて下さい。 -- [[henoheno]] &new{2007-11-01 (木) 00:08:09}; -- なお・・・ (1)clearstatcache() の意図がわかっていません (2)$script が。 -- [[henoheno]] &new{2007-11-01 (木) 00:15:55}; - ご指摘の点、修正しました。 -- [[Makichan]] &new{2007-11-09 (金) 03:10:03}; -- クレジットを入れました。 -- (1)clearstatcache()というか、PHPがどのレベルでファイルの情報をキャッシュするのかわかってません。plugin_downfile_inline()呼び出し時と、その後のplugin_downfile_action()呼び出しの間にファイルが変更されていたら嫌だなぁってことで念のためclearstatcache()してます。~ PHPのキャッシュが、httpリクエストの度にクリアされるのなら不要でしょう。多分。 -- (2)global 指定が抜けてました。で、せっかくだからget_script_uri()に変更しました。 #comment