- ベストアンサー
Perlと画像について
やまとです。 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)
- 専門家の回答
質問者が選んだベストアンサー
> 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以下に置いたほうが良いとおもうんですけど。。。
その他の回答 (6)
- nak205
- ベストアンサー率60% (40/66)
ごめんなさい。さっきの回答で、画像リンクがまちがってました。 正しくは: <image src=/test.gif> です。
お礼
ご回答ありがとうございます。 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> 以上の様に呼び出すことは出来ないでしょうか? この方法ですと、画像ファイルの管理がしやすいので… 宜しくお願いします。
- nak205
- ベストアンサー率60% (40/66)
画像ファイルやhtmlファイルを/cgi-bin/以下に置くと正しく表示できません。 例えば: c:/Apache/htdocs/test.gif に置いて、 <image src=test.gif> にすれば表示できます。 もしどうしてもcgi-bin以下に画像を置きたい場合は、面倒ですが、perlで画像ファイルをオープンして、それを1行づつprint文でブラウザに返す方法があります。めんどいので、htdocs以下にいれて、srcのパスをサイトルートの/から始めたほうが良いですよ。
- you-m
- ベストアンサー率58% (190/327)
sinxさんに1票。 提示したフォルダ構成が正しいとすれば、呼び出すパスが間違ってる時点で、正しいトラブルシューティングは不可能です。
お礼
sinxさん、you-mさんご回答有難う御座います。 (すみません、一緒に回答のお礼をしてしまって…) 画像名などは、単なるタイプミスでした。 呼び出すパスはあっています。 すみません(・_・;)
- sinx
- ベストアンサー率29% (14/47)
少なくとも、 <image src="test.gif">ではなくて、 <IMG src="./image/test.gif"> だと思いますが。
- Spur
- ベストアンサー率25% (453/1783)
「test.gif」をコールして、「test.jpg」のエラーになる原因は分かりませんが、CGIソースのどこかに「test.gif」を間違えて、「test.jpg」とかいてあるのだと思います。 configの中で、「cgi-bin」フォルダの設定が違っているんだと思います。 つまり、cgi専用エリアにしてあるのだと思います。 もしかしたら、ドキュメントルート自体の設定も違っていませんか? cgi-binの下にHTMLファイルや画像ファイルもいれるなら、configでそのように宣言しておかなければ認識しません。 その場合は、「/cgi-bin/」にはcgiだけを入れ、画像は「/images/」に入れて、絶対アドレスで指定します。
補足
ご回答有難うございます。 Document Root は設定した時のまま以下の様にしています。 DocumentRoot "c:/Apache/htdocs" ここも、書き換える必要があるのでしょうか? あるのでしたら具体的にどのように変えるのでしょうか? すみません。宜しくお願いします。
- noopee
- ベストアンサー率38% (114/297)
こんにちは。 >画像ファイルをCGIスクリプトとして見てしまっているようです。 ということですが、どのように呼び出されているのでしょうか?? 最終的にHTMLで表示させるだけなら、画像のファイル名を取得するだけでよい、と思うのですが。 もしかしたら/cgi-bin/下のディレクトリにあるため、そのように認識されてしまっているのかもしれません。 >httpd.confがおかしい(?) そのような設定にすることも可能ですが、他のものはどうなっているのでしょうか? 単純なHTML等で同じ画像を呼び出した場合はどうなりますか??
補足
ご回答有難う御座います。 >他のものはどうなっているのでしょうか? 他のものと言いますと…? >単純なHTML等で同じ画像を呼び出した場合 普通のHTMLから、画像を呼んでも、同じ結果になってしまいます。 やはり、画像ファイルをCGIとみているようです。
お礼
ご回答有難うございました。 やはりそうですか。 htdocs以下に画像を置く事にします。