CGIを作成していてforeach文のところを通ってくれません。原因が不明なのですが下記でおかしいことなどがあったらおしえてください。
お願いします。
$entrycgi = "./touhyou.cgi";
$Location = '../images';
$imgVote = $Location."/click.gif";
$votefile = "./database/vtbl.dat";
sub vote_form{
print "<FORM ACTION=\"$entrycgi\" METHOD=\"post\" NAME=\"Form\">\n";
print "<INPUT TYPE=\"hidden\" NAME=\"proc\" VALUE='entry'>\n";
print "<INPUT TYPE=\"hidden\" NAME=\"Action\">\n";
print "<TABLE><TR><TD><IMG SRC=\"$Location."/top.gif\"></TD></TR></TABLE>\n";
open(FILE, "+<$votefile");
@output = <FILE>;
close(FILE);
print "<TABLE><TR>\n";
$i = 1;
@output_sort = sort { $b <=> $a } @output;
foreach $output_sort(@output_sort){
($COUNT, $NM, $FILENM, $NO) = split(/\,/, $output_sort);
$filename = $Location.$FILENM;
print "<IMG SRC='$filename' HEIGHT=100 WIDTH=100></TD>\n";
if ($i == 5) {
last;
} else {
print "<TD width=\"50\"></TD>\n";
$i++;
}
}
print "</TR></TABLE>\n";
}
No.4ベストアンサー
- 回答日時:
> Permission denied
これは、そのファイルに対するアクセス権限がない、というエラーです。
> $votefileの属性は755
755 ということは、そのファイルの所有者以外は書き込みができない、という事です。
たいていのサーバではセキュリティなどの問題から、CGIの実行ユーザは nobody などになっていたりするので、$votefile を第三者権限で操作することになるわけです。
つまり、$votefile に対しては書き込みができない、という事です。
しかし、
> open(FILE, "+<$votefile");
では、+< によって書き込みもできるものとしてオープンしようとしていますから、ファイルを開かせてもらえず、open が失敗するのです。
ぱっと見では書込み操作はしていませんから、+< ではなく < とすれば良さそうです。
もし書き込みもする予定なら、$votefile のパーミッションを 777 にしてください。
こんにちは。
ありがとうございます。
パーミッションを777にしたらできました!!
書き込みの操作はしていないので<<と変えてみたのですがそれはむりでした。
でも助かりました。ありがとうございました。
No.3
- 回答日時:
perlはそんなに詳しくないのではずしてるかもしれませんが、
print "<TABLE><TR><TD><IMG SRC=\"$Location."/top.gif\"></TD></TR></TABLE>\n";
この行「"」の対応がおかしくないですか?
この回答への補足
ありがとうございます。
確かにそうですね。
でもこれはすでに修正ずみでしたがやはり<FILE>の読み込みがされていないようでした。
No.2
- 回答日時:
> foreach文のところを通ってくれません。
foreach の中が実行されていないことを、どのように確認しましたか?
よくあるのは、ファイルパスの間違いにより、ファイルが読まれていないことです。
open の部分を
if (! open(FILE, "+<$votefile")) { print $! }
else {
@output = <FILE>;
close(FILE);
}
とし、確認してみてください。
この回答への補足
ありがとうございます。
教えていただいたように書いて試してみたのですが
Permission denied
というようなエラーがでました。
これはどういったことなのでしょうか?
$votefileの属性は755、$entrycgiは777です。
よろしくお願いします。
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」のような、配列と同じ名前のスカラー型変数はなるべくやめたほうがいいです。
この回答への補足
ありがとうございます。
>>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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlからパラメータで、cgiに渡...
-
フォントサイズを変えるには?
-
サーバー上のPDFにCGIでパスワ...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
VB.net データーグリッドビュー...
-
select値をhiddenのvalueに渡し...
-
Perlでuse socketを使用してフ...
-
チェックボックスの返す値
-
postデータのあるページの再表示
-
[HTML]プルダウンメニューの横...
-
FORMのselectの選択肢を最初か...
-
一つの検索窓で複数のサイトか...
-
1つのformに2つのsubmitボタン
-
index.html(トップページ)か...
-
htmlでセルの値を取得して計算...
-
proftpdで困ってます。
-
Rubyのmechanizeを利用したファ...
-
別formのhidden項目を自form値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlからパラメータで、cgiに渡...
-
metaタグについて
-
CGI経由でのPDFファイルをダウ...
-
sendmail 送信先を複数設定す...
-
perl/cgi リダイレクトができない
-
iis+cgiでmultipart/form-data...
-
フォントサイズを変えるには?
-
テキストエリアのインプットをP...
-
ホームページビルダーで作ったh...
-
cgi(perl) sendmailの使い方
-
CSVを読み込んでメニューを作成...
-
フォームメール(iモード用)で...
-
POST送信
-
CGIで~秒後にジャンプします。...
-
cgiについて教えて下さい。
-
CGI内でけいたいスマホの振り分け
-
CGIから表生成(1行に数件のデ...
-
ログファイルの編集についてお...
-
CGI
-
Yomi-Search追加機能で・・・
おすすめ情報