perl での処理を終了後、他のページ(html)に自動的に飛ばしたいのですが(JavaScriptは使わずに)、どうすればよいでしょう。

A 回答 (2件)

 CGIで動的ページを吐き出す際に、頭に


  print "Content-type: text/html\n\n";
とか表示しますよね?

 これと同じような感じで、
  print "Location: URL\n\n";
とすれば、そのURLにリンクしたかのように動作します。
 このとき、LocationとURLの間に半角スペース1つ開ける(確か必要なハズ…)のと、URLは絶対アドレスで指定する(相対指定だと飛ばないトコもあるらしい?)のを、忘れないようにして下さいね。

 では
    • good
    • 0
この回答へのお礼

出来ました。ありがとうございました。

お礼日時:2001/05/02 20:06

それまでの処理で何も表示していなければ,



Location: <飛ばしたい先のURI>

を表示すると出来ると思いますが.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q結果を得て自動的にページ移動を行うには?

CGIプログラムの初心者です。取り合えず作ってみようと思いまして、本を片手に「診断系の占い」のプログラムを書き始めました。生年月日を入力して性格を占う(?)、いわゆる「動物占い」とか「星座占い」のようなやつです。

入力した生年月日から数値を導き、その数値を元に数通り用意した結果のページ(HTML)へ移動させるようにしたいのですが、移動のさせ方がよくわかりません。CGIの中にHTML文書を書いて表示させるのではなくて、別に用意したHTMLのページへ移動させるにはどうしたらいいのでしょうか?

とりあえず
print "Content-type: text/html\n\n";
print <<EOF;
<html>
<head>
<meta HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=$kekka\">
<title>占いの結果です</title>
</head>
#以下略します
#$kekka ←この変数にアドレスを代入してます。

という感じで、<meta>を入れて移動させるようにしてみたんですけど、もっと正攻法があるんじゃないかな?と、疑問を感じました。
申し訳ありませんが、教えていただけると嬉しいです。

CGIプログラムの初心者です。取り合えず作ってみようと思いまして、本を片手に「診断系の占い」のプログラムを書き始めました。生年月日を入力して性格を占う(?)、いわゆる「動物占い」とか「星座占い」のようなやつです。

入力した生年月日から数値を導き、その数値を元に数通り用意した結果のページ(HTML)へ移動させるようにしたいのですが、移動のさせ方がよくわかりません。CGIの中にHTML文書を書いて表示させるのではなくて、別に用意したHTMLのページへ移動させるにはどうしたらいいのでしょうか...続きを読む

Aベストアンサー

別にその方法でもいいと思いますが、その他には「Locationヘッダでリダイレクトさせる」方法や「結果ページのHTMLを読み込んで表示する」方法などが考えられます。

Location の場合、
 print "Location: $kekka\n\n";
とだけ出力すればOKです。
META の Refresh による方法と、ほぼ同じ結果になります。
※$kekka は、念のため絶対URLの方がよいです。

HTMLを読み込んで表示するなら、
 print "Content-Type: text/html\n\n";
 if (open(FH, "< $file")) {  # $fileには、$kekkaに相当するHTMLのファイルパスを指定
   print <FH>;
   close FH;
 }
 else { print "Error: $!" }
という感じ。
こっちの方がMETAやLocationで飛ばすより、早くページが表示されます。

QCGI動作後に元のページに戻る方法

Perl , javascript 初心者です。
あるページの一番下に,チェックボックスを設置して選択してもらうという簡単なアンケートを作っています。
submit ボタンを押した後,CGI(Perl) で処理を行い,その後元のページの元いた場所(アンケートがあるところ)を表示させることはできますか?
また,できれば submit ボタンの横に「ご協力ありがとうございました」というコメントを表示したいと思います。

良い方法があれば教えて下さい。

Aベストアンサー

perlでは、
print "location: (URL)\n\n";
これでページを呼び出します。
同じフォームに戻らなくても、お礼のページを作った方が良いと思います。
どうしても、フォームに戻るなら、CGIから戻ってきたことが判るようにURLの後ろに「?back」などと識別コードを付けます。
そして、HTML内にJavaScriptを埋め込み、自分自身のURLを調べれば、普段のURLと違うことが判ります。

Qperl/cgi リダイレクトができない

こんにちは。

レンタルサーバーにて、認証後に開きたいページをlocationで実行してみたのですが動かなくて困っています。

index.html(ログインフォーム)

aaa.cgi(認証可否チェック)
↓OKならsessionを与えて
bbb.cgi(認証後にユーザーに見せる最初のページ)

location以外でダイレクトさせる方法を教えてください。

よろしくお願いいたします。

Aベストアンサー

METAを使えばリダイレクトできますけども。
<meta http-equiv="refresh" content="0;URL=http://hogehoge.com">

普通は location でできます。
location の前にprint していませんか?
location は 一番最初(printする前)にやらないと動作しません。


ただし、例の動作でしたら私ならばaaa.cgiにすべて入れてしまいますね。
subルーチンとかを使えば余計なページ移動を考えなくてもいいので。

QPerlプログラム上でアラートを表示

現在、Perlにてチェックプログラム(チェック内容は省かせていただきます)を作っています。

もともとはweb上で「登録」をクリックすると以下のような csh で記述されたcgiが実行され、
------------------------------
#!/usr/bin/csh
echo "Content-type: text/html"
echo ""
~中略~
./既存プログラムA.exe
------------------------------
最終的に「既存プログラムA.exe」が起動するというような物で、今回この「既存プログラムA.exe」が起動される直前にチェックプログラムを実行するというものです。

前置きはこのような感じで、教えていただきたい内容は、
チェックプログラム内の記述に以下のようなチェック項目があります。
------------------------------
if(!(-e $CIRCUIT)){
print"END";
exit(0);
}
------------------------------
「$CIRCUIT」というフォルダが存在するか否か、存在すれば次のチェック項目へ、存在しなければ処理終了というような単純な構文なのですが、
このif文内に、"そのようなフォルダはありません"アラートを表示させるような記述を追加することは可能でしょうか?

サンプルURLや情報等お持ちの方いらっしゃいましたら、
よろしくお願いいたします。

現在、Perlにてチェックプログラム(チェック内容は省かせていただきます)を作っています。

もともとはweb上で「登録」をクリックすると以下のような csh で記述されたcgiが実行され、
------------------------------
#!/usr/bin/csh
echo "Content-type: text/html"
echo ""
~中略~
./既存プログラムA.exe
------------------------------
最終的に「既存プログラムA.exe」が起動するというような物で、今回この「既存プログラムA.exe」が起動される直前にチェックプログラムを実行するというも...続きを読む

Aベストアンサー

ウェブ上でアラートを出すなら
print <<END;
<script>
alert('メッセージ');
</script>
END
とかしてみたらどうでしょう。
(未確認自信なし)

QLocation: で cgi → cgi は不可?

print "Location: ./index.cgi\n\n";

上記の命令でエラーとなります。
i-mode用のHPを作ろうと思うのですが,情報の受渡が必要でして・・・
どうすればいいのでしょう?
何かいい方法有りませんか?

Aベストアンサー

 Location: ヘッダは、http:// から始まるフルパスでないと動きません。
 チェックしてみてください。

QHTML上(javascript)からCGIを実行する方法

javascriptから外部実行ファイル(javascriptファイルではなくperlなどのCGI)
を実行する方法を探しています。
下記のようにindex.htmとtest.cgiファイルを用意して、index.htm内の
javascriptから外部cgiを実行させ、cgiの結果(test.cgiでは単に
『test』と表示するのみ)を表示したいと考えています。

利用増ですが、cgiやssiが使用できないサーバにindex.htmを置いて、
cgiが使用できるサーバ上のcgi結果を取得したいものです。
通常のcgiのように、1ページでcgi結果を表示するものではなく、
HTMLファイルの一部にcgi処理結果を表示させたいものです。

そもそも、SSIを使用しなければ下記のようなHTML内にcgiなどの
実行結果を表示する事は出来ないのでしょうか。
よろしくお願い致します。

※下例のプログラムではcgi結果は表示されませんでした・・・。

---<index.htm>----------------------------------------
<HTML>
<BODY>
<SCRIPT language="Javascript" src="http://xxx.xxx.xxx.xxx/test.cgi"></SCRIPT>
</BODY>
</HTML>

---<test.cgi>----------------------------------------
#!/usr/bin/perl

print "test"

javascriptから外部実行ファイル(javascriptファイルではなくperlなどのCGI)
を実行する方法を探しています。
下記のようにindex.htmとtest.cgiファイルを用意して、index.htm内の
javascriptから外部cgiを実行させ、cgiの結果(test.cgiでは単に
『test』と表示するのみ)を表示したいと考えています。

利用増ですが、cgiやssiが使用できないサーバにindex.htmを置いて、
cgiが使用できるサーバ上のcgi結果を取得したいものです。
通常のcgiのように、1ページでcgi結果を表示するものではなく、
HTML...続きを読む

Aベストアンサー

「Google AdSense」のjavascriptでは#1さんの回答にもありますがiframeを使用するような仕掛けになっているようです。
・javascriptでiframeを展開。
・iframeのsrcでcgiを指定。

>外部cgiでjavascriptを生成する仕組みを作り、その生成されたjavascriptを参照するという間接的な仕組みを設ければ可能になる
そういう仕組みも可能です。
また、直接的に<script type="text/javascript" src="xxxx.cgi"></script>
こういう書き方も可能です。
※xxxx.cgiでは処理結果をjavascriptのコードとして
print "Content-Type: application/x-javascript\n\n";
print "document.write('xxxx');";
みたいにして吐き出す必要があります。

QHTMLとPerl間のページ遷移について。

HTMLとPerl間のページ遷移について。

こんにちわ。
HTML(index.html)でログインフォーム(ユーザ名、パスワード)を作成し、そこに入力した情報を、Perl(login.pl)にPOST送信します。
Perlでは、受け取ったパラメータをチェックし、ユーザ名とそのパスワードが正しければ、もとのHTMLファイル(index.html)にページ遷移し、もともとあったログインフォームをJavaScriptで削除し、「ログイン中」と表示させる、ということをしたいのですがわからないところがあり投稿させていただきました。

現在、クライアントでは、JavaScriptを使ってログインフォームを作っています。そして、フォームの中の値を取得して、POST送信することはできます。次に、サーバにてPerlで受け取ったパラメータをチェックし、ユーザ名とパスワードの認証をとるところまではできています。しかし、その後にどうすべきかがわかりません。locationで、もとのHTMLファイル(index.html)を指定しても、ログインを認証したという情報は保持しておらず、それでは意味がありません。
Perlでログインを認証した後に、認証したという情報を保持したままHTMLページに遷移する事は可能でしょうか。可能であればその方法を教えていただきたく思います。
よろしくお願いします。

HTMLとPerl間のページ遷移について。

こんにちわ。
HTML(index.html)でログインフォーム(ユーザ名、パスワード)を作成し、そこに入力した情報を、Perl(login.pl)にPOST送信します。
Perlでは、受け取ったパラメータをチェックし、ユーザ名とそのパスワードが正しければ、もとのHTMLファイル(index.html)にページ遷移し、もともとあったログインフォームをJavaScriptで削除し、「ログイン中」と表示させる、ということをしたいのですがわからないところがあり投稿させていただきました。

現在、クライア...続きを読む

Aベストアンサー

 Perlが使えるなら、わざわざ制約の大きいjavascriptなど使わなくてすむと思いますが????

perlにて、
if(チェックOK){
 $login_FORM = qq^ログイン中<form
 action="$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}" metod="post">
 <input type="submit" size="10" value="ログアウト" </form>^;}
else{
 $login_FORM = qq^<form
 action="$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}" metod="post">
 <input type="text" size="10" value="" name="userName">ID
 <input type="pasword" size="10" value="" name="pasword">パスワード
 </form>^;
}

print qq^現在のHTMLからjavascriptを除いたものをここに書く。
$login_FORM
続きのHTML^;
**************処理
__END__

この場合、index.cgiが、そのページになる。
 htmlの拡張子がよければ、htmlをCGIとして、サーバーに認識させるか、PATH_INFOで処理すること。
例) htt://hoge.com/userPage/index.html
              ^^^^^^^^^自体をCGIにする

 Perlが使えるなら、わざわざ制約の大きいjavascriptなど使わなくてすむと思いますが????

perlにて、
if(チェックOK){
 $login_FORM = qq^ログイン中<form
 action="$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}" metod="post">
 <input type="submit" size="10" value="ログアウト" </form>^;}
else{
 $login_FORM = qq^<form
 action="$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}" metod="post">
 <input type="text" size="10" value="" name="userName">ID
 <input type="pasword" siz...続きを読む

Qcgi(perl)で文中のURLを自動でリンクするようにしたい

CGI(perl)でログファイルから読み込んだデータの中に
http://www…のようなものがあったらそれを自動で
<A HREF="http://www~">http://www~</A>
のような形にしたいのですが、どのように表記したらいいのでしょうか?

http://を探してきて置き換えるのかとも思ったんですが、それだとどこまで、というのが
不明ですよね?

Aベストアンサー

簡易正規表現ですが、
$data =~ s/(s?https?:\/\/[-_.!~*'\(\)a-zA-Z0-9;\/?:\@&=+\$,%#]+)/<A HREF=\"$&\">$&<\/A>/g;
のように変換すれば良いでしょう。

参考URL:http://www.din.or.jp/~ohzaki/perl.htm#httpURL

Qボタンの処理

ボタンをクリックしたら指定されたサブルーチンの処理をするようなプログラムを作ろうとしているのですができません。submitではなくbuttonでやりたいのですが無理でしょうか?分かる方がいらっしゃいましたらよろしくお願いします。

Aベストアンサー

#1です。

これはPerlというよりもHTMLやJavaScriptのお話になりますが、
<button value="削除" name="hoge" onClick="delete()">
とした場合、「ボタンを押したらJavaScriptのdelete()関数を呼び出す」といった意味になります。
mizumaki22さんの組んだソース内に「function delete()」があればそれが呼ばれますが、無ければそこでエラーが発生するでしょう。
これは全てクライアント側で行われる作業であり、Webサーバ側では関知しません。

引き換え、Perlを動かす為にはサーバにアクセスして.cgiファイルを呼ばなければなりません。
そして.cgiファイルが呼ばれた際にWebサーバが内部的に処理を行い、その結果をクライアントに返します。
その為に一般的に使用されるのが<form action="hoge.cgi">といった記述です。
そうして<form>に記述された.cgiファイルを呼ぶには、<form>に対して"submit"を送らなければなりません。
その為に使用するのが<input type="submit" value="削除">といったような記述です。

mizumaki22さんのご質問の場合、この<input type="submit">を使わず<input type="button">で同じような動作をさせたいのかな?と読み取れました。
その場合には<input type="button">を押されたタイミングで"submit"を送ってやる必要があります。
それが#1で書いた<input type="button" onClick="submit()">の意味です。

前置きが長くなりましたが、直し方について・・といっても、もうほとんど書いてしまいましたが。(^_^;
mizumaki22さんの補足してくだっさったソースを見ると、CGI.pmというやつでしょうか。(正直、この辺りには余り詳しく無いのですが。)
> print button(-value=>"削除",-name=>"$link2",-onclick=>"delete()");
見たところ、この記述だと<input type="button" value="削除" name="hoge" onClick="delete()">というHTMLに出力されるように見受けられます。
これが<input type="button" value="削除" name="hoge" onClick="submit()">とHTML出力されれば動くと思われますので、
> print button(-value=>"削除",-name=>"$link2",-onclick=>"submit()");
でよろしいかと思われます。

#1です。

これはPerlというよりもHTMLやJavaScriptのお話になりますが、
<button value="削除" name="hoge" onClick="delete()">
とした場合、「ボタンを押したらJavaScriptのdelete()関数を呼び出す」といった意味になります。
mizumaki22さんの組んだソース内に「function delete()」があればそれが呼ばれますが、無ければそこでエラーが発生するでしょう。
これは全てクライアント側で行われる作業であり、Webサーバ側では関知しません。

引き換え、Perlを動かす為にはサーバにアクセスして.cgiファ...続きを読む

Qファイルの行数取得

超初心者です。

いま、表計算的なスクリプトを記述しています。

あるファイルの行数を取得する関数ってあるんでしょうか?

ファイルに記述されている数値を足したり引いたりするのですが、forを使っての計算の際にファイルの行数が必要となりました。

Aベストアンサー

Perlにですね。ないはずです。
行数とはファイルに書かれた改行文字の個数ということなので
実際にファイルを全て読み込まないと行数はわかりません。
以下のように色々な方法があると思います

#### 単純な例
$a = 0;
open FD, "<file.txt" || die $!;
while (<FD>) {
$a++;
}
close FD;
print "行数:$a\n";

### 少しマニアックな方法
open FD, "<file.txt" || die $!;
@a = <FD>;
close FD;
print "行数:" . ($#a + 1) + "\n";


### 反則的方法(外部コマンド) ... UNIXの場合
print "行数:" . `wc -l file.txt` . "\n";


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング