Merhaba, bir güvenlik metodu olarak txt dosyasında ip adreslerini tutuyorum. Veritabanına yazma ve okuma yavaş olcağı aynı zamanda işlemciyi yoracağı için tercih etmedim.
Ama kafama bir soru takıldı, siteye giren kullanıcının ip adresini txt dosyasına kaydediyorum tamam. Ama aynı anda 2 kişi giriş yaptığında(ki bu hitli bir site için çok zor bir şey değil) txt dosyasını düzenlerken nasıl bir sorun olabilir?
Php dosyayı her seferinde düzenleyip sonuna ekliyor ip adresini.
1.2.3.4.5;1.1.1.1.1;2.2.2.2; şeklinde noktalı virgül ile ayırarak.
Php ile txt'ye kayıt yaparken aynı anda iki kişi kayıt eklerse nolur?
9
●803
- 26-09-2014, 00:01:34Böyle bir durumun meydana gelmesi çok zor fakat gerçekleştiğini varsayarsak birinin ip adresi yazılırken txt dosyası açık olacağı için diğer kullanıcıya hata vermesi gerekir. Aynı anda bir dosya yazmak için iki kere açılamaz. Fclose bu yüzden kullanılıyor.
- 26-09-2014, 00:08:37Şimdi anladım, o halde dosya açıksa ufak bir bekletme yaparak bunun da önüne geçmiş olurum sanıyorum. Zaten dosyaya yazma süresi milisaniye sürüyor denk gelir mi çok da emin değilim.kayamehmet adlı üyeden alıntı: mesajı görüntüle
- 26-09-2014, 00:13:17Aynen öyle çok düşük bir ihtimalden bahsediyoruz. Ancak benim tavsiyem işinizi sağlama almak istiyorsanız bekletme yapmaktansa bir while döngüsü kurarak bu sorunun üstesinden gelebilirsiniz. Dosya açılana kadar while dönecek.
- 26-09-2014, 00:38:04bunu da düşünmüştüm ama tüm ip adreslerinin listesinin olduğu üzerinde çeşitli işlemler falan yapmam gereken kısımlar var, bu şekilde onlar zorlaşıyor.LinuxRoot adlı üyeden alıntı: mesajı görüntüle
hayat kurtardınız teşekkürlerkayamehmet adlı üyeden alıntı: mesajı görüntüle
teşekkürler hocam, dosyanın yazma iznini kapatıyor ilk bakışta anladığım kadarıyla ancak denediğimde zaten fclose ile dosya kapatılmazsa yazamıyorsunuz diye biliyorum, teşekkürler tekrar.XYZ adlı üyeden alıntı: mesajı görüntüle - 26-09-2014, 01:08:19
function file_put_contents_wait($filename, $content) { $fp = fopen($filename, "a+"); while (!flock($fp, LOCK_EX | LOCK_NB)) { usleep(1000); } flock($fp, LOCK_UN); fclose($fp); file_put_contents($filename, $content); }bu fonksiyon istediğiniz işi görecektir. Eğer dosyaya erişilmiş ise sleep yapılarak dosyanın erişiminin kalkmasını bekleyerek dosya yazma işlemine geçmektedir.
İyi forumlar.
