はじめての親子ハイキングに挑戦!! >>

htmlのページを開いたときに、部分的にCGIの実行結果、もしくはファイルの中身を表示することは出来ないでしょうか。「インラインフレームを設けて・・・」という意味ではなく、たとえばページを開くごとにある行の数字だけ数字が増えていく、といったカウンターのようなことが出来るようにしたい。
そういうCGIスクリプトを作っているので、CGIをまったく使わないというのは無しで、またSSIは使わないこと前提でお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

>SSIを使わないテキストカウンタをつくりたい



なるほど、そういうことでしたか。

><script type="text/javascript" src="****/count.cgi?***=***"></script>
>という風にHTMLに組み込んであります。
>こうすることでCGIは動いてくれるものなのでしょうか。

CGI側に一工夫必要です。
Content-Typeをapplication/x-javascriptとします。
詳しくは参考URLをご覧下さい。
私の環境(Win2k+Apache2)ではContent-Type:text/plainでも動くようですが。

参考URL:http://allabout.co.jp/computer/javascript/closeu …
    • good
    • 0
この回答へのお礼

ありがとうございます。
お礼遅れてしまいました。

無事作ることが出来ました^^

お礼日時:2004/03/01 19:10

No.3です。



$count_file = "counter.txt";
open(CNT_FILE, "$count_file");
$count = <CNT_FILE>;
chomp($count);
close(CNT_FILE);

として$countにカウンタを取得し、
あなたは$count番目だよ!と出力すれば、
テキストのカウンターが作れると思うんですが...

もちろん、この後に$countをインクリメントして、counter.txtファイルに出力しておいてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
お礼遅れてしまいました。

いえ、これではページ全体がcgiによる出力になってしまいますよね。他の方にも使ってもらえるようなテキストカウンタを配布したいので、これではちょっと無理なんです・・・^^;
でも無事解決しましたので、またよろしくおねがいします。

お礼日時:2004/03/01 19:10

><script type="text/javascript" src="****/count.cgi?***=***"></script>


>という風にHTMLに組み込んであります。
>こうすることでCGIは動いてくれるものなのでしょうか。

あ、そういう方法もありましたね。
動くと思いますよ。

実際やってみるのが一番でしょう。
    • good
    • 2
この回答へのお礼

ありがとうございます。
お礼遅れてしまいました。

ぶじ作ることが出来ました^^

お礼日時:2004/03/01 19:11

まず、例えばindex.htmlという名前のhtmlファイルを用意します。



<html>
<head>
<title></title>
<meta HTTP-EQUIV="Refresh" CONTENT="0;URL=http://www.****.**.jp/cgi-bin/output_html_file.c …
</head>
<body>
</body>
</html>

次に、例えばoutput_html_file.cgiというような名のスクリプトをPerlで書いて、HTMLファイルを出力し、いかにもindex.htmlに書かれているかのように見せることができるでしょう。多くの部分はprintなどでそのままベタに出力し、カウンターの部分だけ工夫すれば、簡単にできると思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
それは結局はCGIでカウントする部分以外も出力するという形になるんですよね?
もしそうだったら、それは避けたいです。
テキストカウンタを作りたいと思っているので^^;

お礼日時:2004/02/03 12:56

CGIでHTML文書を動的に出力すればいいと思うのですが、それではだめなのでしょうか?

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

ありがとうございます。SSIを使わないテキストカウンタをつくりたいので、それは避けたいです^^;

お礼日時:2004/02/03 12:53

HTMLファイルでSSIを使わずCGIを実行できないので無理でしょう。


拡張子がhtmlというのであれば、.htaccessを弄ってhtmlという拡張子のCGIファイルであれば可能でしょう。

他にカウント部分をJavaScriptで吐き出すようにすれば、
それも可能かと。
CGIで.jsファイルにカウントを記入するとか。
もっとも<img>なり<iframe>なりでそのCGIを呼び出す必要があります。
    • good
    • 1
この回答へのお礼

実を言うと、SSIを使わないテキストカウンタをつくろうと思っているんです。
他のテキストカウンタを参考にしたところ、カウントの表示部分(呼び出し)にjavascriptを使っていましたが、原理がイマイチわかりませんでしたが、
<script type="text/javascript" src="****/count.cgi?***=***"></script>
という風にHTMLに組み込んであります。
こうすることでCGIは動いてくれるものなのでしょうか。

お礼日時:2004/02/03 12:53

このQ&Aに関連する人気のQ&A

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

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

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

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

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');";
みたいにして吐き出す必要があります。

QCGIの中で出力するテキスト内容をhtml側で表示する方法。

htmlからCGIファイルを呼び出すと、そのCGIは動作はしているようですが、
print等でhtml形式で文字出力させている部分は、ブラウザ内に表示されません。
今やって失敗している方法です。どのようにするのが良いか教えて頂ければ幸いです。

1.CGIスクリプト(Perlで記述)を用意... test.cgi
-----------------------------------------------------
#!/usr/bin/perl
print "Content-type:text/html; charset=shift_jis\n\n";
print <<__EOD;
<html lang="ja">
<head>
<title>TITLE</title>
</head>
<div align=center>
<a>テスト1</a><br>
<a>テスト2</a><br>
</div><br>
</body></html>
__EOD

open(OUT,">a.tmp") || die "$!";
print OUT "aaaaa\n";
close(OUT);
-----------------------------------------------------


2.htmlを用意 ... test.html
-----------------------------------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>HTML TEST</title>
</head>
<body>
<script src="http://xxx/CGI/test.cgi"></script>
</body>
</html>
-----------------------------------------------------

上記のとき、動作として、

◆ブラウザからCGIのパス(http://svr1/CGI/test.cgi)に直接アクセスした場合、
「テスト1」「テスト2」の文字が表示され、a.tmpファイルも作成されている。

◆ブラウザからhtml(http://svr1/test.html)にアクセスした場合、ブラウザ画面は何も表示されない
(真っ白となる)が、a.tmpファイルは作成されている。

のようになってしまいます。

後者のようにして、htmlからCGIファイルを呼び出すと、そのCGIは動作はしているようですが、
print等でhtml形式で文字出力させている部分は、ブラウザ内に表示されません。

以上、よろしくお願い致します。

htmlからCGIファイルを呼び出すと、そのCGIは動作はしているようですが、
print等でhtml形式で文字出力させている部分は、ブラウザ内に表示されません。
今やって失敗している方法です。どのようにするのが良いか教えて頂ければ幸いです。

1.CGIスクリプト(Perlで記述)を用意... test.cgi
-----------------------------------------------------
#!/usr/bin/perl
print "Content-type:text/html; charset=shift_jis\n\n";
print <<__EOD;
<html lang="ja">
<head>
<title>TITLE</title>
</head>...続きを読む

Aベストアンサー

<script src="http://xxx/CGI/test.cgi"></script>としているなら
perlで出力するヘッダーは
print "Content-Type: application/x-javascript\n\n";
としないとならないでしょう。

perlではjavaScript構文を出力します。

例えばhtmlでは・・
<BODY>
<SCRIPT TYPE="Text/Javascript" LANGUAGE="Javascript">
<!--
document.write ("<SCRIPT TYPE=\"text/JavaScript\" SRC=\"test.cgi\"></SCRIPT>");
// -->
</SCRIPT>
</BODY>

として、perlでは

#!/usr/bin/perl
print "Content-Type: application/x-javascript\n\n";
print "document.write('<A HREF=\"other.html\">てすと</A>');";

てな感じです。

<script src="http://xxx/CGI/test.cgi"></script>としているなら
perlで出力するヘッダーは
print "Content-Type: application/x-javascript\n\n";
としないとならないでしょう。

perlではjavaScript構文を出力します。

例えばhtmlでは・・
<BODY>
<SCRIPT TYPE="Text/Javascript" LANGUAGE="Javascript">
<!--
document.write ("<SCRIPT TYPE=\"text/JavaScript\" SRC=\"test.cgi\"></SCRIPT>");
// -->
</SCRIPT>
</BODY>

として、perlでは

#!/usr/bin/perl
print "Content-Type: appli...続きを読む

Qhtml上で、バッチやexeファイルの起動をしたい

わけあって、学校(養護学校)初心者向けにhtmlでメニューを作っています。
さて、スタートボタンやディスクトップにショートカットを使わず、htmlの中からバッチファイルやexeファイルを起動できるでしょうか?

もし可能ならば、教えてください。OSはWindows XPで起動したいファイルはexeファイルとバッチファイルです。
よろしくお願いします。

Aベストアンサー

<html><head></head>
<body>
<a href="file:///c:/windows/system32/calc.exe">電卓</a>
</body>
</html>

QJavaScriptでcgiの戻り値を受け取るには?

JavaScriptの関数内でcgiを実行(submit)しています。
そのcgiの実行結果(cgiで記述しているexit 0などの0)を受け取る方法を教えてください。

受け取った値によって、alertでメッセージを表示させたいです。
cgiの実行からalertでメッセージを表示させるまでの処理を
JavaScriptの1つの関数内で行いたいです。

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

Aベストアンサー

いわゆる「Ajax」で調べてみてください。
一般的には非同期通信を行いますが、同期通信なら1つの関数内で出来ます。
「ajax 同期通信」「ajax 同期モード」こんな感じのキーワードでいいと思います。
サンプルは検索すれば何種類か出てくると思いますのでそれを見てください。
(種類が少ないのは、他に書き方がないため。使用しているライブラリの違い。)

ただし、exit 0の0を受け取ることは出来ません。
これはCGIアプリケーションからOSに返される値であり、クライアントへは返されません。(CGIアプリケーションにとっての標準出力から出力されません。)
これをJavaScriptで受け取るには、CGIアプリケーションがexit 0する前にそれと同じ値を標準出力に出力する必要があります。

以下、PerlのCGIスクリプトの例(exit部分)

if($isError){
print '1';
exit 1;
}
print '0';
exit 0;

Q起動しているサービスを確認するコマンド

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

Qhtmlファイルへのcgiの組み込みについて

gifファイルなどはcgiで<img>タグによってhtmlファイルに埋め込むことはできますが,cgiから出力されるtxtをhtmlに埋め込むことはできますか?
すべてをcgiでやれば済むことですが,もし方法があれば教えてください.
フレームを使用すればできると思いますが,できたら使用しない方法をお願いします.

Aベストアンサー

> html側ではperlで作成されたcgiではなくjavascriptで作成されたcgiですよね?
Perlで作られたCGIです。(一般にCGIがそうであるように、スクリプトの言語はPerlでなくてもかまいませんが。)

>perlとjavascriptが混在しているように見える
これはPerlです。
サーバ側からテキストとして'document.~'を出力しています。
受取ったブラウザは外部Javascriptとして読み込んでいるのでそのテキストをJavascriptとして処理します。

混乱させてしまったようですが、CGIというのはHTMLやIMGだけを返すためにあるわけではないということです。

前回書き忘れましたがヘッダーも
Content-type: text/html
ではなく
Content-type: application/x-javascript
とする必要があります。

あと、#1に補足ですがexecコマンドが禁止されていてもincludeでCGIを呼び出すこともできます。
SSI自体禁止されている場合も多いのですが。とにかくSSIが使えるならSSIを使うことをお勧めします。

> html側ではperlで作成されたcgiではなくjavascriptで作成されたcgiですよね?
Perlで作られたCGIです。(一般にCGIがそうであるように、スクリプトの言語はPerlでなくてもかまいませんが。)

>perlとjavascriptが混在しているように見える
これはPerlです。
サーバ側からテキストとして'document.~'を出力しています。
受取ったブラウザは外部Javascriptとして読み込んでいるのでそのテキストをJavascriptとして処理します。

混乱させてしまったようですが、CGIというのはHTMLやIMGだけを返すために...続きを読む

Qhtmlからテキストを返すperlを実行する方法

アクセスカウンターの数字画像を出力するperlのcgiを、<img>タグで、

<img src="./counter.cgi">

と、呼び出す方法があると思いますが、これと同じように、画像ではなくテキストを出力するperlのcgiをhtml中に呼び出して、ブラウザに表示する方法はないでしょうか?

以下のような感じかと漠然と思ったのですが、やはり上手くいくはずはありませんでした。

■cgiプログラム(test.cgi)
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "TEST TEXT";
exit 0;

■htmlファイル
<html><head></head>
<body>
<br>
<hr>
<object data="./test.cgi" type="text/plain"></object>
<hr>
</body>
</html>

perlもhtmlも独学で学んだ基礎レベルだと自分で思っています。
どなたか突破口となるヒントをお願いします。

アクセスカウンターの数字画像を出力するperlのcgiを、<img>タグで、

<img src="./counter.cgi">

と、呼び出す方法があると思いますが、これと同じように、画像ではなくテキストを出力するperlのcgiをhtml中に呼び出して、ブラウザに表示する方法はないでしょうか?

以下のような感じかと漠然と思ったのですが、やはり上手くいくはずはありませんでした。

■cgiプログラム(test.cgi)
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print "TEST TEXT";
exit 0;

■htmlファイル
<html>...続きを読む

Aベストアンサー

cgi側でjavascriptのコードを返すという方法があります。

■cgiプログラム(test.cgi)
print "Content-type: text/plain\n\n";
print "javascriptのコード";

■htmlファイル
<script type="text/javascript" src="http://サクラ/test.cgi">

テキストニュースも大抵この方式でしょう。
いわいるブログペットも、画像かIFrameかJavascriptで出来ているはずです。

Qcgi内から別のcgiを呼び出す。

お世話になります。
分からないならではの質問かと思いますが、
標題の通りです。

cgiXの中からcgiYを呼び出したい(コントロールを渡したい)
のです。
どう考えればよいのでしょうか。

これまでは、formのactionにcgi名を書き、
submitによってコントロールを渡してきました。

submitせず単純にコントロールを渡したいのです。
宜しくお願いします。

Aベストアンサー

また具体例忘れてました。
出力HTMLの先頭にMETAタグで
<meta http-equiv="Refresh" content="15;URL=http://www.test.com/パス/cgiY.cgi">
などとすれば表示15秒後に指定のCGIにとびます。
追伸:
前の回答でREFRESHのつづり間違えてました。スイマセン。

QCGIでソースがそのままでてしまうのですが・・・。

CGIでソースがそのまま表示されてしまうのですが、どうしてなのでしょうか?

先週からCGIやPerlを学び始めました。そこで簡単なものを試しに作ってみたのですが、入力したソースがそのまま表記されてしまいます。

ちなみに、こんなものです。

#! c:/perl64/bin/perl

print "Content-type: text/plain\n\n";
print "Hello Perl !";

どこをどう変えればいいのか、わからないので、質問してみました。

わかる方がいましたら、教えてください。

初心者なので、お手柔らかにお願いします。

.





この質問に補足する.

Aベストアンサー

CGIスクリプトのソースがそのまま出力されるのは、そのファイル/URIがCGIとして実行できていないためです。

httpd.confの<Directory>ディレクティブや<Location>ディレクティブなどの指定箇所が間違えているか、
ファイルの拡張子を間違えているか、
httpd.confを書き換えてからApacheをリスタートしていないか。。。


Forbiddenが出てきたら.cgiファイルに実行権限が無い。
Internal Server Errorが出てきたら、Perlがインストールされていないか.cgi拡張子とPerlが関連づけられていない。

ということが考えられます。


人気Q&Aランキング