ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

ファイルを上書きしてしまうトラブル

トラブル対応はエネルギーを余分に使います。

f:id:AJYA:20130509224123j:plain

photo credit: Kasaa via photopin cc

 

トラブル発生 

部下からファイルが上書きされたのは、なぜなんでしょうと相談を受けて、どんな仕組みを作ったのか確認してみました。

作られていたのは、

  1. アップロードされたファイルをPHPのテンポラリから、システム用のテンポラリに、ファイル名を年月日時分秒を使ったファイル名でコピーする。
  2. 画面操作により、確定したら、システム用のテンポラリから、システム用の保存ディレクトリに、確定によって生成されたユニークなIDをファイル名に付加してコピーする。

という仕組みでした。

 

原因調査と対策 

この仕組みを理解しながら、現象が起きたファイルを見たら、1.でファイルをコピーする処理が、別々のブラウザから同一秒で操作が行われたら、発生することがわかりました。

 

確定しないと、ユニークなIDが生成されないため、秒まで使えば大丈夫と考えていたようでした。

セッションIDを使って、ユニークなファイル名にするように伝えました。

 

別のトラブルが起きないかチェック

セッションIDが重複することがないのか調べてみましたが、無視しても問題ないくらいの確率のようです。

[PHP-users 698] Re: セッションID を生成する仕組みについて