質問: fopen($readFile,"w")){ die(""); }// 更新したいcsvファイルを呼び出す flock($wHandle, LOCK_EX); foreach ($arDB as $line) { fputcsv($wHandle,$line); } fclose($wHandle); ``` このようなコードを設定しているのですが、同時アクセスが発生しているようで、 CSVが正常にカウントされていないようです... 流れは 1CSVファイルをロックする ↓ 2CSVファイルを読み込む ↓ 3読み込みデータに+1する ↓ 4CSVファイルのロックを解除する 上記のようにしたいのですが、調べても解決できませんでした。 どのように変更すればいいか教えていただけると幸いです。
回答: 今の作りだと、読み込みと書き込みの間にロックされていない期間ができてしまうのでよろしくないです。 流れに書いてあるように一回のオープン~クローズで行うべきです。 そのためにはfopenは"r+"に変更する、読み込み終わったらファイルポインタを先頭に戻す、の処理の追加が必要です。 流れとしては、以下のような感じでしょうか。 1. ファイルオープン(r+) 2. ロック 3. 読み込み 4. インクリメント 5. ファイルポインタを先頭へ 6. 書き込み 7. ロック解除 8. ファイルクローズ