- ベストアンサー
CGIのforeach文がうまく動かない原因を教えてください
- CGIを作成していてforeach文のところを通ってくれません。原因が不明なのですが、おかしいことがあれば教えてください。
- $entrycgi、$Location、$imgVote、$votefileなど、変数の初期値に問題があるかもしれません。
- また、フォームのACTIONやMETHOD属性、ファイルのオープンやクローズなども確認してください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> Permission denied これは、そのファイルに対するアクセス権限がない、というエラーです。 > $votefileの属性は755 755 ということは、そのファイルの所有者以外は書き込みができない、という事です。 たいていのサーバではセキュリティなどの問題から、CGIの実行ユーザは nobody などになっていたりするので、$votefile を第三者権限で操作することになるわけです。 つまり、$votefile に対しては書き込みができない、という事です。 しかし、 > open(FILE, "+<$votefile"); では、+< によって書き込みもできるものとしてオープンしようとしていますから、ファイルを開かせてもらえず、open が失敗するのです。 ぱっと見では書込み操作はしていませんから、+< ではなく < とすれば良さそうです。 もし書き込みもする予定なら、$votefile のパーミッションを 777 にしてください。
その他の回答 (3)
- wolv
- ベストアンサー率37% (376/1001)
perlはそんなに詳しくないのではずしてるかもしれませんが、 print "<TABLE><TR><TD><IMG SRC=\"$Location."/top.gif\"></TD></TR></TABLE>\n"; この行「"」の対応がおかしくないですか?
補足
ありがとうございます。 確かにそうですね。 でもこれはすでに修正ずみでしたがやはり<FILE>の読み込みがされていないようでした。
- leaz024
- ベストアンサー率75% (398/526)
> foreach文のところを通ってくれません。 foreach の中が実行されていないことを、どのように確認しましたか? よくあるのは、ファイルパスの間違いにより、ファイルが読まれていないことです。 open の部分を if (! open(FILE, "+<$votefile")) { print $! } else { @output = <FILE>; close(FILE); } とし、確認してみてください。
補足
ありがとうございます。 教えていただいたように書いて試してみたのですが Permission denied というようなエラーがでました。 これはどういったことなのでしょうか? $votefileの属性は755、$entrycgiは777です。 よろしくお願いします。
- sisya
- ベストアンサー率39% (97/244)
ソースコードをみれば判りますので余計なお世話かもしれませんが、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」のような、配列と同じ名前のスカラー型変数はなるべくやめたほうがいいです。
補足
ありがとうございます。 >>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 が入っています。 よろしくお願いします。
お礼
こんにちは。 ありがとうございます。 パーミッションを777にしたらできました!! 書き込みの操作はしていないので<<と変えてみたのですがそれはむりでした。 でも助かりました。ありがとうございました。