• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ダウンロードをした人の一覧を表示するCGI)

ダウンロードをした人の一覧を表示するCGI

このQ&Aのポイント
  • フリーのCGIを探していますが見つかりません。あらかじめ登録されたメンバーがダウンロードしたファイルを一覧で表示するCGIを探しています。
  • または、ダウンロード完了登録フォームを用意して、自分の名前を選ぶとダウンロード済みの一覧が表示される仕組みでも構いません。
  • CGIの知識がないため、フリーのものを探しています。過去に同様のシステムを作った経験のある方からの情報をお待ちしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • togino
  • ベストアンサー率75% (97/129)
回答No.6

#!/usr/local/bin/perl print "Content-type: text/html\n"; print "\n"; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); } else { $query_string = $ENV{'QUERY_STRING'}; } @a = split(/&/, $query_string); foreach $a (@a) { ($name, $value) = split(/=/, $a); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $FORM{$name} = $value; } $user_name = $FORM{"user_name"}; @file_names = ("file1.zip", "file2.zip", "file3.zip"); @user_names = ("yamada", "sato", "inoue"); if($FORM{"file_name"}){ $file_name = $FORM{"file_name"}; open(OUT, ">> download.csv"); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time()); $mon ++; print(OUT "${user_name},${file_name},${year}/${mon}/${mday} ${hour}:${min}:${sec}\n"); close(OUT); } open(IN, "< download.csv"); while($line = <IN>){ chop($line); @line = split(",", $line); $download{$line[0]}{$line[1]} = $line[2]; } close(IN); print <<_EOF_; <html><head> </head> <body> $user_name さんのダウンロード状況 <table border="1"> <tr> <td>DL</td> <td>ファイル名</td> <td>日時</td> </tr> _EOF_ foreach $file_name (@file_names) { if($download{$user_name}{$file_name}){ print <<_EOF_; <tr> <td>済</td> <td>$file_name</td> <td>$download{$user_name}{$file_name}}</td> </tr> _EOF_ }else{ print <<_EOF_; <tr> <td>未</td> <td>$file_name</td> <td><a href="download_view.php?user_name=${user_name}&file_name=${file_name}">ダウンロード</a></td> </tr> _EOF_ } } print <<_EOF_; </table> </body></html> _EOF_ return 1; 以上 Perl の CGI に書き換えて見ました。 う~ん、なれない言語だとちょっとしんどいなぁ

take2003
質問者

補足

下にも記載致しましたが、やはりうまく動かないみたいです。 アクセスするURL等間違っているのでしょうか。 申し訳ありません。

その他の回答 (5)

  • togino
  • ベストアンサー率75% (97/129)
回答No.5

> すべてを書いて、UPしてみましたが、 > ソースがブラウザに全部出てしまいました。 あちゃちゃ・・・たぶん、サーバが PHP に 対応していないという事だと思いますよ。 <?php phpinfo(); ?> という3行の phpinfo.php というファイルを作って サーバにアップして、ブラウザから見た場合に、 ソースがそのまま表示されるのであれば、サーバが PHP を処理していない、つまり対応していないって ことになりますね・・・ う~ん、Perl で書き直しますか

take2003
質問者

補足

申し訳ありませんでした。 サーバのホームページには対応と書いてあったのですが、もしかすると契約はPHP使用可能の契約をしていないのかもしれないです。 本当に申し訳ありません。 Perlでのやり方ですが、 #!/usr/local/bin/perl~return 1;までを書いて、 download_view.cgiの名前で保存して、 download.csvとともにUP(アクセス権、755、644で)して、 download_view.cgiにアクセスすれば宜しいのでしょうか。 何度も本当に申し訳ありません・・・。 とても助かります。

  • togino
  • ベストアンサー率75% (97/129)
回答No.4
take2003
質問者

補足

<?php $user_name = $_GET["user_name"]; から </table> </body></html> までをdownload_view.phpというファイルで保存するのでしょうか。 すべてを書いて、UPしてみましたが、ソースがブラウザに全部出てしまいました。 <html>から</html>までを記載すればいいのでしょうか。 何度もすいません・・・。

  • togino
  • ベストアンサー率75% (97/129)
回答No.3

<?php $user_name = $_GET["user_name"]; $file_names = array("file1.zip", "file2.zip", "file3.zip"); $user_names = array("yamada", "sato", "inoue"); if($_GET["file_name"]){ $file_name = $_GET["file_name"]; $fp = fopen("download.csv", "a"); fwrite($fp, "${user_name},${file_name},".date("Y-m-d H:i:s")."\n"); fclose($fp); } $fp = fopen("download.csv", "r"); while($line = fgetcsv($fp, 1000, ",")){ $download[$line[0]][$line[1]] = $line[2]; } fclose ($fp); ?> <html><head></head> <body> <?php echo $user_name; ?> さんのダウンロード状況 <table border="1"> <tr> <td>DL</td> <td>ファイル名</td> <td>日時</td> </tr> <?php foreach($file_names as $file_name){ if($download[$user_name][$file_name]){ ?> <tr> <td>済</td> <td><?php echo $file_name; ?></td> <td><?php echo $download[$user_name][$file_name]; ?></td> </tr> <?php }else{ ?> <tr> <td>未</td> <td><?php echo $file_name; ?></td> <td><a href="download_view.php?user_name=<?php echo $user_name; ?>&file_name=<?php echo $file_name; ?>">ダウンロード</a></td> </tr> <?php } } ?> </table> </body></html> 上記ファイルを download_view.php としてサーバーに アップし さらに下記のような download.csv を書き込み権限を 与えてアップして下さい sato,file1.zip.2004/07/01 12:00:00 完了しましたら http://xxx.yyy.zzz/download_view?user_name=sato とアクセスしてみてください。 いくつか仕様について質問があります。 ■ メンバーは固定ですか?Web から追加・削除しますか? ■ ダウンロードするファイルは固定ですか?Web から追加・削除しますか? Web から追加・削除するなら、そのページもつくりますが

take2003
質問者

補足

回答ありがとうございます。 設置をしてみて、ご報告します。 ご質問についてですが、 メンバーはWEBから追加出来ると大変ありがたいです。 ダウンロードするファイルは追加、削除します。 最初は一つですが、 ファイルNO.1、ファイルNO.2・・・というように追加していくつもりです。 お手数かけて大変申し訳ありません。 ありがとうございます。

  • togino
  • ベストアンサー率75% (97/129)
回答No.2

例えば、この OK Web も PHP を利用されていますが 設置することができるのかは、サーバによります。 下記のファイルを phpinfo.php という名前で 作成して、サーバにアップし http://xxx.yyy.zzz/~aaa/phpinfo.php などの ようにブラウザから見て、いろいろ情報が 見られれば PHP が使えるサーバってことになります。 <?php phpinfo(); ?> というファイルです。 # 誰か Perl で書いてあるのがあればいいんですがね。

take2003
質問者

補足

サーバの詳細を調べたところPHPが使用できるみたいです。

  • togino
  • ベストアンサー率75% (97/129)
回答No.1

CGI は Perl 言語で書かれたものでないと いけないでしょうか? もし PHP 言語での CGI でよろしければ、 これらくらいのものなら10分でお作りして ここに書き込みしてあげれますけど。

take2003
質問者

補足

回答ありがとうございます。 PHP言語で作成されたCGIというのは設置の仕方などは通常のPerlのものと同じなのでしょうか? 知識不足ですいません。 もし私のような初心者でも設置できるようなものでしたら、ぜひ書いて頂きたいのですが。 お手数かけて本当に申し訳ありません。

関連するQ&A