perlカテゴリでも質問させて頂いたのですがちょっと無理があったようですので改めてこちらに質問させて頂きます。
画像のランダムスクリプトと似たかんじでhtmファイルを差し替えるスクリプトって作ることは可能でしょうか?
あるフォルダに多数のhtmファイルを格納しておけばランダムに指定した間隔時間でそのファイルが表示されるといった仕様にしようと改造を試みたのですがどうもうまくいきません。
どなたかPerl言語に精通されている方がいらっしゃいましたらそのスクリプト例をお教え頂きたいのです。
お手数をお掛けします
どうぞよろしくお願い致します。
No.5ベストアンサー
- 回答日時:
#4 です。
>画像ファイルの場合のようにひとつのディレクトリにまとめることは難しいでしょうか?
ムムム。もしや、HTTPの事を正しく理解されていない??
image/* と text/html を同じように考えていませんか?
image/* って、HTMLソースでは無いですよね? って言うことは、ページ遷移はしませんよね??
ここで重要なのは、ページ遷移が発生するかどうか。じゃ無いでしょうか?
なので、ご希望の様な動作はできません。
それにですよ。携帯電話でそんなことやったら(もし、できたとしても。と言う前提の元ですが。)、パケット代が嵩んで大変な事になるんじゃ無いですか? ユーザーはそれで納得されるのでしょうか?
僕は、仕事でCGIなどを作っているのですが、僕だったら、そんな仕様書は門前払いですね。「売れないものに金かけてどうするの?」って感じです(--;)
まぁ、お気持ちは分からなくも無いですが、これを機会にもう少しHTTPについて勉強して見てください。少なくても、ご自分でCGIを作られるのでしょうから、邪魔にはならない知識ですから。
その上で、こんなこと知りたい。とか。あんなこと知りたい。とか。言うのであれば、また質問してみれば良いと思います。僕は、分かる事はお答えします。
この回答への補足
ご回答ありがとうございます。
たしかにパケット量がかさんでしまいますね。
ちょっと大本から考え直してみます。
アドバイスありがとうございました。
No.4
- 回答日時:
#3 です。
> できればディレクトリを指定するだけでファイルを勝手にランダムに表示するような仕様にしたいのですが・・
の部分について書くのを忘れてしまいました(^_^;;)
時間毎にディレクトリがあって、そのディレクトリの中に、いくつかのHTMLが入っている。そのHTMLをランダムに表示する。って言うことで良いですかね?
時間毎の部分は、既に案がでているので、ディレクトリを指定して。の部分だけで焦点を当てます。
ディレクトリ名を渡すと、その中からファイル名を一つ取り出すサブルーチンを作りましょう。
sub getfile {
my($dirname) = @_;
opendir(DIRS, $dirname);
my(@dirs) = readdir(DIRS, "*.html");
closedir(DIRS);
($dirs[int(rand(scaler(@dirs)-1))]);
}
なんて感じで良いかな。(動かしていません。バグってたらゴメンバージョンです(^^;))
こんな感じで、ランダムに取り出すことで、目的の動作をする様になるんじゃ無いでしょうか。
この回答への補足
ご回答ありがとうございます。
やはり時間毎にディレクトリを作らないと無理ですか?
画像ファイルの場合のようにひとつのディレクトリにまとめることは難しいでしょうか?
No.3
- 回答日時:
#1 です。
既に、#2 の方が具体的な方法論を挙げて下さったので、補足的な部分を書きたいと思います。
(1)ホームページをCGIにすると便利です。.htaccess を使用して、ホームページを変えましょう。
DirectoryIndex index.cgi
などと書けば良いでしょう。詳しくは、
ミケネコの htaccess リファレンス
http://www.mikeneko.ne.jp/~lab/web/htaccess/
を参考にしてみてください。
(2)時間ごとに変更する内容は、サブディレクトリに入っている。と言うことなので、index.cgi から locationヘッダを使って、そのファイルへ遷移させる。と言うのが一般的なパターンです。
が、こんな方法もあります。HTML::Template と言うモジュールがあります。これは、HTMLの中に特殊なタグを組み込んで、その内容を Perl で埋め込んで編集し、出力しよう。と言う趣旨のモジュールです。
上記の、index.cgi に HTML::Template モジュールを組み込んで置き、変わる部分をテンプレートの置き換え指示で置き換える。と言う方法です。
読み込まれる方は、HTMLの文法で <body>~</body> の内容を書いて置けば良いでしょう。
指定の時間になったら自動的にリロードさせる。と言うことはやはり無理があるので、見せ方の方を考えるベキかも知れません。
この回答への補足
ご回答ありがとうございます。
locationヘッダもやはりファイルごとに指定して記述しなくてはいけませんよね?
以下の画像ランダムスクリプトのようにhtmファイルをひとつのディレクトリに格納してディレクトリパスを記述するだけで勝手に時間になれば表示するというような形にしたいのですがやはり無理でしょうか?
#!/usr/bin/perl
$n = 3*60*60; # 画像を変更する秒数
$imgdir="./image/";
if(!opendir(DIR,$imgdir)){
print "Content-type: text/html\n\n";
print "Directory open error.\n";
exit(1);}
$k = @file = grep /\.(?:jpg|gif)$/, readdir(DIR);
closedir(DIR);
$a = int(time / $n) % $k;
open(IMAGE, "$imgdir$file[$a]");
binmode(IMAGE);
$size=read(IMAGE,$image, -s IMAGE);
close(IMAGE);
if($file[$a] =~ /\.jpg$/){print "Content-type: image/jpeg\n\n";}
else {print "Content-type: image/gif\n\n";}
binmode(STDOUT);
print $image;
exit;
No.2
- 回答日時:
Perlで指定時間ごとに表示したいhtmlファイルまでのパスを格納しておき、時間取得関数を使い、○時ならこれを表示するとIF文でかけばいいでしょう。
ただ、上記の方法を使うといくつか問題があります。まずCGIにアクセスないと駄目なため、アクセスするファイル名は「xxx.html」ではなく「xxx.cgi」になります。
更にアクセスがあったときの時間で判断しますから、3時59分にアクセスして、4時になった瞬間にパッと変わることはできません。4時になったときに再読み込み(リロード)すれば変わります。
この回答への補足
ご回答ありがとうございます。
つまり、○時ならこれを表示とhtmlファイルごとに記述する必要があるのでしょうか?
できればディレクトリを指定するだけでファイルを勝手にランダムに表示するような仕様にしたいのですが・・
No.1
- 回答日時:
仕様がいま1つイメージできません。
HTMLファイルを差し替えて表示する。と言うのは、表示中のページの一部を、リアルタイムで書き換える。と言う意味でしょうか?
CGIと言うのは、httpdの外部の言語(やシェル)を使って、HTMLを作り出す仕組みです。一度表示してしまったHTMLをリアルタイムで書き換えることはできません。JavaScriptの様なクライアントサイドで動作する仕組みを使用すればできますが。
CGIで行うためには、ページの再表示が必要ですね。再表示させるためには、JavaScriptなどを使ってタイマーをセットすれば良いのでは無いでしょうか。
なので、CGIのと言うよりも、JavaScriptの問題の様な気がします。
この回答への補足
ご回答ありがとうございます。
JavaScriptも考えたのですが、携帯サイトにも対応させていのでCGIでやりたいのです。
htmlファイルはあらかじめ複数用意してディレクトリに格納しておきます。CGIでそのディレクトリにアクセスしてhtmファイルを時間指定でランダムに呼び出す形にしたいのですが・・
やっぱり無理でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- フリーソフト ffmpegのパラメーター『-i』について 1 2023/03/09 07:19
- Visual Basic(VBA) batにて、異なるフォルダの同名ファイルを参照し、文字列を判別。擬似配列で変数へ格納 3 2022/04/10 03:37
- Windows 10 この現象も、Microsoft Explorer のお粗末な仕様のためか? 2 2023/06/09 15:06
- Excel(エクセル) フォルダAから1つのファイルだけを、フォルダBへを移動するVBAについて 2 2022/07/25 11:45
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- PDF PDFを自動添付したメールを送信してくれるツールを探しています。 2 2023/02/07 15:19
- Excel(エクセル) [クイックアクセスツールバー]の設定ファイルの格納場所について、 5 2023/04/21 14:43
- iPhone(アイフォーン) iphoneで撮影した写真、動画を連番のファイル名で保存したい。 1 2022/04/28 02:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
apacheでPerl CGIが作動せず、5...
-
ホームページでCGIのフォームを...
-
/bin/awk '{print $5}'ってどう...
-
.htaccessについて
-
フォームを再送信しますか?
-
CGIで出力するhtmlの<!DOCTYPE ...
-
エクセルで集計したい。
-
ロリポップでCGIを設置する
-
CGIがサーバーに与える負荷の程...
-
CGIで得た内容をHTMlページに代入
-
3DCG
-
ホームページにメールフォーム...
-
cgi アクセス制限 エラー
-
CGIの記述について教えてくださ...
-
CGIの設置が分かりません・・・
-
ホームページにCGIを設置したの...
-
ホームページにCGIを設置したの...
-
サーバーのエラーでおしえてく...
-
ホームページの事でおしえてく...
-
さくらサーバーにcgiフォームを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォームを再送信しますか?
-
エクセルで集計したい。
-
apacheでPerl CGIが作動せず、5...
-
ホームページでCGIのフォームを...
-
入力フォーム(電話番号)
-
htmlからパラメータで、cgiに渡...
-
/bin/awk '{print $5}'ってどう...
-
CGIが読み書きするデータファイ...
-
POSTメソッドの最大容量について
-
チェックボックスでのvalue値の...
-
cgi アクセス制限 エラー
-
CGIゲーム設置について
-
サイト訪問者の情報を取得したい
-
CGIって何ですか?簡潔に教えて...
-
cgiからsendmailを送信で文字化け
-
ホームページにメールフォーム...
-
ラズパイでのCGIで、pythonソー...
-
一番簡単なCGI,掲示板の設置教...
-
perlで書いたcgiでsqliteの使い...
-
CGIメールフォームの件名について
おすすめ情報