Atomik dosyaları oluşturmak için en iyi yolu

4 Cevap php

'En iyi uygulama' (gördüğüm kadarıyla) atomically yeni bir dosya oluşturmak için, (tmpfile() kullanarak) geçici bir dosya açmak, ve sonra o nihai konumuna dosyayı hareket etmektir.

Geçici dosya farklı bir bağlanma noktasına üzerinde ise, ancak bu dosyayı yavaş yavaş bina neden olacak gibi, iyi çalışmaz ve ayrıca gereksiz IO havai neden.

Başka bir seçenek nihai hedef olarak aynı dizinde bir geçici dosya oluşturmak için, ama bu bir kullanıcı için bir olağandışı dosyası oluşturma dezavantajı vardır (örneğin MS Word ve Vim gibi Apps bu, ama ben de bu kötü davranışını dikkate).

() Bana mountpoint belirtmek sağlayacak tmpfile benzer bir yöntem var mı? Ben fark bu muhtemelen yerleşik olarak PHP, yani bir Posix'e / C-işlev veya kabuk-çağrı da kabul edilebilir yok.

4 Cevap

Resim, POSIX yığın böyle bir yöntem değildir. tmpfile () ve tmpname(), normal ısı Dir için kullanabilirsiniz. Orada tempnam() olduğu, nerede belirli geçici dosya için hedef dizin olabilir. Ama temelde açıklanan ikinci seçeneği uygulamak için bir yoldur.

Eğer "bağlanma noktasına" bahsediyoruz gibi ben bir Unix-benzeri ortamda varsayarak yaşıyorum.

Belki bir çözüm ya da kötü-davranış düşünebilirsiniz, ama ben aynı hedef klasörde bir gizli (. Tmpfile) geçici dosya oluşturma kabul edilebilir olabileceğini düşünüyorum.

Eğer hedef dir herhangi bir sahte dosyayı görmek istemiyorsanız tabii ki, aynı bağlanma noktasına bu şekilde bir geçici dosya () taklit, bu görev için uygun uygulama için erişilebilir değil aynı monte noktasında özel bir klasör oluşturabilirsiniz .

Ben böyle bir şey yapmak zorunda ve bir MySQL DB ile gitti. Sadece ben bir tablo gerekli bilgi depolanır ve bittiğinde ben sadece kayıt silinir. Sadece bir düşünce :)