-
ID:LJl8S2 さんの質問

fopen関数、fwrite関数を使い、モードをwにしたとき、

ファイルポインタを毎回最上位にやって書き換えてくれるはずなのに、

書き変わらないという現象があった

(もちろんモードaのように追記もされていない)。

いまは作ったファイルを都度削除していますが、どうしてでしょう?

function writefile( $filename, $body ){

// ファイルをオープンします。
$fno = fopen($filename, ’w’);

// 文字列を書き出します。
fwrite( $fno, $body );

// ファイルをクローズします。
fclose($fno);
}

みんなの回答 2 件

ID:AoYbNE さんの回答

エラーのログもでないんでしょうか?
書き込み権限がないとか?

ID:lqyYzt さんの回答

書き変わらないパターンですが、例えばアクセスカウンタの場合、以下の流れが想定できます。

  1. Aがアクセスする。
  2. Bがアクセスする。
  3. Aがファイルの中身を読み取り現アクセス数(N)を取得する。
  4. Bがファイルの中身を読み取り現アクセス数(N)を取得する。(この時数値はAと同じ)
  5. AがファイルにN+1を書き込む。
  6. BがファイルにN+1を書き込む。

結果、Aのアクセスが無かったことになり、値が書き変わっていないように見えます。

他にはwだとfopenした際に一旦ファイルの中身を空にするので、それが原因の場合もあります。
あと、ファイルの書き込みなどはちゃんとflockなどで排他処理をするべきです。

最終更新日:2014-06-09 (2,104 views)

関連するトピックス

ページ上部に戻る