• ベストアンサー

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ですかね(?) ここまで調べてみましたが、対処方法がわかりません。 どなたか、どこを、どう直せば良いのか、 出来るだけ詳しくご教授願えないでしょうか? 宜しくお願いします。

  • Perl
  • 回答数7
  • ありがとう数5

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

  • ベストアンサー
  • nak205
  • ベストアンサー率60% (40/66)
回答No.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以下に置いたほうが良いとおもうんですけど。。。

jyamato
質問者

お礼

ご回答有難うございました。 やはりそうですか。 htdocs以下に画像を置く事にします。

その他の回答 (6)

  • nak205
  • ベストアンサー率60% (40/66)
回答No.6

ごめんなさい。さっきの回答で、画像リンクがまちがってました。 正しくは: <image src=/test.gif> です。

jyamato
質問者

お礼

ご回答ありがとうございます。 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)
回答No.5

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

  • you-m
  • ベストアンサー率58% (190/327)
回答No.4

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

jyamato
質問者

お礼

sinxさん、you-mさんご回答有難う御座います。 (すみません、一緒に回答のお礼をしてしまって…) 画像名などは、単なるタイプミスでした。 呼び出すパスはあっています。 すみません(・_・;)

  • sinx
  • ベストアンサー率29% (14/47)
回答No.3

少なくとも、 <image src="test.gif">ではなくて、 <IMG src="./image/test.gif"> だと思いますが。

  • Spur
  • ベストアンサー率25% (453/1783)
回答No.2

「test.gif」をコールして、「test.jpg」のエラーになる原因は分かりませんが、CGIソースのどこかに「test.gif」を間違えて、「test.jpg」とかいてあるのだと思います。 configの中で、「cgi-bin」フォルダの設定が違っているんだと思います。 つまり、cgi専用エリアにしてあるのだと思います。 もしかしたら、ドキュメントルート自体の設定も違っていませんか? cgi-binの下にHTMLファイルや画像ファイルもいれるなら、configでそのように宣言しておかなければ認識しません。 その場合は、「/cgi-bin/」にはcgiだけを入れ、画像は「/images/」に入れて、絶対アドレスで指定します。

jyamato
質問者

補足

ご回答有難うございます。 Document Root は設定した時のまま以下の様にしています。  DocumentRoot "c:/Apache/htdocs" ここも、書き換える必要があるのでしょうか? あるのでしたら具体的にどのように変えるのでしょうか? すみません。宜しくお願いします。

  • noopee
  • ベストアンサー率38% (114/297)
回答No.1

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

jyamato
質問者

補足

ご回答有難う御座います。 >他のものはどうなっているのでしょうか? 他のものと言いますと…? >単純なHTML等で同じ画像を呼び出した場合 普通のHTMLから、画像を呼んでも、同じ結果になってしまいます。 やはり、画像ファイルをCGIとみているようです。

関連するQ&A

  • 絶対パスでしか画像が表示されません。

    自分の端末(windows2000)にApacheをインストールしてCGIを作製しています。 IEでCGI(http://localhost/cgi-bin/xxx/xxx.cgi)を起動して 画像(c:/apache group/apache/cgi-bin/xxx/icon/xxx.gif)を 表示させたいのですが、<img src='★'>タグの★部分が 絶対パス(c:/apache group/apache/cgi-bin/xxx/icon/xxx.gif)だと 表示されますが、相対パスなど他だと表示されません。 どのような形式にしたら表示できるでしょうか? それともc:/apache group/apache/cgi-bin/配下にある画像は 表示できないのでしょうか? ※画像をIEでURL(http://localhost/cgi-bin/xxx/icon/xxx.gif)で  表示させようとしたところできませんでした。 ・IE確認用URL  http://localhost/cgi-bin/xxx/xxx.cgi ・CGIファイル  c:/apache group/apache/cgi-bin/xxx/xxx.cgi ・画像ファイル  c:/apache group/apache/cgi-bin/xxx/icon/xxx.gif ・Apacheのドキュメントルート  c:/apache group/apache/htdocs

    • ベストアンサー
    • HTML
  • cgi(perl)でパラメータが渡せない

    以下のプログラムでnum=9が伝わらないので、ミスをご指摘ください。 グラフィカルなアクセスカウンタを表示させようとしていますが うまくいかないのでテキストモードでデバッグしています。 [ /usr/local/apache2/htdocs/gif-view.html ] <html> <head> <meta http-equiv="Content-type:" content="text/html; charset=UTF-8"> <title>gif-view</title> </head> <body> <iframe src="/cgi-bin/gif-test.cgi?num=9"></iframe> <!-- <img src="/cgi-bin/gif-test.cgi?0" width=50 height=50> --> </body> </html> [ /usr/local/apache2/cgi-bin/gif-view.cgi ] permission は 755 にしています。 #!/usr/bin/perl print "Content-Type: text/plain;\n\n"; print "gif-test.cgi\n"; $prm0 = @ARGV[0]; if($prm0 = "") { print "Param is exist\n"; } else { print "Param is empty\n"; 実行結果として gif-test.cgi Param is empty となります。 httpd.conf で Script Alias /cgi-bin/ "/usr/local/apache2/cgi-bin/" を有効にしています。

    • ベストアンサー
    • Perl
  • htmlで画像が表示されない

    CGIを勉強し始めた者です。 手始めにCGIを使わずに画像表示をさせたところ早速つまづきました。 アドバイスお願いします。 vine linux 6.3 に apache2.4をソースからインストールしました。 /usr/local/apache2/htdocs に以下の cgi-test.html を置きました。 <html> <head> <meta http-equiv="Content-Type:" content="text/html; charset=UTF-8"> <title>CGI TEST</title> </head> <body> <h3>CGI TEST</h3> <img src="../cgi-bin/a0.gif">&nbsp;<img src="./a1.gif"> </body> </html> パーミッションは 755 root root cgi-test.html /usr/local/apache2/cgi-bin のパーミッションも 755 root root です。 ここに 数字0~9のgif画像を置いています。パーミッションは 644 root root 表示されないので/usr/local/apache2/htdocsにa0.gif, a1.gif を置いてみました。 パーミッションは 同じく 644 root root です。 数字0は表示されませんが、1は表示されます。 なぜ0が表示されないのかお教えください。

    • 締切済み
    • CGI
  • Webでgif画像が表示されません。

    基本的なことだと思いますが、教えてください。 http://www.cgi-down.com/cgi/g_counter.php 上のCGIのカウンターをためしに設置しようとしてみて 画像が×印で表示されてうまくいかず、以下のようにindex.htmlに <img src="../cgi-bin/image/0.gif"> <img src="127.0.0.1/cgi-bin/image/0.gif"> などと実際にGIF画像を表示させてみようとしたのですがそれでもうまくいきません。 場所は以下のようになっていて Linux上のファイラー上ではGIF画像は正しく表示されています。 # ls /var/www/html/index.html /var/www/html/index.html # ls /var/www/cgi-bin/image/ 0.gif 1.gif 2.gif 3.gif 4.gif 5.gif 6.gif 7.gif 8.gif 9.gif Thumbs.db httpd.confでは ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" としておりExecCGIも有効にしています。 よければ教えてください。

  • apacheのScriptAliasの記述について

    どなたか,ご教授いただければ幸いです。 WindowsXp Proでapacheを動かしています。次の設定で,cgiはうまく動作していました。 --- <IfModule alias_module> ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" </IfModule> <Directory \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jpg </Directory> --- これに, http://www.miloweb.net/win/server/apache.html を参考にして,各ユーザーフォルダでcgiが実行できるようにしようと,次のようにしました。 --- <IfModule alias_module> ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" ScriptAlias /cgi/ \"C:/www/users/*/cgi/\" </IfModule> <Directory \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jpg </Directory> <IfModule mod_userdir.c> UserDir \"C:/www/users/*/\" </IfModule> <Directory \"C:/www/users/*/cgi/\"> AllowOverride None Options ExecCGI Order allow,deny Allow from all AddHandler image/gif .gif AddHandler image/jpeg .jp </Directory> --- その結果, http://localhost/~user/ としてuserのホームページにアクセスできるようになったのですが, cgiについては, http://localhost/~user/cgi/・・・ としてもアクセスできません。どなたか原因をご教授いただけないでしょうか。 ScriptAlias /cgi-bin/ \"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\" ScriptAlias /cgi/ \"C:/www/users/*/cgi/\" の行を入れ替えると,\"C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/\"においてあるcgiが実行できなくなります。ScriptAliasは1行目しか有効でないようにも見えるのですが,上に書いた参考URLではできているようなので,戸惑っています。

  • 画像リサイズCGI

    画像をリサイズするCGIを捜しています。 http://www.hidekik.com/rszim/rszim.html 上記のサイトのCGIが理想(縦横変換率%と面積変換率%があること)に近かったのですが、ユーザーがアクセスし画像をアップロードして使用するものではなく、 元々サーバーにある画像のみをリサイズ対象とするCGIを捜しています。 例えば、ですが rszim.cgiが指定したimageフォルダに、複数の画像(test1.gif、test2.jpg...)を入れておき、http://***/rszim.cgi?test1.gifというような、URLに画像名含むアドレスにアクセスすることで、その画像(test1.gif)のみリサイズ可能なものを捜しています。 できれば、フリーが望ましいです。perl・PHP問いません。GDはインストール済みです。

    • 締切済み
    • CGI
  • CGIカウンターの画像が表示されません

    まず、環境はwindows7 32bit xampp v3.2.1 xampp上のコントロールパネル→Admin→CGIのステータスは「開始」となっている。 apacheのv-host.conf上の変更点 <VirtualHost *:80> DocumentRoot "C:/www1" ServerName localhost <Directory "C:/www1"> Options ExecCGI Indexes FollowSymLinks MultiViews AddOutputFilter INCLUDES .html AddType text/html .shtml Order allow,deny Allow from all AddHandler image/gif .gif        AddHandler image/jpeg .jpeg .jpg .jpe  AddHandler image/png .png         AddHandler text/html .html .htm     Require all granted </Directory> </VirtualHost> とした。 http://www.kent-web.com/count/daycount.html 上記のサイトのDAY COUNTERをwindows7 cドライブ直下に以下の様に設定した。 www1/ +- index.html ... ここにカウンタを設置するものとする | |         累計カウント : <img src="daycount.cgi?gif"> |          昨日カウント : <img src="daycount.cgi?yes"> |          本日カウント : <img src="daycount.cgi?today"> | |          と記述 | +--daycount / daycount.cgi [705] | init.cgi [604] | check.cgi [705] | conv.cgi [705] | | .htaccess(AddType application/x-httpd-cgi .cgiと記述) | | +-- lib / gifcat.pl [604] | magick.pl [604] | +-- data / daycount.dat [606] | today.dat [606] | yes.dat [606] | +-- gif1 / 0.gif ... 9.gif | +-- gif2 / 0.gif ... 9.gif なお、daycount.cgi    check.cgi    conv.cgi    は一行目を#!"C:\xampp\perl\bin\perl.exe"とした。 色々サイトを見てcgi-binフォルダに画像ファイルを入れると画像が見れなくなる事とか apacheではCGIの入ったフォルダに.htaccess(AddType application/x-httpd-cgi .cgiと記述) を入れてやらないと動作しないとかの情報を元に上記の様な設定になったのですが上手くいかないようです。 一応画像もアップしておきました。なにかしらの参考になりましたら… この設定でどこかおかしい所が有ればご指摘願います。

    • ベストアンサー
    • CGI
  • 画像ファイルが崩れる

    Perlで、CGIを作成しています。 GIF画像をCGI経由で表示させようと思っているのですが、なぜか、画像が崩れてしまいます。GIFだけではなく、Jpegでも同じです。しかし、HTMLファイルの <img>タグでそのまま表示させようとすると、きちんと表示します。 どのようにすれば、崩れを抑えられますか? CGIソース---------------------- #!/usr/local/bin/perl $imgsrc="number/0.gif"; print "Content-type:image/gif\n\n"; open(IMG,$imgsrc); binmode(IMG); print <IMG>; close(IMG); -----------------------------EOF HTML---------------------------- <html> <head> </head> <body> <img src="cgi/image.cgi" width="28" hegiht="31"> </body> </html> ------------------------------EOF gif画像は、 http://www.akikobrand.com/icon/img/10/6/0.gif を使わせていただきました。(個人的な使用です)

    • ベストアンサー
    • CGI
  • UTF-8でソースを書くとエラーになる

    WinXPにApache2.0とperl5.8を入れて動作させているのですが、perlCGIをUTF-8で書くと500エラーになり表示することができません。 該当のソースは #!/usr/bin/perl package HTML; sub HEADER{ print "Content-type: text/html\n\n"; print << " -----END-----"; <!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf8"> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <title>Test Program</title></head> <body>\n -----END----- } sub FOOTER{ print "</body></html>"; } &HTML::HEADER; print"テスト"; &HTML::FOOTER; 上と同じものをsjisで保存すると、こちらは正常に動作します。打って変わってこれをUTF-8で保存するとエラーが起こってしまいます。 error.logには C:/Apache2/htdocs/script/base.pl is not executable; ensure interpreted scripts have "#!" first line (9)Bad file descriptor: don't know how to spawn child process: C:/Apache2/htdocs/script/base.pl と記録されていて、これを頼りにググってみましたが有効そうな情報を見つけられませんでしたので、どうか原因と解決策を教えてください。

    • ベストアンサー
    • Perl
  • convert

    ページを読み込んだときに、Image magickをつかって、epsファイルをgifファイルに変換するようにしたいのですが、変換出来ません。 #!/usr/bin/perl print "Content-type: text/plain", "?n?n"; $file1 = "/tmp/test.eps"; $file2 = "/tmp/test.gif"; system ("/usr/local/bin/convert $file1 $file2"); print"ok"; 変換前のファイルをjpgやgif形式、変換後のファイルをepsやjpg形式などにすると、変換出来ます。 また、コマンドラインからconvert test.eps test.gifとしても変換出来ます。 つまり、このcgiプログラムをつかってeps形式のファイルを変換しようとしたときにだけ、目的のファイルが出来ません(> <)どうしてなのでしょうか???

    • ベストアンサー
    • CGI

専門家に質問してみよう