trgino adlı üyeden alıntı: mesajı görüntüle
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>"; ?>