• ベストアンサー

ファイルの内容の削除【ファイルシステム関数】

以下のユーザー定義関数で、POSTで受け取った数値の増減をあるファイルに書き換える作業をおこないたいのですが、1桁の数値であれば問題ないのですが、2桁の数値にし、マイナスの数値で減らすと値が「00」となってしまいます。文字列として認識してしまっているためかとは存じますが、良い解決方法が思い浮かびません。以下ソースです。 <? function cnt($str){ if(isset($_POST[$str])){ $fp = fopen( $str.".txt", "r+" ); flock($fp,2); $count = fgets( $fp, 5 ); $strstr = $_POST["$str"]; $count+= $strstr; rewind( $fp ); fputs( $fp, $count ); flock($fp,3); fclose( $fp ); print($count); }else{ $fp = fopen( $str.".txt", "r" ); $count = fgets( $fp, 5 ); print($count); };} ?> ファイルシステム関数については苦手で、うまく理解しきれていません。 アイデア・解決法をご存知の方がいらっしゃいましたら、ご回答いただければうれしいです。よろしくお願いいたします。

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

  • ベストアンサー
  • umota
  • ベストアンサー率46% (150/324)
回答No.2

元のサイズより小さいサイズを書き込んでも後のデータは残ったままです。 ヒント fputs( $fp, "$count\n" );

puzzleman
質問者

お礼

ご回答ありがとうございます!ヒントの通りで改善いたしました!! ただなぜ改行で改善したのかが理解仕切れて下りません^^; ファイルシステム関数理解のためにも、よろしければお教え願えればと存じます。<(_ _)> よろしくお願いいたします。

その他の回答 (2)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

PHPでの、暗黙の文字列から数値への方変換では、文字列の最初から見ていって、数値として理解できるところまでを数値に変換します。 改行が入れば、そこまでを数値として見ますので、その後に何が入っていようと、そこまでしか見ません。

puzzleman
質問者

お礼

ご回答ありがとうございます! 理解できました!!とても勉強になりました!! ご回答いただきました皆様、ありがとうございました。 心より感謝いたします。

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.1

+r でオープンして、rewindで巻き戻して書いてますね。 ひょっとして、書き直す前のファイルは、 X0 --- Xは何かの数字 20 とか 40 とか 書き出した値は 0 ではないですか? fputsの第2引数は書き出す最大バイト数です。 書き出す数値が1文字で収まれば、最初の1文字だけが書き換えられます。

puzzleman
質問者

お礼

ご回答ありがとうございます。数字はおっしゃられる通りです。 ファイルシステム関数がなかなか理解しきれておりませんでした・・・ fputsの機能としては理解できました。ありがとうございます。

関連するQ&A

専門家に質問してみよう