連載ダウンロード sdn.cgi

トップへ


機能
    期限付きファイルリスト表示&ダウンロード
  • あるディレクトリにあるファイルを表示
  • リストファイルにより指定したディレクトリ内のみ、ファイルのみを表示ダウンロード可能
  • 表示、ダウンロードできる期間を予め設定可能。連載物等を一定期間のみダウンロード可能に設定することができます。
  • 期間を過ぎたファイルを自動的に別な場所に移動してその後の直接アクセスを防ぐことが可能
  • ファイルサイズ、日付表示
  • クリックでファイルのダウンロード可能
  • チェックボックスによる一括ダウンロード可能
  • 自動zipファイル作成
  • ページ内ファイル数表示制限機能
  • 画像のリスト、サムネイル表示、ダウンロードには画像ダウンロードがあります
  • 誰でも自由にファイルをアップロードするならアップダウンが便利です
  • 更に、ダウンロードカウンタ、ダウンロードパスワードも付いたアップダウン2もあります
  • 期限無しファイルリストダウンロードにはリストダウンがあります
姉妹スクリプトとの主な違い 設置方法
  1. Perlのモジュール、Archive::Zip, File::Copy::Recursiveがインストールされている必要があります。
  2. 書き込み可能でCGI実行可能なディレクトリにsdn.cgiを置く。
  3. sdn.cgiの1行目のperlのパスをプロバイダに従って変更する。
  4. sdn.cgiのパーミッションを適切に変更する。
  5. ブラウザ上でsdn.cgiを実行する。
  6. 管理人パスワードを訊いてくるので設定する。
  7. 「管理用」をクリックし、ラジオボタンを「セットアップ」にし、パスワードを入力し管理人設定ページで設定をする。
  8. もう一度「管理用」をクリックし、今度はラジオボタンを「リストファイル作成」にし、パスワードを入力しリストファイル作成ページで作成する。リストファイルはこのページを使わなくてもエディタで作成できます。詳しくはサンプルをご覧ください。
  9. リストファイルが準備できてそこに記してあるファイル、ディレクトリが存在するならば「連載ダウンロード」として動作する。
リストファイル
  • リストファイル(デフォルトはlistfile.lst)の内容は普通のテキストで、タイトル、ファイル名(ディレクトリ名)、表示開始時刻、表示終了時刻を半角カンマで区切って1行ごとに並べます。以下のようになります

    海の写真,photo/sea.jpg,2008:4:6:22:39,2008:4:6:22:42
    ライブラリ,../mylib/library.zip,2007:12:28:0:0,2008:1:4:23:59
    歌フォルダ,myfiles/songs

  • リストファイルはエディタで作成する他に、管理用設定の「リストファイル作成」からウェブ上でも作成できます。
  • リスト表示するファイルの数に制限はありません。リストファイルに並べるだけ表示できます。
  • タイトル、コメントに文字数制限はありません。
  • 2カラム目(ファイル名)の部分がディレクトリだった場合はそのディレクトリ内のファイル全てリスト表示されます。その場合、「タイトル/ファイル名」として表示されます。2カラム目がファイルかディレクトリかは自動的に判別されます。
  • ファイル名、ディレクトリ名が全角文字等、半角英数以外の場合の動作は保証できません。
  • 時刻は年月日時分を半角コロンで区切ります。
  • 時間は0時0分から23時59分を指定できます。
  • 時間指定を無効にする場合は年の項目をブランクにしてください。それで年月日時分全て削除され、期限無しの常に表示となります。
  • 指定可能時刻は1971年1月1日0時0分から2037年12月31日23時59分の範囲内です。
File::Copy::Recursiveが無い場合
  • PerlのモジュールFile::Copy::Recursiveは、管理設定の「期限を過ぎたファイル」を「移動する」に設定している場合にのみ使われています。
  • このモジュールを使わずにCGIを使用する場合には、スクリプト内の「use File::Copoy::Recursive qw(rmove);」をコメントアウトし、管理設定の「期限を過ぎたファイル」を「移動しない」にしてください。
  • その際、期限を過ぎたファイルの場所は、過去のアクセスによりユーザー知られている可能性が高いので期限を過ぎていてもファイルがその場にある限り直接アクセスによりダウンロードされる可能性があります。手動で移動するか削除すると良いでしょう。
  • Linuxの「mv」コマンドが使えるならば「rmove("$filedir","$expired_dir/$filedir") if ($move_expired_files and $endok == 0);」を「`mv "$filedir","$expired_dir/$filedir"` if ($move_expired_files and $endok == 0);」とすることもでできます。その場合、「$expired_dir」で指定してあるディレクトリは予め作成されていないといけません。
サンプル&CGI
更新履歴
  • 1.0 : 4/7/08 : Created