マンガでよめる痔のこと・薬のこと

perlでHTMLを吐き出した画面をそのままHTMLファイルに変更する方法を考えています。

どうしても良い方法がわかりません。
どのような方法が良いのか教えていただけないでしょうか?お願いします。

A 回答 (3件)

こんばんは。



吐き出すと同時に同じ内容(HTML文)を新規ファイルに保存してしまえばよいですね。

例えば・・・

#!/usr/local/bin/perl

#吐き出す内容を$htmlに代入。
$html ="<html><body>\n<head><title>HTML保存</title></head>\nこんにちは</body>\n</html>\n";

#吐き出す
print "Content-type: text/html\n\n";
print "$html";

#newfile.htmlという新規ファイルを作成
open (NEWFILE,">newfile.html");

#新規ファイルに吐き出したのと同じ内容を書き込む
print NEWFILE $html;

#新規ファイルを閉じる
close (NEWFILE);

こんな風です。
ただし、この場合、newfile.htmlを保存するディレクトリ(フォルダ。上の例文ではこのcgiと同じディレクトリ)への書き込み権限がないとダメです。
    • good
    • 0

吐き出す内容を,$htmlに保存する際にヒアドキュメントを利用する方法も便利です。



$html=<<HTML;
<html>

<head>
<title>HTML保存</title>
</head>

<body>
こんにちは
</body>

</html>
HTML

これで,HTMLのソースが$htmlに格納されますので,出力するなり,ファイルに書き出すなりしたらよいです。

ヒアドキュメントの詳細に関しては,参考URLをどうぞ。


ヒアドキュメント

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
    • good
    • 0

#1の補足です。



新規作成するファイルの名前ですが、変数を利用してcgiを実行するたびに違った名前が付くように工夫しないと上書きしてしまったり、追記してしまったりするので注意が必要です。

#1の文では毎回newfile.htmlに上書きしてしまいます。
    • good
    • 0

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

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

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

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上(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を実行する方法

アクセスカウンターの数字画像を出力する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で出来ているはずです。

Qperl内でPHPを動かす?

perlでhtmlを書き出しています。
そのhtmlにPHPを埋め込みたく思い、書き出されたhtmlにPHPを記述して
phpとして保存。動作を確認しました。

perlで書き出している全てのページにこのPHPを埋め込みたく思い、perlの
print <<EOF; ~ EOF の間に <?php ~ ?> を埋め込みましたが動きません。
当然の結果なのでしょうか… 何か方法があればご教示願います。 

下記のようなページも見つけましたが、コードをperlに貼り付けても
動作しません。直接貼り付けるのではないのでしょうか?
http://phpspot.org/blog/archives/2006/03/perlphp_2.html

どうぞ宜しくお願いします。

Aベストアンサー

> この場合、$member1 = "ddd"; の部分を $member1 = "$xxx"; としている箇所は
> 当然$xxxのまま表示されていますが、これはもう手動か別のアプリで書き換えるしかないですよね?
> 実はこの"aaa""bbb"…"ddd"の部分が全部変数なんです。

方法2で、PHPの変数を示す$は\$に、Perlの変数を示す$はそのまま、
という書き換えをすればいけます。

---ここから---
print <<EOF;

<?php

\$nam = fopen("​http://www.aaa.co.jp/bbb/ccc.html","r");

while(!feof(\$nam)){
\$line = fgets(\$nam,1024);
\$li_array[] = \$line;
}

\$li_nam = implode("", \$li_array);

\$member1 = "$xxx";
\$member2 = "$yyy";
\$member3 = "$zzz";
---以下略
といった感じにすれば、$xxxの所は、HTMLファイルに出力した段階で、Perlの変数$xxxの内容で置き換えられます。

> この場合、$member1 = "ddd"; の部分を $member1 = "$xxx"; としている箇所は
> 当然$xxxのまま表示されていますが、これはもう手動か別のアプリで書き換えるしかないですよね?
> 実はこの"aaa""bbb"…"ddd"の部分が全部変数なんです。

方法2で、PHPの変数を示す$は\$に、Perlの変数を示す$はそのまま、
という書き換えをすればいけます。

---ここから---
print <<EOF;

<?php

\$nam = fopen("​http://www.aaa.co.jp/bbb/ccc.html","r");

while(!feof(\$nam)){
\$line = fgets(\$nam,1024);
...続きを読む


人気Q&Aランキング