php dosyasında bilgi kaydetme

4 Cevap php

i bir izleme sistemi yazmak ve şimdi benim MySQL veritabanı kaydedebilirsiniz istiyorum. ama her ziyaret ip hakkında bilgi kaydederek mysql için büyük bir iştir

öylesine i bir dosyaya bilgileri kaydetmek mümkün olsaydı, o zaman veritabanı ve sorunları hakkında hiçbir tartışma olduğunu düşünüyorum.

ancak bu başlamak için: ben gerçekten ben hiçbir sorun ile okumak ve ayrıntıları göstermek bir şekilde bir dosyaya kaydetmek için nasıl bilmiyorum

i bir dosyaya kaydettikten sonra, satırlar tüm IP'lere hakkında bilgi göstermek gerekir

i satır için (tablo) kaydetmek ve göstermek için ne yapmalıyım

php/mysql

4 Cevap

Ne webserver kullanıyorsunuz? Eğer kullanabileceğiniz günlüğü inşa etmişlerdir etmiyor mu?

Eğer okuma ve kendiniz bir dosya halinde bu verileri yazarken, bir veritabanından daha hızlı olacak düşünüyorum neden ben anlamıyorum?

Aslında doğru, veritabanı yapacağını tam olarak ne yapacak kod yazmak olabilir, ama daha iyi, ne diyorsun?

Ben çoğu insan benimle aynı fikirde olacağını düşünüyorum: Eğer bu bir veritabanı ile geçmeyin eğer hız ile büyük sorunlar göreceksiniz.

Ben sorunuzu doğru anladım eğer ben bir günlük dosyası oluşturmak istiyorsanız bilmiyorum

Eğer gerçekten bir dosyaya verileri kaydetmek gerekirse, her zaman böyle bir şey yapabileceğini

Bir dosyaya veri yazmak için aşağıdakileri yapın

$file = 'logfile.txt';

if(file_exist($file)){
    $fh = fopen($file, 'w');
}else{
    $fh = fopen($file, 'a');
}

$data = $dt."\t\t".$ipaddr."\t\t".$hostnm."\t\t".$referer."\t\t".$pg."\t\t".$pagetitle."\t\t".$dbi."\n";

fwrite($fh,$data);

fclose($fh);

Dosyadan veri okumak için PHP diziye verileri kaydeder file işlevini kullanabilirsiniz. Sonra bu konuda ilgili veri, Readmore için dizi arayabilirsiniz burada http://php.net/manual/en/function.file.php

Eğer bir veri deposu olarak sunucunun kendi günlüklerini kullanamaz özel bir sebebi var mı? Bir IIS veya Apache access_log parçalıyorlar ve istediğiniz bilgileri ayrıştırmak için oldukça önemsiz bulunuyor.

Eğer erişim günlüğüne belirli bir alt kümesi sadece ilgileniyorsanız (örn: gerçek sayfalarında vurur ve images / javascript / css / flaş / ne olursa olsun dosyaları görmezden), sadece bu özel hit ayrıştırmak olabilir. Sonra azaltılmış veri başka bir sunucu üzerinde MySQL içine ayarlamak falan alayım.

Bundan sonra, veritabanı sizin için veri madenciliği yapmak gibi, ilgili hit verileri depolamak ve bir ter bozmadan bütün gruplama / sayım işlemek için çok daha iyi bir yerdir. Eğer birkaç yüz milyon hit yüklemek ve başına IP veri kaydını tutmaya çalışıyoruz ne olur düşünün - in-bellek veri seti oldukça hızlı bir şekilde büyüyecek ve kullanılabilir belleği aşabilir. Veritabanında ... toplayıcı / sayma / averageing / yapıyor vs sizin için tüm bu endişeleri idare edecek; Sadece sonradan sonuçlarını yorumlama konusunda endişelenmenize gerek.

Ve sadece bir optimizasyon ipucu olarak: işaretsiz bir tamsayı alanında değil, varchar (15) olarak IP adreslerini saklamak. Onlar gerçekten sadece 32bit numaraları demektir. Eğer alt ağ maskeleri ve etajer uygulamak için çalışıyoruz kerelik ilk ascii-> sayısal çeviri havai Analiz aşamasında tekrarlanan isabet yanında son derece önemsiz olacaktır:

INSERT INTO log (ip) VALUES (INET_ATON('10.0.0.1'));