提示されたコードだと「読む→加算した値を書く」という処理になっています。読んできて出力したデータは+1される "前" のものなので、この結果が得られるのは当然です。
そこで、以下のどちらかに従う実装にすれば期待した動作になるでしょう。
1.「読む→加算した値を書く→読む」
2.「読む→加算した値を書く(読んできたデータを格納した変数にも加算する)」
…そもそも、最初に提示したコードは「a+」で開いているので読み書き両方出来ますし、stream_get_contentsのタイミングで読み出して加算したあと書き込む際に $val に格納してます。だったら、この $val の値を表示に使えばいいだけの話です。つまり「2.」を選択するということです。
あとついでに、破壊的な(書き込みという動作が発生する)アクションに関しては、使用するメソッドはGETよりもPOSTの方が適切なので、その点も修正しておきます。
「a+b」「stream_get_contents」「ftruncate」「flock」に関して↓
http://qiita.com/mpyw/items/3adcec3c66e515895b08
「filter_input」に関して↓
http://qiita.com/mpyw/items/2f9955db1c02eeef43ea
----------------------------------
<?php
// ファイルを読み書き(追記)モードでオープン。
// 存在しなければ新規作成。
$fp = fopen('../0001.txt', 'a+b');
// 排他的ロックをかける。
// これが無いと同時アクセスでファイルが破壊される。
flock($fp, LOCK_EX);
// ファイルからデータを読み出して$valに格納。
// ・新規作成時は空文字列 ""
// ・2回目以降は数値形式の文字列 "1"
$val = stream_get_contents($fp);
// ファイルを空にする。
// 「a」ではなく「c」で開いている場合にはこの直後に
// rewind関数の実行も必要だが、「a」なので省略可能。
ftruncate($fp, 0);
// $_POST['op'] を受け取って、$valに加算代入する。
// $val も $_POST['op'] も文字列だが、「+」演算は
// 両辺を整数型に自動変換して計算する。
// "" や NULL は 0 として扱われる。
// このタイミングで $val は文字列型から数値型に変化する。
$val += filter_input(INPUT_POST, 'op');
// $val を文字列として書き込む。
fwrite($fp, $val);
// ロックを解除する。
flock($fp, LOCK_UN);
// ファイルを閉じる。
fclose($fp);
?>
Counter: <?php echo $val ?><br />
<form method="post" action="">
<input type="submit" name="op" value="+1" />
<input type="submit" name="op" value="+5" />
<input type="submit" name="op" value="+10" />
</form>
----------------------------------
もし「a+」モードの挙動や型の自動変換が気持ち悪くて理解しにくい場合はこう書くといいかもしれません。
<?php
// ファイルを読み書きモードでオープン。
// 存在しなければ新規作成。
$fp = fopen('../0001.txt', 'c+b');
// 排他的ロックをかける。
// これが無いと同時アクセスでファイルが破壊される。
flock($fp, LOCK_EX);
// ファイルからデータを読み出し、整数に変換して$valに格納。
// ・新規作成時は空文字列 "" → 0
// ・2回目以降は数値形式の文字列 "1" → 1
$val = (int)stream_get_contents($fp);
// ファイルを空にする。
ftruncate($fp, 0);
// ファイルポインタは末尾にあるので、
// 先頭に戻して正しい位置に書き込めるようにする。
rewind($fp);
// $_POST['op'] を受け取って、整数に変換して$valに加算代入する。
// "" や NULL は 0 として扱われる。
$val += (int)filter_input(INPUT_POST, 'op');
// $val を文字列として書き込む。
fwrite($fp, (string)$val);
// ロックを解除する。
flock($fp, LOCK_UN);
// ファイルを閉じる。
fclose($fp);
?>
Counter: <?php echo $val ?><br />
<form method="post" action="">
<input type="submit" name="op" value="+1" />
<input type="submit" name="op" value="+5" />
<input type="submit" name="op" value="+10" />
</form>
補足
長らくお付き合いいただきありがとうございました。 うまくいってうれしいです。 最後の質問です。 新規に保存もダメで、下記を消したらうまくいきました。 PHPには下記はダメなのでしょうか。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>無題ドキュメント</title> </head> <body>