トラブル対応はエネルギーを余分に使います。
photo credit: Kasaa via photopin cc
トラブル発生
部下からファイルが上書きされたのは、なぜなんでしょうと相談を受けて、どんな仕組みを作ったのか確認してみました。
作られていたのは、
- アップロードされたファイルをPHPのテンポラリから、システム用のテンポラリに、ファイル名を年月日時分秒を使ったファイル名でコピーする。
- 画面操作により、確定したら、システム用のテンポラリから、システム用の保存ディレクトリに、確定によって生成されたユニークなIDをファイル名に付加してコピーする。
という仕組みでした。
原因調査と対策
この仕組みを理解しながら、現象が起きたファイルを見たら、1.でファイルをコピーする処理が、別々のブラウザから同一秒で操作が行われたら、発生することがわかりました。
確定しないと、ユニークなIDが生成されないため、秒まで使えば大丈夫と考えていたようでした。
セッションIDを使って、ユニークなファイル名にするように伝えました。
別のトラブルが起きないかチェック
セッションIDが重複することがないのか調べてみましたが、無視しても問題ないくらいの確率のようです。
[PHP-users 698] Re: セッションID を生成する仕組みについて