- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルが消える(読めていない?))
ファイルが消える(読めていない?)
このQ&Aのポイント
- 指定番目のレコードを削除するcgiを作成しています。ロジックは簡単で、指定があれば実際の削除作業を行い、指定がなければ削除位置を指定させる画面表示を行います。
- 最近、削除位置を指定させる画面表示でも「全レコード数」を表示したいと思い、ロジックを変更しました。しかし、削除作業ではない方でレコードが消えてしまいました。
- 読み込んだデータは一時的にサーバー上に保存されているため、移動ではなくコピーを行うと問題なく動作しました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Perl中の変数の内容は、現在の要求の HTML を出力し終った時点で無くなります。 出力したHTMLに対して閲覧者が次に操作を行なった時、前回の処理結果はもはや利用できません。 これで、答えになっていますか?
その他の回答 (1)
- zxcv0000
- ベストアンサー率56% (111/196)
回答No.2
> ファイルを一旦出力して読むという手段 これは、最後の手段ですね。 なぜかと言うと、大変な処理になるからです。 CGI と言うものは、複数の閲覧者から前後してあるいは同時にアクセスされる状況を想定せにゃなりません。 閲覧者対応に一時ファイルを管理したり用済みの一時ファイルを消す処理は、かなり大変です。 ではどうするかと言うと、条件によって複数の方法を使い分けます。 記憶すべきデータの容量(バイト数)が多い場合には、一見無駄な様でも再度データを作り直すのが良いでしょう。 容量が少い場合は、CGIパラメーターとか Cookie とかを使います。 CGIパラメーターというのは、URL末尾の「?」以降の部分です。 FORMを使ってるなら、 <input type="hidden" name="aaa" value="bbb"> とか書きます。 Cookie は、CGIパラメーターに慣れてからの方が良いかと。
質問者
お礼
何回も有り難うございます。 確かにそうですね、 言われてみるとよく分かります。 誰に対してもサーバーに書き込んでいたら飛んでもなくi/oが発生します。 何気なく(知らないで、そういうモノだと言うことで)使っていましたが、 FORMが解決していたのですね。 少なくともやりとりする部分を最小にすることが設計の初めと言うことですね。 よく分かりました。 お世話になりました。
お礼
早速有り難うございました。 やはりそうでしたか。 十分なる回答です。 この回答で充分なのですが、 ついでにお聞きします。 今回のようなケースはa-rtn、b-rtnでそれぞれ読めば良いのですが、 a-b間をデータ引き渡しなどしたい場合は、 ファイルを一旦出力して読むという手段が当たり前なのでしょうか。 何か良い考え方があれば教えていただきたいのですが。 宜しくお願いいたします。