• ベストアンサー

favicon.ico

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は使えないのでしょうか? 使えるとすればどのように記述すればよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.2

試しに以下のような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"; --------<ここまで>--------

aoitorigairu
質問者

お礼

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

その他の回答 (2)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

>CGIサーバー上ではfavicon.icoが表示されないのです。 >別のサーバー上(純粋なHTML)では上記のように記述して表示されています。 cgi用とhtml用が分かれている設定のサーバーでは、cgiで出力したページに表示させる画像はhtml用サーバー側に置いて、http:からhtml用サーバー名を指定する必要があります。 favicon.icoといえども同じです。

aoitorigairu
質問者

お礼

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

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

> 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(改行文字)が使えないですが。

aoitorigairu
質問者

お礼

回答ありがとうございました。 ズバリその記述方法で解決したかのようでしたが、 別の問題が浮上してしまいました。 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以上です。 なにか考えられる原因や対策があれば教えてください。

関連するQ&A

専門家に質問してみよう