【PHP】テキストファイル内の数字に加算する方法

このQ&Aのポイント
  • PHPでテキストファイル内の数字に加算する方法を探しています。
  • 現在はfopenとfile_get_contentsを使用していますが、同時アクセスの際にリセットされてしまいます。
  • もしこれを防ぐ方法や、直接数字に加算する方法があれば教えてください。
回答を見る
  • ベストアンサー

【PHP】テキストファイル内の数字に加算する方法

PHPでカウンターを作ってみたんですが、たまに数字が勝手にリセットされて困っています。 $aa = file_get_contents("aa.txt"); $aa = $aa + 1; $aaTX = fopen("aa.txt", "w+"); fwrite($aaTX , $aa); fclose($aaTX ); という形にしてるんですが、おそらく複数の閲覧者が同時にアクセスしたときに、fopen("aa.txt", "w+")で真っ白になってるものをfile_get_contentsで読み込んでしまい、リセットされた形になってしまうのかなと。 これ、fopenを使わず、aa.txt内の数字に直接加算させる方法とかないのでしょうか? fopenはすでに記されているものの前後に文字列を加えるというようなことはできるようですが、書かれている数字に加算したり減算したりはできませんよね? 他に直接計算することができるような命令とかありますか? せめて、このリセットが防げるような方法だけでもあれば助かるのですが…。

noname#250248
noname#250248
  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8012/17124)
回答No.1

$aaTX = @fopen("aa.txt", "r+" ); @flock($aaTX,LOCK_EX); $aa = fgets( $aaTX, 10 ); $aa++; rewind( $aaTX ); fputs( $aaTX, $aa ); flock($aaTX,LOCK_UN); fclose( $aaTX );

その他の回答 (1)

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

概ねANo.1の通りで良いのですが、flockの直前にfflushも必要です。 PHP: flock - Manual http://php.net/manual/ja/function.flock.php

関連するQ&A

  • phpで二重書込みできないプログラムを作りたい

    PHP初心者です。 テキストファイルに、ある文字列を書き込むプログラムを作ろうとしています。 ファイル内容に同じ文字列があれば書き込まず、 同じ文字列が無ければファイルに書き込むという プログラムを作りたいのですが、 うまくいきません。 どなたかアドバイスをお願いします。 <?php $name = "文字列"; $fp = @fopen("file.txt", "r"); $contents = @file_get_contents($fp); if(ereg($name, $contents)) { print "登録済みです。" ; } else { $fpa = @fopen("file.txt", "a"); fputs($fpa, "$name\n"); fclose($fpa); print "登録しました。"; } fclose($fp); ?>

    • 締切済み
    • PHP
  • PHPのfrrite関数

    お世話になります。 PHPのfwrite関数について質問です。 下記の様な記述で、アクセスがあった際に$lineをdata.txtに保存する場合、同じタイミングで複数のアクセスがあった場合などにエラーは起きないのでしょうか? エラーが起こりうるのであれば、その対処方法を教えて頂きたいです。 $fp = fopen("data.txt", "w"); fwrite($fp, $line); fclose($fp);

    • 締切済み
    • PHP
  • stdinからの処理でメール情報を取得できない

    よろしくおねがいします。 空メールを送って 以下のコードでメールからの標準入力をうけて みました。 $log = file_get_contents('php://stdin'); をコメントアウトして //$gdata="ddddddd"; コメントアウトしないと、正常に書き出せるのですが、 $gdata="ddddddd"; をコメントアウトして、 $log = file_get_contents('php://stdin'); をコメントアウトしないと、動作しないようです。 環境はお名前.COMのVPSです。 CentOS5.2 & PHP5 です。 <?php $log = file_get_contents('php://stdin'); //$gdata="ddddddd"; $ffp2="ggg.txt"; $fh=fopen($ffp2,"w"); fwrite($fh,$log); fclose($fh); ?>

    • 締切済み
    • PHP
  • PHP初心者です、教えていただけすか。

    /public_html /test のtest.txtの文字列をtest.phpで表示させたいのですが、 下記の文では表示されません、どこがおかしいのか教えてください。 <?php $fp = fopen ('test.txt', 'w'); $date = "test\n"; var_dump (fwrite($fp, $date)); fclose ($fp); ?>

    • ベストアンサー
    • PHP
  • PHPで画像を取得、保存する方法

    以下で画像を取得、保存する事が出来ましたが、このプログラムで大丈夫でしょうか? 画像取得、保存の関数やもっと良い方法があれば教えて下さい。 <?php echo "あいうえお"; $temp=file_get_contents("http://www.google.co.jp/intl/ja_jp/images/logo.gif"); echo $temp; echo "<HR>"; $handle=fopen("test.gif","w"); fwrite($handle,"$temp"); fclose($handle); echo "<img src=\"./test.gif\">"; if(is_string($temp)) echo "STRING<BR>"; ?> 疑問点について。 上記プログラムですと、画像を入れた変数$tempが文字列として出力されますが、 1行目の、echo "あいうえお";をコメントアウトするとブラウザに画像が表示されるだけで、fopen,fwriteはきちんと処理されているのにechoの出力が無視されるのはどうしてですか?

    • ベストアンサー
    • PHP
  • 複数のプログラムを1ページで行えますか?

    PHP始めたばかりです。 下記の事で困っています。 単体ではうまく動くのに二つ並べると動作しません。 どうしたら複数のプログラムを1ページで行えますか? どこかに番号を付けて同じにならないようにするのかなとは思いますが分かりません。 ご教示お願い致します。 <?php $file = 'txt/a0001.txt'; if ($_POST['button_save']) { //POSTされたときは書き込み処理をする $fp = @fopen($file, 'w'); if ($fp == false) { print "このファイルには書き込みできません。<br>\n"; } else { $contents = htmlspecialchars($_POST['textBox_contents']); fwrite($fp, $contents); fclose($fp); print "書き込み完了しました。<br>\n"; } } $text = file_get_contents($file); $text = htmlspecialchars($text); ?> <textarea name="textBox_contents" cols="40" rows="2"><?php echo($text); ?></textarea> <br/> <input type="submit" name="button_save" value="保存"> </form> <p> <p> <?php $file = 'txt/b0001.txt'; if ($_POST['button_save']) { //POSTされたときは書き込み処理をする $fp = @fopen($file, 'w'); if ($fp == false) { print "このファイルには書き込みできません。<br>\n"; } else { $contents = htmlspecialchars($_POST['textBox_contents']); fwrite($fp, $contents); fclose($fp); print "書き込み完了しました。<br>\n"; } } $text = file_get_contents($file); $text = htmlspecialchars($text); ?> <textarea name="textBox_contents" cols="40" rows="2"><?php echo($text); ?></textarea> <br/> <input type="submit" name="button_save" value="保存"> </form>

    • ベストアンサー
    • PHP
  • ファイルに書き込む時の負荷について

    PHPバージョン5.2.4を使っています。 次のような // ------------------------------------ $fp = fopen("data.txt", "w"); $buf = ""; for ($i = 1; $i <= 3; $i++) { $buf .= "aaa$i\n"; } fwrite($fp, $buf); fclose($fp); // ------------------------------------ という変数にいったん保存してから書き込む場合と // ------------------------------------ $fp = fopen("data.txt", "w"); for ($i = 1; $i <= 3; $i++) { $buf = "aaa$i\n"; fwrite($fp, $buf); } fclose($fp); // ------------------------------------ というその都度ファイルに書き込む場合とでは どちらが良い悪いというのはあるのでしょうか? たとえばこちらのやり方は負荷がかかるなど ループが多くなっていった場合に違いがでてくるのでしょうか?

    • ベストアンサー
    • PHP
  • ファイルに書き込むためのPHPを教えてください

    いつもお世話になります。PHPの初心者です。 フォームの一部($text)からデータを受け取って、ファイル(log.cgi)に書き込むPHPを作りましたが、うまく作動しません。 どなたかお分かりになるかた教えてください。 //保存用ログファイル define('DE_LOGFILE', 'log.cgi'); $logtext = @file(DE_LOGFILE); //ログに書き込む $handletext = @fopen(DE_LOGFILE, "w") or _error_page(DE_LOGFILE.'に書き込めません'); fwrite($handletext, $text); @fclose($handletext);

    • ベストアンサー
    • PHP
  • ファイルの読み込み方法について

    サーバファイルなどを読み込む際、PHPではバッファを設けたfopen()、file_get_contents()という2つの方法のどちらかが採用されると思います。 しかし、ファイル内容などを全て取得したい場合、どちらも同じ動作をし、かつfile_get_contents()の方が簡潔な記述になります。 よく何かのサンプルだとfopen()を利用してバッファ指定で全ての内容を取得しているのですが、それに意図はあるのでしょうか? 明確な答えが知りたいです。

    • ベストアンサー
    • PHP
  • PHP5のsimplexml_load_fileで取得した結果をファイルに書き込みたい

    よろしくお願いします。 PHP5でSimpleXMLを利用して得られた結果をファイルに書き込む、つまりキャッシュを保存したいのですが、以下のようにやっても作成されるファイルは空のままです。ディレクトリモードは755です。 $url = "http://hoge.co.jp/index.php?a=123"; $cache_file = md5($url); $xml = simplexml_load_file($url); $fp = fopen($cache_file, 'w'); fwrite ($fp, $xml); fclose($fp); どうかご教授よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう