CGIでtxtが読み取れません…

このQ&Aのポイント
  • サーバの中身を引越ししようと有料のサーバにうつしたのものです。このようになっているのですが、txtファイルが読めていないらしく、エラーメッセージの方が出てしまいます。ちゃんと12345.txtというのは存在します。
  • フォルダのパス名とかは修正し大丈夫だと思うのですが、読み取れません。原因、修正個所、追加補足などありましたら、よろしくお願いします。
  • http://xxx.xxx/cgi-bin/atc/input.cgi?12345 ではファイルを読み取ることができる一方、http://xxx.xxx/cgi-bin/atc/frame.cgi?12345 では読み取ることができません。txtデータを読み取れていない可能性があると考えられます。
回答を見る
  • ベストアンサー

CGIでtxtが読み取れません…

--------------frame.cgi----------------------- #!/usr/bin/perl # フォームからのデータを読み込む $ID1 = '12345'; $path = 'http://xxx.xxx/cgi-bin/atc/user/'; $txt = '.txt'; $FileName = $path.$ID1.$txt; print "Content-type: text/html\n"; print "\n"; if (-f $FileName){ print <<"DISP_SET"; <HTML> <frameset rows="80,*" cols="*" framespacing="1"" frameborder="yes" border="1" bordercolor="#000000"> <frame src="input.cgi?$ID1" name="top" scrolling="no" noresize> <frame src="http://xxx.xxx/nodata.htm" name="mainF"> </frameset> </HTML> DISP_SET } else{ print <<"DISP_SET"; <HTML> <BR> 指定された$ID1はありません。<BR> 新規発行をするか、IDの確認をしてください。<BR> <BR><BR> <a href="javascript:history.back();">一つ前のページへ戻る</a> </HTML> DISP_SET } exit; ----------------------------------------- サーバの中身を引越ししようと有料のサーバにうつしたのものです。 このようになっているのですが、txtファイルが読めていないらしく、エラーメッセージの方が出てしまいます。 ちゃんと12345.txtというのは存在します。 フォルダのパス名とかは修正し大丈夫だと思うのですが、読み取れません… http://xxx.xxx/cgi-bin/atc/input.cgi?12345 読み取れる http://xxx.xxx/cgi-bin/atc/frame.cgi?12345 読み取れない なので、txtデータを読み取れていないと思いました。 原因、修正個所、追加補足などありましたら、よろしくお願いします。

  • CGI
  • 回答数2
  • ありがとう数1

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

  • ベストアンサー
  • danmarino
  • ベストアンサー率63% (26/41)
回答No.2

ソースを見落としていました。 $path = '​http://xxx.xxx/cgi-bin/atc/user/'; とありますが、ここをそのサーバーでの絶対パスに書き換えたらどうでしょうか? 例えば $rootdir= $ENV{DOCUMENT_ROOT}; $path = "$rootdir/…"; といったように。 また、cgiの設置ディレクトリと同じディレクトリ内にファイルがあるのなら $path = "./…"; でいかれると思います。

その他の回答 (1)

  • danmarino
  • ベストアンサー率63% (26/41)
回答No.1

if (-f $FileName) の部分はファイルの存在確認をしようとしているのでしょうか? もしそうだとしたら if (-e $FileName) かな

pekingenjin
質問者

お礼

>if (-f $FileName)の部分はファイルの存在確認をしようとしているのでしょうか? ファイル確認済みです。 if (-e $FileName)でも出来ませんでした… 結局別サーバに載せて二つのサーバで読み込ませています。。

関連するQ&A

  • CGIだとうまくいかない!

    まずは下記ソースをご覧ください。 これを実行させると上下2のフレームができまして、上フレームにある「Jump C」と いうリンクをクリックすると、下フレームが「ccccccccc」というところまでジャンプ するように作りました。 まずは実験版としてCGIでなくPC上でHTMLファイルを作成(main.cgiがmain.htmになる) しました。その時はうまく下フレームの「cccccccc」までジャンプしたのですが、これを CGIに作り直して実行させたところ、何も動作しないままでした。 CGIでもHTML上同様の動きをさせるにはどのようにしたらよろしいでしょうか? どなたかご存知の方いましたら、ご鞭撻のほどお願い致します。 -------------- main.cgi ------------------------------------- <HTML> <HEAD><TITLE>フレームテスト</TITLE></HEAD> <FRAMESET ROWS="20%,*"> <FRAME SRC="top.cgi" NAME="FRAME2"> <FRAME SRC="btm.cgi" NAME="FRAME3"> </FRAMESET> </HTML> -------------- top.cgi ------------------------------------- <HTML> <head> </head> <body> <a href="right_btm.cgi#c" target="FRAME3">Jump C</a> </body> </html> -------------- btm.cgi ------------------------------------- <HTML> <head> </head> <body> <A NAME="#a">aaaaaaaaa<br><br><br><br><br><br><br><br><br> <A NAME="#b">bbbbbbbbb<br><br><br><br><br><br><br><br><br> <A NAME="#c">ccccccccc<br><br><br><br><br><br><br><br><br> <A NAME="#d">ddddddddddd<br><br><br><br><br><br><br><br><br> </body> </html> ------------------------------------------------------------ このCGIを実行すると、

  • パスワード暗号化CGI

    以下のようなパスワード暗号化CGIを作りました。 #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; $salt = "AB"; open(IN,"pass.txt"); while(<IN>){ $pass = $_; $encpass = crypt($pass, $salt); print "$pass:$encpass<br>"; } close(IN); print "</BODY></HTML>\n"; exit; pass.txtは 1234[改行] 5678[改行] 9012[EOF] のようになっています。 一応暗号化されるのですが、出力結果を見ると 1234 :ABn4qpcmwMnAM のように暗号化前のパスにスペースが入っているんです。 ソースは 1234 :ABn4qpcmwMnAM<br>5678 :AB/ptyBM.rnKY<br>0000:ABiAqp1qc1hMQ<br> となっていて、pass.txtの改行が問題なんだと思いました。 そのためか、暗号化がうまくいきません。 何かこの改行を取り除く良い方法はないでしょうか。

    • ベストアンサー
    • CGI
  • フォームからCGIを起動できない

    こんばんは。 WebサーバApacheでCGIを作成しています。 DocumentRootが初期設定/var/www/html/で、その下にindex.htmlを作成しました。 次にcgiのディレクトリが初期設定の/var/www/cgi-bin/で、その下にtest.cgiを作成しました。 そして、test.cgiのパーミッションを-rwxr-xr-xにしてからApacheを起動しました。 別マシンのブラウザからhttp://xxx.xxx.xxx.xxx/index.htmlでアクセスし、フォームのテキストボックスに「abc」と入力して送信ボタンを押しましたが、404エラーになってしまいます。 (アドレスバーには「http://xxx.xxx.xxx.xxx/test.cgi?NAME=abc」と表示) ブラウザのアドレスバーに直接「http://xxx.xxx.xxx.xxx/cgi-bin/test.cgi?NAME=abc」とすると正常にアクセスできます。 ドキュメントルート配下にあるindex.htmlからドキュメントルート外にあるCGIのディレクトリ(ScriptAlias /cgi/bin/ "/var/www/cgi-bin/")を参照するにはどのようにしたらよいのでしょうか? ----------index.html---------------- <HTML> <HEAD><TITLE>フォーム</TITLE></HEAD> <BODY> <FORM ACTION="../cgi-bin/test.cgi" METHOD="GET">名前 <INPUT TYPE="TEXT" NAME="NAME"><BR> <INPUT TYPE="SUBMIT" VALUE="送信"> </FORM> </BODY> </HTML> ----------index.html---------------- ----------test.cgi------------------ #!/usr/bin/perl $str = $ENV{"QUERY_STRING"}; print << "EOF"; Content-type: text/html <HTML> <HEAD><TITLE>TESTCGI</TITLE></HEAD> <BODY>$str</BODY> </HTML> EOF ----------test.cgi------------------

    • ベストアンサー
    • CGI
  • CGI

    cgiの勉強をしているのですがシバンの設定で困っています。 ①実行パス(絶対パス) /virtual/アカウント名(もしくはID)/usr/local/bin/python3 と書いてありました。 https://www.value-server.com/spec/ 実際ドメイン直下のディレクトリは動いています。 しかし ドメイン/pro/sample.py は動いてくれません。500エラーです。パーミッションは755にしています。 ②pythonで実行したcgiは print("<html>") print("<head>") print("<title>Hello world !</title>")… こんな感じでprintの嵐なのですが、 使い方はあっているのでしょうか?

    • ベストアンサー
    • CGI
  • CGIでファイルが読み込めない

    CGI初心者です。 (osはlinuxです。) #!/usr/local/bin/perl use strict; use CGI; my $file=new CGI; open(DATA,"/home/data.txt"); $file=<DATA>; close=(DATA); print "Content-type: text/html\n\n"; print "data=$file"; このスクリプトで、/home/data.txt(フルパスです)に書かれているデータを1行だけをブラウザで表示させたいのですが、表示できません。 どこがおかしいのか教えてください。 ちなみにdata.txtには実際に「abc」という文字1行しか入れていません。

    • 締切済み
    • CGI
  • CGIで二つの仕事をしたい

    464487で質問したOtanoshikeです。 メール送信CGIは_mer_さんに教えて頂いたように直したら、無事動くようになりました。 今度は、このCGIの中で、メール送信後にファイル転送をしようとしています。 一応動いてはいるようなのですが、最後の確認ページが出ません。 どこが悪いのでしょうか?恐らくはまた基本的なことを無視しているのでしょうね。 よろしくお願いいたします。 (a.cgi) #!/usr/bin/perl require '../mimew.pl'; require '../jcode.pl'; $sendmail = "/var/qmail/bin/sendmail"; $master_id = "ho\@hoge.net"; $msg="メッセージ"; &jcode'convert(*msg,'jis'); open (ML,"| $sendmail $master_id"); print ML $msg; close(ML); $filename=$ARGV[0]; $file="/~/~/$filename"; $filetype='x-exe'; print "Content-Disposition:attachment;filename=\"$filename\"\n"; print "Content-type:application/$filetype\n\n"; open(FILE,"$file"); while(<FILE>){ print "$_"; } close FILE; print "Content-type: text/html\n\n"; print "<html><head>\n"; print "</head>\n"; print "<body>sent.\n"; print "</body></html>\n"; exit;

    • ベストアンサー
    • CGI
  • できる人がいたらお願いします。

    大切なところだけ下記に書き込みました。 今の所ここまでできていて後少しと言う所だと思うのですが。下記の※の部分が邪魔をしてどうしてもframe1.htmlのボタンが無効化してしまいます。 frame2.htmlの※の所を抜かせばいいじゃないかと思うのですが、frame2.htmlは加工できません。 なので、javaでもperlでもなんでもいいので。 frame2.htmlだけ変えないでtextareaに文章を入れたいです。 ヨロシクお願いします。 --------index.html------- <!DOCUMENT HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN""http://www.w3.org/TR/html4/loose.dtd"> <HTML> <head> <title>frames1.0</title> </head> <frameset cols="50%,50%"> <frame src="frame1.html" name="frame1"> <frame src="frame2.html" name="frame2"> </frameset> </html> --------frame1.html------- <HTML> <body> <form> <input type="button" value="送信" onclick="window.parent.frame2.document.getElementById('txt').value='文章1';window.parent.frame2.document.getElementById('txt1').value='文章2';"> </form> </body> </html> --------frame2.html------- <html> <body> <input name='txt' type='hidden' value=''> ※ <input name='txt1' type='hidden' value=''> ※ <center> 文章<BR> <textarea rows=2 cols=38 name=txt></textarea><BR> 文章<BR> <textarea rows=2 cols=38 name=txt1></textarea><BR> </center> <body> <html>

  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • CGIの中で出力するテキスト内容をhtml側で表示する方法。

    htmlからCGIファイルを呼び出すと、そのCGIは動作はしているようですが、 print等でhtml形式で文字出力させている部分は、ブラウザ内に表示されません。 今やって失敗している方法です。どのようにするのが良いか教えて頂ければ幸いです。 1.CGIスクリプト(Perlで記述)を用意... test.cgi ----------------------------------------------------- #!/usr/bin/perl print "Content-type:text/html; charset=shift_jis\n\n"; print <<__EOD; <html lang="ja"> <head> <title>TITLE</title> </head> <div align=center> <a>テスト1</a><br> <a>テスト2</a><br> </div><br> </body></html> __EOD open(OUT,">a.tmp") || die "$!"; print OUT "aaaaa\n"; close(OUT); ----------------------------------------------------- 2.htmlを用意 ... test.html ----------------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>HTML TEST</title> </head> <body> <script src="http://xxx/CGI/test.cgi"></script> </body> </html> ----------------------------------------------------- 上記のとき、動作として、 ◆ブラウザからCGIのパス(http://svr1/CGI/test.cgi)に直接アクセスした場合、 「テスト1」「テスト2」の文字が表示され、a.tmpファイルも作成されている。 ◆ブラウザからhtml(http://svr1/test.html)にアクセスした場合、ブラウザ画面は何も表示されない (真っ白となる)が、a.tmpファイルは作成されている。 のようになってしまいます。 後者のようにして、htmlからCGIファイルを呼び出すと、そのCGIは動作はしているようですが、 print等でhtml形式で文字出力させている部分は、ブラウザ内に表示されません。 以上、よろしくお願い致します。

    • ベストアンサー
    • CGI
  • CGI..pmを使っての画像のアップロードについての質問です。

    お世話になります画像ファイルをサーバーにアップロードしたいのですが、巧くいきません。以下のコードを実行しますと O.K. File(C:\Documents and Settings\Administrator\My Documents\My Pictures\mozi_g0.gif) was uploaded as /tmp/upload_1111735699_26448 と表示されますが、これで本当に画像ファイルがアップされているのでしょうか? 私見だとサーバー側にtmpというフォルダーに画像ファイルがアップロードされるものと思い /cgi-bin/upload.cgi と同じ所にtmpというフォルダーを作りパーミッションは755にしましたが アップロードをしても空フォルダーのままです、ローカルのフォルダーの画像をサーバー側に保存する方法を御教授お願い出来ませんでしょうか html側のコード <html> <body> <form action="/cgi-bin/upload.cgi" method="POST" ENCTYPE="multipart/form-data"> file <input type="file" name="uploadFile"><br> <hr> <input type="submit" value="OK"> </form> </body> </html> ファイルアップロード本体(upload.cgi) #!/usr/bin/perl use CGI; my($form) = new CGI; print $form->header("text/html"); my($filename) = $form->param('uploadFile'); $uniqid = time . "_" . $$; $newfile = "upload_$uniqid"; # ファイルの内容を表示する。 # このように、$filename をファイルハンドルのように使うこともできる。 #while(<$filename>){ # print $_ . "<br>\n"; #} # ファイルを保存する。 open (OUTFILE,">/tmp/$newfile") or die "Can't make serverside file!\n"; while ($bytesread = read($filename,$buffer,1024)) { print OUTFILE $buffer; } print "O.K. File($filename) was uploaded as /tmp/upload_$uniqid<br>\n";

    • ベストアンサー
    • Perl

専門家に質問してみよう