【Perl】アップローダー
CANDY CGI
 
アップローダー Sn Uploader Candy Type1
特長、利用規定

このスクリプトはアップローダースクリプトです。

菅処さんのSn Uploaderにダウンロード数表示、回数制限、時間制限(1分単位か1時間単位を選択可能)機能をプラスしました。

制限を超えた後にファイルにアクセスしようとするとファイルが削除されます。

回数制限のみ、時間制限のみ、両方の同時使用を選択できます。

サンプル ※サンプルのため動きません。

このスクリプトの著作権は作者(菅処さん)に帰属します。
また利用したことによって発生した損害・被害などに対して、
作者及び改造者(CANDY CGI)は一切の責務を負わないものとします。

CANDY CGIへのリンク、著作権表示は自由に削除できますが、
作者である菅処さんのサイトへのリンクはSn Uploader 再配布規定 1.0を確認してください。

その他の利用規定

このスクリプトはSn Uploader 再配布規定 1.0に基づいて再配布させていただいています。

スクリプトのダウンロード
■スクリプトのダウンロード

Sn_Uploader_Candy_Type1_Ver140.zip

■スクリプトの更新履歴

2007.05.18 Ver140 - ダウンロードを1時間単位にした場合の表示を修正
2007.04.13 Ver130 - ダウンロード時間制限の追加、設定項目の簡略化
2007.01.17 Ver120 - ダウンロードページが削除されないバグを修正、ダウンロードカウントを連続でカウントしないように設定
2007.01.04 Ver110 - マニュアルの.htccessの項目に説明の追加
2006.11.19 Ver110 - ダウンロードページ(パスなし)の表示項目追加

■ファイルの確認

ファイルを解凍して以下のファイルがあるか確認してください。
upload.cgi
count.cgi
print.cgi
style.css
manual.html

スクリプトの設定
■ファイルの修正

upload.cgi、count.cgi、print.cgiを開いて『# 設定の変更【ここから】〜# 設定の変更【ここまで】』の間を修正してください。

■ディレクトリ構成
以下の構成でアップロードしてください。
uploader/upload.cgi
count.cgi
print.cgi
style.css

太字はディレクトリです。

■パーミッションの設定
アップロード後、以下のように設定してください。
upload.cgi755
count.cgi755
print.cgi755
style.css644
スクリプトの使い方

upload.cgiにアクセスするとログファイル/ディレクトリを自動的に作成します
アクセスした際に「メインログの作成に失敗しました」などの表示が出た場合はディレクトリのパーミッション設定を見直してください

■管理画面への入り方
削除フォームのファイルNoの欄に管理者ログインID、パスワード欄に管理者パスを入れます

■ファイルの削除方法
1.ファイルNoの欄にNoを入れます
up0001.jpg の場合 1, 0001 , up0001 , up0001.jpg 等 数値が検出できればOKです
JavaScriptが有効な場合 "消" と言う文字がファイル名の左側に出てきますのでそれをクリックされても結構です

2.削除パスが必要なときは入力する
管理者パスを入れると全てのファイルが削除可能です
また削除時のIPアドレスが投稿時IPアドレスの第3オクテット(192.168.0.9 の 192.168.0.)まで
一致する場合又はユーザー固有IDが一致する場合に限っては削除パスは必要ではありません

3.削除を押す
又,管理者は管理画面にログインすることにより選択/一括削除ができます

■HTMLを更新したい場合
スクリプト改変/投稿パス有無等でフォームデザインが変わって更新したい場合は
削除フォームにNoを入れずパスの欄に管理者パスを入れて削除を押してください
又は管理画面にログインして作業をしてください

■文字コードについて
スクリプトファイルは文字コードにShift-JISを使用しています

そのためバグというかShift-JISの一部の文字コードが\と重なっている影響で
ファイル名に"表,予,ソ,ー"などが含まれているとファイル名が途中で切れます
デザイン変更等で文字を追加挿入した場合 場所によっては500エラーがでることもあります

ファイルへの直リンクを防ぐには
ファイルに直接リンクを貼られた場合、
カウントがされません
パスワードがなくてもファイルの閲覧が可能になります
負荷が増える可能性があります

■対策方法
以下を記述した『.htaccess』をupload.cgiと同じディレクトリにアップロードしてください 
SetEnvIf Referer "^http://アドレス\.com/" ok
SetEnvIf Referer "^$" ok
<Files ~ "\.(jpg|gif|png)$">
order deny,allow
deny from all
allow from env=ok
</Files>

次に、upload.cgiを開いて以下の行を削除、変更してください。

1099行目の
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=$set{'count'}${dlfile}_$orgdlpath/$dlfile">
を削除

1105行目の
飛ばない場合は <a href="$set{'count'}${dlfile}_$orgdlpath/$dlfile">こちら</a> から
を、
ダウンロードは<a href="$set{'count'}${dlfile}_$orgdlpath/$dlfile">こちら</a>です。
に変更してください。


リファラー(リンク元)が『http://アドレス.com/』か『ない』場合にのみ『jpg、gif、png』にアクセスできます。
『ない』場合のアクセスを許可すると、URLを直接入力した場合にアクセスできてしまいますが、
セキュリティーソフトによってはリファラーを得られないため追加してあります。

『http://アドレス.com/』からのみアクセスを許可したい場合は『SetEnvIf Referer "^$" ok』の行を削除してください。

■関連ページ

.htaccessの使い方

設定項目補足

$set{'interval'}
同一IPからの連続投稿を指定した秒数の間拒否します
デフォルトは3秒になっていますが 例えば10分ならば 60*10 と表記しても問題ありません
なお最終投稿のIP/時間でしか判断していないので上記の例ですと
10分以内に他の人がアップロードをした場合は解除されてしまいます

$set{'max_all_flag'}
この値を有効にすると投稿数以外にファイルの容量でもログ落ちを判定するようになります

注意としては 例えば総容量50MBに設定した場合
サーバに既に50MBある状態で10MBのファイルをアップロードされると
一時的に 50MB+10MB = 60MB が消費されます また複数同時アップロード時にも同様のことが言えますので
少し余裕を持って(サーバ制限量よりは少なめに)設定したほうがよさそうです

$set{'up_all'}
この値を有効にすると$set{'up_ext'}に登録されているもの以外でもアップロードを受け付けます
$set{'ext_org'}を有効にする場合(=1)は
スクリプト言語など予期せぬ動作をする場合がありますので
セキュリティーには十分気をつけて下さい

$set{'find_crypt'}
この値が有効になっているとアップロードされたアーカイブが暗号化されているか調べます(ZIPのみ)
暗号化されている場合はCOMMENTの最初に赤の"*"が付きます
大体検出出来てるなと思われる場合には排出HTMLのどこかに*はパス付だ と書いておけば
ダウンロードする側にも多少はメリット!?があるかなと思います

$set{'binary_compare'}
この値が有効になっていると既にアップロードされているファイルとバイナリ比較をします
一致したらファイルをアップロードさせません

$set{'post_key'}
$set{'post_flag'}が有効になっている場合(=1)はこの値をフォームに入力しないとアップロードできなくなります。
投稿パスは,で区切ることで複数発行することができ
メインログには備考として投稿された際の投稿パスが記録されます
途中から投稿パスを有効にする場合は投稿フォームに投稿パスの項目がありませんのでHTMLを直接更新してください

$set{'zero_clear'}
FTPなどCGI以外からの操作でファイルを削除した場合
メインログには情報が残っているがリンク先のファイルがないということがあります
この値が有効な場合次回ファイルアップロード時に該当ファイル情報をメインログから削除します
有効にしなかった場合は次回更新時からも0バイトのファイルとしてHTMLファイルリストに記載されます

$set{'link_target'}
ファイル名に張られているリンクのtarget属性です
新規のウィンドウで開きたい場合は _blank と入力します

Sn Uploader FAQ

Q1. 設置できません(動きません,500エラーがでる)
A1. 主にPerlのパスが違う場合や設置ディレクトリのパーミッションが違う場合が多いようです
またログファイルやファイル保存ディレクトリは初回アクセス時に自動生成しますので
FTP操作などでは作らない方が懸命です

Q2. フレームを使っているページなのでリンクをクリックしたら新しいウィンドウで開きたい
A2. $set{'link_target'} の値に _blank を設定してください

Q3.管理画面に入るのが面倒です
A3.管理者はまず削除フォームに管理者パスを覚えさせてください
Cookie、JavaScriptが使える場合は 次からはフォームにパスが自動入力されますので
数字を入れるとファイル削除、管理者ログインIDを入れると管理画面に入れます

Q4.赤い"*"って何?
A4.適当な独自実装による暗号化ZIP検出のマーキングです

Q5.削除パスを忘れてしまいました削除フォームにも自動入力されてません
A5.投稿フォームに自動入力が残っている場合に限っては
1.削除フォームのNo,パス共にいれずに[削除]を押す(削除Cookieクリア)
2.投稿フォームの[Up]を押す(削除Cookieコピー)
上記操作で投稿フォームの削除パスがコピーされるハズです

Q6.容量制限があるサーバではどのような設定が望ましいのでしょうか?
A6.かなりの余裕を持たせた設定をするのが無難です

このスクリプトでは 1ファイルあたりの容量, 保持ログ(ファイル)数, 総容量
を設定できますが容量制限があるサーバにおいてはこれらの設定に注意する点があります
[アップロード] ---> [ログ数/容量チェック] ---> [ログ落ち分は削除]
という順序でスクリプトは処理をしているので 例えば50MBの制限が掛けられているアカウントで
1ファイルあたりの最大容量を 50MB に設定すると 1ファイル目に50MBをアップロードした場合
保持ログ数が1 でも 2ファイル目をアップロードできなくなってしまうことがあります

これは アップロード完了時までに 1ファイル目が残っていることが原因となります

Q7.拡張子MP4(大文字)を追加したのですが認識されません
Q8.拡張子MP4をアップロードすると小文字になってしまう
A7.A8 拡張子フィルターの処理順序の関係で$set{'up_ext'} に MP4 を追加するのみでは認識されません
これは元ファイル名拡張子を一旦小文字に変換した後に拡張子変換を掛けていることに因ります

以下の方法で回避することができます
$set{'up_ext'} アップロードできる基本拡張子 に MP4 を追加
$set{'change_ext'} 拡張子変換 に mp4->MP4 を追加

スクリプトについて

このスクリプト及び各マニュアルは菅処さんのSn Uploaderを改造、再配布させていただいています。

ここに感謝を申し上げます。

- CANDY CGI -