• ベストアンサー

変数を入れないと永遠とfgetsが続く。

受け付けた変数の値からテキストを読み込むようなページを作っています。 http://sample.jp/index.php?id=20060620001 この要領ですが、これでは他人にid=の値に存在しない値を入力されると永遠にエラーが続いてしまいます。 私のPHPの文法が足りていないと思うのですが期待しない変数の値の場合エラーメッセージ等での対応は出来ないでしょうか? 永遠とその値を信じて頑張っているサーバーがかわいそうです。 回避策を教えてください!!

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

  • ベストアンサー
  • arcsin
  • ベストアンサー率70% (28/40)
回答No.2

<? $id = $_GET['id']; // $id ファイルがあれば真 if(file_exists($id)) { // ファイルopenに成功したら真 if($fp = fopen($id,'r+')) {   flock($fp,LOCK_EX);   while(!feof($fp)){    $line = fgets($fp);    echo $line;   }   fclose($fp);  } else echo "ファイルのオープンに失敗したよ"; } else echo "ファイルが見つからんよ"; ?> という感じはどうでしょう。 (全角スペースでインデントしているのでテストするときは注意してください)

noname#20805
質問者

お礼

動作しました! おかげでスッキリ寝~られます! ありがとうございました。

その他の回答 (1)

noname#57710
noname#57710
回答No.1

なぜfgetsが出てくるのか良くわからないのですが、上記のようなパラメータを渡しているなら if (isset($_GET['id'])) { if ($_GET['id']の値チェック) { //期待しない値の場合 echo "Invalid Parameter"; } } else { echo "No Parameter"; } とかでいいんじゃないですか? GETパラメータの受け取りかたはわかっていますか?

noname#20805
質問者

補足

期待したものかどうか判断するための関数があったのですね。 ありがとうございます。 HPで日記を書いていましたがテキストデータとデザインを別けメンテナンスを高めたいとおもい、やってみたんです。 下記のように書いていたためidの値を故意に変えて入力されるとサーバーに負荷がかかっていました。 どんな状況でも$idというファイルを探してしまうためで対応策を考えていたところでした。 もし良かったら添削していただけたら幸いです。 <? $id = $_GET['id']; $fp=fopen($id,'r+'); flock($fp,LOCK_EX); while(!feof($fp)){ $line=fgets($fp); echo $line; } fclose($fp); ?>