• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CGIのforeach文)

CGIのforeach文がうまく動かない原因を教えてください

このQ&Aのポイント
  • CGIを作成していてforeach文のところを通ってくれません。原因が不明なのですが、おかしいことがあれば教えてください。
  • $entrycgi、$Location、$imgVote、$votefileなど、変数の初期値に問題があるかもしれません。
  • また、フォームのACTIONやMETHOD属性、ファイルのオープンやクローズなども確認してください。

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

  • ベストアンサー
  • leaz024
  • ベストアンサー率75% (398/526)
回答No.4

> Permission denied これは、そのファイルに対するアクセス権限がない、というエラーです。 > $votefileの属性は755 755 ということは、そのファイルの所有者以外は書き込みができない、という事です。 たいていのサーバではセキュリティなどの問題から、CGIの実行ユーザは nobody などになっていたりするので、$votefile を第三者権限で操作することになるわけです。 つまり、$votefile に対しては書き込みができない、という事です。 しかし、 > open(FILE, "+<$votefile"); では、+< によって書き込みもできるものとしてオープンしようとしていますから、ファイルを開かせてもらえず、open が失敗するのです。 ぱっと見では書込み操作はしていませんから、+< ではなく < とすれば良さそうです。 もし書き込みもする予定なら、$votefile のパーミッションを 777 にしてください。

jun2249
質問者

お礼

こんにちは。 ありがとうございます。 パーミッションを777にしたらできました!! 書き込みの操作はしていないので<<と変えてみたのですがそれはむりでした。 でも助かりました。ありがとうございました。

その他の回答 (3)

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.3

perlはそんなに詳しくないのではずしてるかもしれませんが、 print "<TABLE><TR><TD><IMG SRC=\"$Location."/top.gif\"></TD></TR></TABLE>\n"; この行「"」の対応がおかしくないですか?

jun2249
質問者

補足

ありがとうございます。 確かにそうですね。 でもこれはすでに修正ずみでしたがやはり<FILE>の読み込みがされていないようでした。

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

> foreach文のところを通ってくれません。 foreach の中が実行されていないことを、どのように確認しましたか? よくあるのは、ファイルパスの間違いにより、ファイルが読まれていないことです。 open の部分を   if (! open(FILE, "+<$votefile")) { print $! }   else {     @output = <FILE>;     close(FILE);   } とし、確認してみてください。

jun2249
質問者

補足

ありがとうございます。 教えていただいたように書いて試してみたのですが Permission denied というようなエラーがでました。 これはどういったことなのでしょうか? $votefileの属性は755、$entrycgiは777です。 よろしくお願いします。

  • sisya
  • ベストアンサー率39% (97/244)
回答No.1

ソースコードをみれば判りますので余計なお世話かもしれませんが、CGIにはC言語で書かれたものもありますので、この場合「perl」と書くべきですね。 >print "<FORM ACTION=\"$entrycgi\" METHOD=\"post\" 「entrycgi」となっていますが「entry.cgi」ではないですか? >@output_sort = sort { $b <=> $a } @output; どのようなデータが入っているのかが判らないのでなんともいえませんが、この行が問題なのではと思います。 後、「@output_sort」の要素を指定する「$output_sort[0]」や、最後の要素を指定する「$#output_sort」と間違え易いので、「$output_sort」のような、配列と同じ名前のスカラー型変数はなるべくやめたほうがいいです。

jun2249
質問者

補足

ありがとうございます。 >>print "<FORM ACTION=\"$entrycgi\" >METHOD=\"post\" 「entrycgi」となっていますが「entry.cgi」ではないですか? $entrycgiのは『entry.cgi』が代入されているため問題はないと思います。 @output(gsvottbl.dat)には 0,aaa,/file01.jpg,01 0,bbb,/file02.jpg,02 0,ccc,/file03.jpg,03 0,ddd,/file04.jpg,04 0,eee,/file05.jpg,05 が入っています。 よろしくお願いします。

関連するQ&A