🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

Q&A

1回答

337閲覧

cgiに広告を追加したい

sakurad

総合スコア5

CGI

CGI(Common Gateway Interface)とは、Webサーバー上でユーザプログラム動作させる仕組みのこと。また、動かす前提のプログラムをCGIと呼ぶこともあります。HTMLなどの静的な情報に限らず、プログラムの処理結果をベースにした動的情報の提供が可能です。

0グッド

0クリップ

投稿2019/10/20 21:38

cgiに広告を追加したいのですが、どうしたら良いでしょうか。よろしくお願いします。

cgi

1# ------------ # 2# HTMLヘッダー # 3# ------------ # 4sub head{ 5print "Content-type: text/html; charset=Shift_JIS\n\n"; 6print <<EOM; 7<html> 8<head> 9<link rel=stylesheet type=text/css href="$stylepath"> 10<title>$main_title</title> 11</head> 12EOM 13if($background){ print"<body background=\"$background\">\n"; } 14else{ print"<body>\n<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> 15<script> 16 (adsbygoogle = window.adsbygoogle || []).push({ 17 google_ad_client: "ca-pub-8262824574470102", 18 enable_page_level_ads: true 19 }); 20</script>"; } 21} 22 23 24# -------------- # 25# HTMLフッターー # 26# -------------- # 27sub foot{ 28# 著作権表示です 29print <<EOM 30<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> 31<script> 32 (adsbygoogle = window.adsbygoogle || []).push({ 33 google_ad_client: "ca-pub-8262824574470102", 34 enable_page_level_ads: true 35 }); 36</script><DIV ALIGN="RIGHT"><SMALL><A HREF="http://www.minicgi.net/" target="_top">Miniりすと $ver</A></SMALL></DIV> 37</body> 38</html> 39EOM 40}

にしたらInternal Server Errorになってしまいました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2019/10/20 22:18

重複質問は止めてください。
guest

回答1

0

質問の追加範囲であろう箇所を「ヒアドキュメント」で書いてみました。

perl

1if($background){ print"<body background=\"$background\">\n"; } 2else{ 3print <<EOM; 4<body> 5<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> 6<script> 7 (adsbygoogle = window.adsbygoogle || []).push({ 8 google_ad_client: "ca-pub-8262824574470102", 9 enable_page_level_ads: true 10 }); 11</script> 12EOM 13}

エラー原因は、print文に続くダブルクォートで囲んだ文字列内に登場するダブルクォートをエスケープできていないためです。

perl

1print "ダブルクォートで\"囲んだ文字列\"を出力したい";

「著作権表示です」の関数を例に解説すると、<<EOM から EOM まで、
出力したいHTML内容がそのまま記述できていますよね。

ダブルクォートで囲む代わりに、「次の行から前の行までをそのまま文字列として扱う」のがヒアドキュメントです。
Perlに限らず、様々な言語で対応しています。

なお、EOMは EndOfMessage の頭文字としてPerlでヒアドキュメントを使うときの習慣でした。

投稿2019/10/20 22:35

AkitoshiManabe

総合スコア5434

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakurad

2019/10/21 07:55

ありがとうございます! おっしゃるとおりにやってみたのですが、 Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, webmaster and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. と出てしまいました。 せっかくお答えくださったのに申し訳ありません。
AkitoshiManabe

2019/10/21 08:33 編集

サーバーステータス404(ファイルが見つからない)は気になりますね。 「以前は動いていた」のであれば動くはずですが、新規に設置するのであれば「Miniりすと」( https://www.minicgi.net/cgi2/list.html ) にあるとおりに正しく設定すれば動くと思うのですが…。 チェックポイントは、設置するサーバーがPerl製CGIを利用可能かどうか、Perlインタプリタのパス(掲示板スクリプトの1行目)が正しいかどうか、ファイルの操作権限(パーミッション)、意外と多いです。 また、cgi は専用のディレクトリ(フォルダ)に設置するように指定するレンタルサーバ(プロバイダのホームページスペース)もありますので、このあたりも併せて確認してみてください。 それでダメなら「サーバー運営上の制限」ですので、他の使えそうなサーバを探すしかないです。 まずは、自分でいじってみたPerlの文法を再確認してみましょう。 最後になりますが、趣味の領域なら失敗しながら学んでいく。トライ・アンド・エラーでOKですよ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問