• 25-09-2014, 23:44:42
    #1
    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.
  • 26-09-2014, 00:01:34
    #2
    Bö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
    #3
    kayamehmet adlı üyeden alıntı: mesajı görüntüle
    Bö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.
    Ş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.
  • 26-09-2014, 00:13:05
    #4
    ip adresini direk txt olarak kaydetsin bir dosya dizinine örn:

    ip adlı dosya olsun bir tane
    dosya icinde giren ip
    1.1.1.1.1.txt
    2.2.2.2.2.txt gibisine kaydedilebilir
  • 26-09-2014, 00:13:17
    #5
    Aynen ö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:14:59
    #6
    XYZ
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Neden veritabanı kullanıldığının açıklamalarından biri bu aslında

    flock() fonskiyonu incelenebilir. Yapılmış birkaç örnek var.
  • 26-09-2014, 00:38:04
    #7
    LinuxRoot adlı üyeden alıntı: mesajı görüntüle
    ip adresini direk txt olarak kaydetsin bir dosya dizinine örn:

    ip adlı dosya olsun bir tane
    dosya icinde giren ip
    1.1.1.1.1.txt
    2.2.2.2.2.txt gibisine kaydedilebilir
    bunu 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.

    kayamehmet adlı üyeden alıntı: mesajı görüntüle
    Aynen ö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.
    hayat kurtardınız teşekkürler

    XYZ adlı üyeden alıntı: mesajı görüntüle
    Neden veritabanı kullanıldığının açıklamalarından biri bu aslında

    flock() fonskiyonu incelenebilir. Yapılmış birkaç örnek var.
    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.
  • 26-09-2014, 00:40:27
    #8
    birden fazla kullanıcı kayıt ederse 2 side kayıt ettirilebilir.cache gibi bir sistem kodlayabilirsiniz bir havuzda toplanır sonra toptan kayıt edilir...Ancak bu tarz işlemler için zaten geliştirilmiş birşey var SQL uğraşmayın derim ben SQL yapın geçin gitsin...
  • 26-09-2014, 01:08:19
    #9
      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.