プロが教える店舗&オフィスのセキュリティ対策術

CGIファイルでfavicon.icoでお気に入りアイコンを
乗せようとしましたが、エラーになりました。
記述は以下です。

sub do_read {
print "Content-type: text/html\n";
print "\n";
print "$doctype\n";
print "<HTML>\n";
print "<HEAD>\n";
print "$contenttype\n";
print "<TITLE>$title</TITLE>\n";
print "<LINK REL="SHORTCUT ICON" href="favicon.ico">\n";
print "</HEAD>\n";

::::::::::::::::::::::::::::::::::::::::
print "<LINK REL="SHORTCUT ICON" favicon.ico">\n";

perlではfavicon.icoは使えないのでしょうか?
使えるとすればどのように記述すればよいのでしょうか?

A 回答 (3件)

> perlではfavicon.icoは使えないのでしょうか?


この場合perlはhtmlを出力しているだけなので
htmlでできることは同じhtmlをperlで出力すればできます。
(perlでfavicon.icoを使っているというより、そういうhtmlを出力している。)

今回のエラーは出力する以前の問題だと思います。
たぶんこの行が原因でしょう。
> print "<LINK REL="SHORTCUT ICON" href="favicon.ico">\n";
"(ダブルクォーテーション)から"までが文字列と見なされるので
printで出力する文字列が「"<LINK REL="」でいったん終わってしまっています。

修正は文字列内の"を\でエスケープしてください。
print "<LINK REL=\"SHORTCUT ICON\" href=\"favicon.ico\">\n";

"の変わりに'(シングルクォーテーション)を使う方法もあります。
ただシングルクォーテーション文字列内では\n(改行文字)が使えないですが。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
ズバリその記述方法で解決したかのようでしたが、
別の問題が浮上してしまいました。
CGIサーバー上ではfavicon.icoが表示されないのです。
別のサーバー上(純粋なHTML)では上記のように記述して
表示されています。

PERLでも表示されるはずですよね?

そのCGIを起動させたHTMLが↓です。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<script type="text/javascript">
<!--
image = new Image();image.src = "favicon.ico";
// -->
</script>
<LINK REL="SHORTCUT ICON" href="favicon.ico">

<TITLE>WN</TITLE>
</HEAD>
------------------------------------
<LINK REL="SHORTCUT ICON" href="favicon.ico">
だけではダメだったので、javascriptを使ったり、
favicon.icoのURLを絶対記述させたりもしてみましたが、
ダメでした。内部エラーではなく、faviconが表示
されません。faviconのファイル名も変えたりも
してみました。

使っているブラウザーはIE6.0以上です。
なにか考えられる原因や対策があれば教えてください。

お礼日時:2006/05/21 15:51

試しに以下のようなperlをcgi経由で呼び出してみましたが、


ちゃんとfaviconは表示されていました。
(favicon.icoはcgiファイルと同一ディレクトリ)

うまくいかない原因は、
favicon.icoのアクセス権(パーミッション)が適切でない
ということが考えられますが、それ以外だとちょっと分からないです。

--------<ここから>--------
#!/usr/bin/perl
print "Content-type: text/html\n";
print "\n";
print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<META HTTP-EQUIV=\"Content-type\" CONTENT=\"text/html; charset=Shift_JIS\">\n";
print "<LINK REL=\"SHORTCUT ICON\" href=\"favicon.ico\">\n";
print "\n";
print "<TITLE>AAA</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "BBB\n";
print "</BODY>\n";
print "</HTML>\n";
--------<ここまで>--------
    • good
    • 0
この回答へのお礼

回答ありがとうございました。お礼おそくなりました。こんなにできないとサーバーが原因のようです。ぷらら。ほかのCGIサーバーじゃない方はちゃんとできているのですが、CGIサーバーはfaviconを受け付けないのでしょうか?サポートに聞いたところそんなことはないらしいのですが・・・。まだできていませんが一旦締め切らせて頂きます。また質問する機会があると思うのでよろしくお願いします。

お礼日時:2006/05/30 18:05

>CGIサーバー上ではfavicon.icoが表示されないのです。


>別のサーバー上(純粋なHTML)では上記のように記述して表示されています。

cgi用とhtml用が分かれている設定のサーバーでは、cgiで出力したページに表示させる画像はhtml用サーバー側に置いて、http:からhtml用サーバー名を指定する必要があります。
favicon.icoといえども同じです。
    • good
    • 0
この回答へのお礼

お礼おそくなりました。回答ありがとうございました。やはりルートディレクトリとかの問題みたいですね。まだできていません。サーバーを今後移す予定なのでそれでもできなかったら再度質問させていただきます。

お礼日時:2006/05/30 18:06

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