اللهم آمين أخي أبا مشعل
وجزيت خيرا
الأخ OneTo9
حل مشكلة ظهور البرمجة هنا :
حلول برمجية (2) PHP
نرجع إلى موضوعنا :
كما ذكرتُ سابقا ، الطريقة السابقة لا تعمل مع مجلة php-nuke في نظام الوحدات blocks
ولا أعلم السبب
لهذا لا بد من الاستغناء عن ملف البصمة
ويكون ذلك بطريقتين :
الأولى : قاعدة البيانات
الثانية : ملف نصي
وسأبدأ في الملف النصي
لن نغير في أساس البرمجة السابق كثيرا
في السابق استخدمنا ملف البصمة (cookyes) لحفظ المعلومات
كود:
setcookye(vistinfo ,$vist_time.":".$vist_ip.":".$vist_xip,time()+3600);
سنستبدل هذا الأمر بأمر حفظ المعلومات في ملف نصي
كود:
$fpt="info.txt";
$vist_file = fopen($fpt,"a+");
fwrite($vist_file,"$vist_ip|$vist_time\n");
fclose($vist_file);
السطر الأول تحديد اسم الملف.
السطر الثاني : وضع متغير يقرأ الملف، وإذا لم يكن موجودا فإنه ينشئه
السطر الثالث : يكتب البيانات $vist_ip و $vist_time
ويمكنك إضافة معلومات أخرى
السطر الرابع : يغلق الملف بعد الكتابة.
الآن ستحفظ معلومات الزوار في ملف نصي في المجلد نفسه باسم info.txt
لهذا لا حاجة لنا إلى جلب المتغيرات من ملف البصمة
كود:
$vist_data = explode(':', $vistinfo);
$v_time = $vist_data[0];
$v_ip = $vist_data[1];
$v_xip = $vist_data[2];
فلهذا عليك حذفها
سنغير قليلا في البرمجة السابقة
كود:
if ($vist_ip<>$v_ip && $v_time<$new_time) {
mysql_query("update $table set mix=mix+1");
mysql_query("update $table set day=day+1");
mysql_query("update $table set les=les+1");
mysql_query("update $table set top=top+1");
}
عدلها إلى
كود:
$ip_array = file($fpt);
for ($i=0; $i<sizeof($ip_array); $i++) {
list($v_ip,$v_time) = split("\|",$ip_array[$i]);
if ($vist_ip<>$v_ip && $v_time<$new_time) {
mysql_query("update $table set mix=mix+1");
mysql_query("update $table set day=day+1");
mysql_query("update $table set les=les+1");
mysql_query("update $table set top=top+1");
}
}
السطر الأول يحفظ معلومات الملف في المتغير $ip_array
السطر الثاني : حلقة تكرار لقراءة المعلومات بحيث نحصل على المعلومات كلها
السطر الثالث : نفصل المتغير ونقسمه إلى قسمين
ثم ننظر
إذا كان رقتفي الزائر لا يساوي الرقتفي المخزن مع الوقت المحدد فإنه يحدث العداد
يبقى أمر
وهو أن الملف سيكبر حجمه مع مرور الوقت لهذا علينا أن نحذف السطور التي مضى عليها ست ساعات مثلا
لكنني لم أصل إلى حل لحذف أسطر معينة من ملف نصي 
الحل الحاضر هو حذف الملف كله إذا وصل حجم الملف إلى 1 ميجا مثلا
كود:
$ip_array = file($fpt);
$size=sizeof($ip_array);
$del_size=1*1000000
if ($size==$del_size) {
$vist_file = fopen($fpt,"w");
fwrite($vist_file,"\n");
fclose($vist_file);
السطر الأول حفظ معلومات الملف إلى متغير
السطر الثاني حجم المعلومات
السطر الثالث : تحديد حجم الملف الذي سيحذف وهو هنا 1 ميجا
السطر الرابع وما بعدها :
ننظر إذا كان حجم المعلومات يساوي الحجم المحدد للحذف فإننا نعطي متغيرا فارغا، ثم نكتبه إلى الملف السابق، ثم نغلق الملف
طريقة التعامل مع الملفات النصية تختلف من مبرمج إلى آخر؛ لكثرة الدول المتعلقة بها في PHP
ولكل طريقته ...