json dosyasının boyutu ram ınızdan daha fazla olduğunda ne yapmayı planlıyorsunuz
Son yazdığım kodu arşivleme yöntemi ile Bing Sohbetten istedim. Yine tekil ziyaretçi ancak dosya her 1 MB olduğunda arşivlenip yeni dosyaya geçilsin istedim. Gerçek sonucu 1 MB dolunca ne yaptığını görerek öğreneceğim. Umarım işime (işinize) yarar. Gelen yanıt şöyle oldu:
<?php
// json dosyasının boyutunu veya son değiştirilme tarihini kontrol eden fonksiyon
function check_json_file($json_file) {
// json dosyasının boyutunu al (byte cinsinden)
$size = filesize($json_file);
// json dosyasının son değiştirilme tarihini al (unix zaman damgası cinsinden)
$mtime = filemtime($json_file);
// bugünün başlangıcını al (unix zaman damgası cinsinden)
$today = strtotime("today");
// json dosyasının boyutu 1 MB’dan büyükse veya son değiştirilme tarihi bugünden önceyse
if ($size > 1024 * 1024 || $mtime < $today) {
// json dosyasını yeni bir isimle kaydet // yeni isim, eski ismin sonuna dünün tarihi eklenerek oluşturulur
$new_name = $json_file . "_" . date("Y-m-d", strtotime("yesterday"));
rename($json_file, $new_name);
// yeni bir boş json dosyası oluştur
$data = array();
$json_data = json_encode($data, JSON_PRETTY_PRINT);
file_put_contents($json_file, $json_data); } }
// ziyaretçinin IP adresini ve tarihini al
$ip = $_SERVER["REMOTE_ADDR"]; $date = date("Y-m-d");
// json dosyasına yaz
function write_json($ip, $date) {
// json dosyasını oku
$json_file = "visitors.json";
$json_data = file_get_contents ($json_file);
$data = json_decode ($json_data, true);
// yeni ziyaretçi verisini oluştur
$visitor = array( "ip" => $ip, "date" => $date );
// veriyi json dosyasına ekleme öncesi kontrol et
$exists = false;
// ziyaretçinin var olup olmadığını tutacak bir değişken
foreach ($data as $item) {
// verileri döngüye sok
if ($item["ip"] == $ip && $item["date"] == $date) {
// ip ve date değerleri eşleşiyorsa
$exists = true;
// ziyaretçi zaten var
break; // döngüden çık
} }
if (!$exists) {
// ziyaretçi yoksa
$data[] = $visitor;
// veriyi json dosyasına ekle
$json_data = json_encode ($data, JSON_PRETTY_PRINT);
file_put_contents ($json_file, $json_data); }
// json dosyasını kontrol et ve gerekirse arşivle
check_json_file($json_file);
}
write_json($ip, $date);
function count_all_unique() {
// json dosyasını oku
$json_file = "visitors.json";
$json_data = file_get_contents($json_file);
$data = json_decode($json_data, true);
// tekil ziyaretçileri tutacak diziler oluştur
$unique_today = array();
$unique_yesterday = array();
$unique_all = array();
// bugünün tarihini al
$today = date("Y-m-d");
// dünün tarihini al
$yesterday = date("Y-m-d", strtotime("-1 day"));
// verileri döngüye sok
foreach ($data as $visitor) {
// ziyaretçinin IP adresini ve tarihini al
$ip = $visitor["ip"];
$date = $visitor["date"];
// tüm zamanların tekil ziyaretçilerine ekle
if (!in_array($ip, $unique_all)) {
$unique_all[] = $ip;
}
// tarih aralığına göre kontrol et
if ($date == $today) {
// bugünün tekil ziyaretçilerine ekle
if (!in_array($ip, $unique_today)) {
$unique_today[] = $ip;
} } elseif ($date == $yesterday) {
// dünün tekil ziyaretçilerine ekle
if (!in_array($ip, $unique_yesterday)) {
$unique_yesterday[] = $ip;
} } }
// tekil ziyaretçi sayılarını döndür
return array( "today" => count($unique_today), "yesterday" => count($unique_yesterday), "all" => count($unique_all) ); }
// tekil ziyaretçi sayılarını hesapla
$counts = count_all_unique();
$today_unique = $counts["today"];
$yesterday_unique = $counts["yesterday"];
$all_unique = $counts["all"];
// web sayfasında göster echo "<p>Bugün: <strong>$today_unique</strong> tekil ziyaretçi</p>"; echo "<p>Dün: <strong>$yesterday_unique</strong> tekil ziyaretçi</p>"; echo "<p>Tüm zamanlar: <strong>$all_unique</strong> tekil ziyaretçi</p>"; ?>