OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

Perlと画像について

  • すぐに回答を!
  • 質問No.236031
  • 閲覧数230
  • ありがとう数5
  • 気になる数0
  • 回答数7
  • コメント数0

お礼率 82% (58/70)

やまとです。

CGIから、画像を呼び出しています。
 CGIファイル:Apache/cgi-bin/test.cgi
 画像ファイル:Apache/cgi-bin/image/test.gif
 test.cgiでの画像呼出部分:<image src=./test.gif>
しかし、画像が出てきません。なぜでしょう?
自分なりに調べてみましたが、大分原因が分かってきました。

error.log見てみると、
c:/apache/cgi-bin/test.jpg is not executable; ensure interpreted scripts have "#!" first line
couldn't spawn child process: c:/apache/cgi-bin/top_image.jpg
と言うエラーでした。
どうやら、画像ファイルをCGIスクリプトとして見てしまっているようです。
(↑考え合ってますよね)
おそらく、httpd.confがおかしい(?)Aliaseですかね(?)

ここまで調べてみましたが、対処方法がわかりません。
どなたか、どこを、どう直せば良いのか、
出来るだけ詳しくご教授願えないでしょうか?

宜しくお願いします。
通報する
  • 回答数7
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.7
レベル9

ベストアンサー率 60% (40/66)

> CGIファイル:c\:apache/cgi-bin/test_dir/test.cgi
> 画像ファイル:c\:apache/cgi-bin/test_dir/image/test_img.gif
>(CGIの)画像呼び出し部分:<image src=./image/test_img.gif>
>以上の様に呼び出すことは出来ないでしょうか?

通常できません。Apacheはhttpd.confのDocumentRootで指定されている以外のディレクトリからファイルをブラウザに返せないんです。

CGIも同様ScriptAliasで指定したディレクトリ以外に置かれたファイルは実行できないし、逆にブラウザからリクエストされると、そこに置かれたファイルは何でも実行しようと試みます。

ただ、DocumentRootに置いたcgiファイルを実行できるような設定はあります。
# If you want to use server side includes, or CGI outside
# ScriptAliased directories, uncomment the following lines.
#
# To use CGI scripts:
#
AddHandler cgi-script .cgi
のようにAddHandlerで始まる行のコメントをると、cgiファイルc:/Apache/htdocsいかで実行できるようになるはずです。

もう一つは裏技なんですが、画像ファイルを
c\:apache/cgi-bin/test_dir/image/
に置いて、
c:/Apache/htdocs/test_dir/
にc\:apache/cgi-bin/test_dir/image/のショートカットを置きます。(UNIXではシンボリックリンク)
画像へのリンクは<image src=/test_dir/image/test_img.gif>
もちろん、ショートカットをc:/Apache/htdocs/直下においても構いません。
そのときは<image src=/image/test_img.gif>
となります。

ややこしいですよね。やっぱりhtdoc以下に置いたほうが良いとおもうんですけど。。。
お礼コメント
jyamato

お礼率 82% (58/70)

ご回答有難うございました。

やはりそうですか。
htdocs以下に画像を置く事にします。
投稿日時 - 2002-03-18 10:46:27
-PR-
-PR-

その他の回答 (全6件)

  • 回答No.2
レベル13

ベストアンサー率 25% (453/1783)

「test.gif」をコールして、「test.jpg」のエラーになる原因は分かりませんが、CGIソースのどこかに「test.gif」を間違えて、「test.jpg」とかいてあるのだと思います。 configの中で、「cgi-bin」フォルダの設定が違っているんだと思います。 つまり、cgi専用エリアにしてあるのだと思います。 もしかしたら、ドキュメントルート自体の設定も違っていませんか? ...続きを読む
「test.gif」をコールして、「test.jpg」のエラーになる原因は分かりませんが、CGIソースのどこかに「test.gif」を間違えて、「test.jpg」とかいてあるのだと思います。

configの中で、「cgi-bin」フォルダの設定が違っているんだと思います。
つまり、cgi専用エリアにしてあるのだと思います。

もしかしたら、ドキュメントルート自体の設定も違っていませんか?
cgi-binの下にHTMLファイルや画像ファイルもいれるなら、configでそのように宣言しておかなければ認識しません。
その場合は、「/cgi-bin/」にはcgiだけを入れ、画像は「/images/」に入れて、絶対アドレスで指定します。
補足コメント
jyamato

お礼率 82% (58/70)

ご回答有難うございます。

Document Root は設定した時のまま以下の様にしています。
 DocumentRoot "c:/Apache/htdocs"
ここも、書き換える必要があるのでしょうか?
あるのでしたら具体的にどのように変えるのでしょうか?
すみません。宜しくお願いします。
投稿日時 - 2002-03-16 14:53:33


  • 回答No.1
レベル11

ベストアンサー率 38% (114/297)

こんにちは。 >画像ファイルをCGIスクリプトとして見てしまっているようです。 ということですが、どのように呼び出されているのでしょうか?? 最終的にHTMLで表示させるだけなら、画像のファイル名を取得するだけでよい、と思うのですが。 もしかしたら/cgi-bin/下のディレクトリにあるため、そのように認識されてしまっているのかもしれません。 >httpd.confがおかしい(?) ...続きを読む
こんにちは。

>画像ファイルをCGIスクリプトとして見てしまっているようです。
ということですが、どのように呼び出されているのでしょうか??
最終的にHTMLで表示させるだけなら、画像のファイル名を取得するだけでよい、と思うのですが。
もしかしたら/cgi-bin/下のディレクトリにあるため、そのように認識されてしまっているのかもしれません。

>httpd.confがおかしい(?)
そのような設定にすることも可能ですが、他のものはどうなっているのでしょうか?
単純なHTML等で同じ画像を呼び出した場合はどうなりますか??
補足コメント
jyamato

お礼率 82% (58/70)

ご回答有難う御座います。

>他のものはどうなっているのでしょうか?
他のものと言いますと…?

>単純なHTML等で同じ画像を呼び出した場合
普通のHTMLから、画像を呼んでも、同じ結果になってしまいます。
やはり、画像ファイルをCGIとみているようです。
投稿日時 - 2002-03-16 14:57:42
  • 回答No.3
レベル8

ベストアンサー率 29% (14/47)

少なくとも、 <image src="test.gif">ではなくて、 <IMG src="./image/test.gif"> だと思いますが。
少なくとも、
<image src="test.gif">ではなくて、
<IMG src="./image/test.gif">
だと思いますが。
  • 回答No.4
レベル11

ベストアンサー率 58% (190/327)

sinxさんに1票。 提示したフォルダ構成が正しいとすれば、呼び出すパスが間違ってる時点で、正しいトラブルシューティングは不可能です。 ...続きを読む
sinxさんに1票。
提示したフォルダ構成が正しいとすれば、呼び出すパスが間違ってる時点で、正しいトラブルシューティングは不可能です。
お礼コメント
jyamato

お礼率 82% (58/70)

sinxさん、you-mさんご回答有難う御座います。
(すみません、一緒に回答のお礼をしてしまって…)

画像名などは、単なるタイプミスでした。
呼び出すパスはあっています。
すみません(・_・;)
投稿日時 - 2002-03-16 14:00:52
  • 回答No.5
レベル9

ベストアンサー率 60% (40/66)

画像ファイルやhtmlファイルを/cgi-bin/以下に置くと正しく表示できません。 例えば: c:/Apache/htdocs/test.gif に置いて、 <image src=test.gif> にすれば表示できます。 もしどうしてもcgi-bin以下に画像を置きたい場合は、面倒ですが、perlで画像ファイルをオープンして、それを1行づつprint文でブラウザに返す方法 ...続きを読む
画像ファイルやhtmlファイルを/cgi-bin/以下に置くと正しく表示できません。
例えば:
c:/Apache/htdocs/test.gif
に置いて、
<image src=test.gif>
にすれば表示できます。

もしどうしてもcgi-bin以下に画像を置きたい場合は、面倒ですが、perlで画像ファイルをオープンして、それを1行づつprint文でブラウザに返す方法があります。めんどいので、htdocs以下にいれて、srcのパスをサイトルートの/から始めたほうが良いですよ。
  • 回答No.6
レベル9

ベストアンサー率 60% (40/66)

ごめんなさい。さっきの回答で、画像リンクがまちがってました。 正しくは: <image src=/test.gif> です。 ...続きを読む
ごめんなさい。さっきの回答で、画像リンクがまちがってました。
正しくは:
<image src=/test.gif>
です。
お礼コメント
jyamato

お礼率 82% (58/70)

ご回答ありがとうございます。

nak205さんの教えて頂いた方法で画像が表示されました。
では、
 CGIファイル:c\:apache/cgi-bin/test_dir/test.cgi
 画像ファイル:c\:apache/cgi-bin/test_dir/image/test_img.gif
(CGIの)画像呼び出し部分:<image src=./image/test_img.gif>
以上の様に呼び出すことは出来ないでしょうか?

この方法ですと、画像ファイルの管理がしやすいので…
宜しくお願いします。
投稿日時 - 2002-03-16 16:37:11
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ