أخ ncE بارع Pri
انا استخدمت الكود الي أنت عملته
ولكنه عند كل تحديث يزيد عدد الزوار ؟؟
انا سأحاول برمجة واحد ,,
وشكرا
أخ ncE بارع Pri
انا استخدمت الكود الي أنت عملته
ولكنه عند كل تحديث يزيد عدد الزوار ؟؟
انا سأحاول برمجة واحد ,,
وشكرا
السلام عليكم ،،
ممكن نستخدم هذه الطريقة
و phpكود PHP:
CREATE TABLE moonps_online (
ID int(9) not null auto_increment,
timein int(15) not null ,
onlinep varchar(200) not null,
title varchar(200) not null,
PRIMARY KEY (ID),
);
الشرح : زراعة كوكي حتى لا يتم تحديث الزوار لنفس الزائر !!كود PHP:
<?php
//including config
include("includes/config.php");
$timeout1 = 300;
// the time
$times = time();
$timeout = $times-$timeout1;
setcookie("test" , 'test' , time()+300);
if ($_COOKIE['test'])
{
# Don't do any thing
}
if (!$_COOKIE['test'])
{
$mm = mysql_query("insert into moonps_online values('null','$timestamp','null','null')");
}
//delete values when users leaves !!
$delete = mysql_query("DELETE FROM moonps_online WHERE timein<'$timeout'");
if(!($delete)) {
print "Con't delete";
}
$good = mysql_query("Select ID from moonps_online");
$on = mysql_num_rows($good);
//The results
if($on == 1)
{
echo "one user online";
}
else
{
echo "$user users online";
}
mysql_close();
?>
وعن طريق هذا الكود يمكنك ان تدخل مكان التواجد وصفحة التواجد و عنوان صفحة التواجد
بتغيير قيمة المدخلات اذا لاحظت انا واضع اغلبها null
شكرا
السلام عليكم،
قمت بكتابة الملف التالي:
طريقة الإستخدام: في الملف تم تحديد المجلد mCount.tmp.folder كمجلد مؤقت .. حيث يجب أن يكون تصريح هذا المجلد 777كود PHP:
<?php
/*
الملف: mCounter.php
الوصف: ملف لحساب عدد المتواجدين الآن.
المبرمج: MOBARMEG <mobarmeg[at]mobarmeg[dot]com>
*/
// ####### انشاء الجلسة #######
// اسم الجلسة: mCounter
session_name('mCounter');
// بدء الجلسة
session_start();
// ####### بدء السكربت #######
// انشاء تواجد للكائن mCounter
/*
تم تمرير:
mCount.tmp.folder كمجلد للملفات المؤقتة
60 التحديث كل 1 دقيقة
*/
$mCounter =& new mCounter('mCount.tmp.folder', 60);
// طباعة عدد الزوار
echo $mCounter->getVisitors();
// ####### الكائن mCounter #######
class mCounter
{
// متغيرات داخلية
var $_SESSION;
var $_file;
var $_time;
var $_fp;
var $_add;
// الـ Constructer
/*
البارامترات:
+$file: المجلد المؤقت الزامي
-$time: الوقت غير الزامي
*/
function mCounter($file, $time=60)
{
// جعل قيمة المتغير الداخلي _add تساوي 0
$this->_add = 0;
// جعل قيمة المتغير المحلي _SESSION هي نفسها قيمة مصفوفة الجلسات $_SESSION
$this->_SESSION =& $_SESSION;
// جعل قيمة المتغير المحلي _time قيمة البارامتر $time
$this->_time = $time;
// التحقق من الملف المؤقت السابق
if(file_exists($file.'/'.date('i', time()-$time)))
{
// حذف الملف المؤقت السابق
@unlink($file.'/'.date('i', time()-$time));
}
// وضع قيمة ملف مؤقت في المتغير المحلي _file
$this->_file = $file.'/'.date('i', time());
// استدعاء _Count()
$this->_Count();
return true;
}
function _Count()
{
// التحقق من عدم تسجيل قيمة في الجلسة أو أن القيمة المسجلة أقدم من وقت التحديث أو أن الملف المؤقت غير موجود
if(!$this->_getSession('mCount') || ((time()-$this->_getSession('mCount')) > $this->_time) || !file_exists($this->_file))
{
// استدعاء _AddCount
$this->_AddCount();
// جعل قيمة متغير الجلسة mCount تساوي الوقت الحالي
$this->_setSession('mCount', time());
}
return true;
}
function _AddCount()
{
// فتح الملف المؤقت للقراءة والكتابة كملف ثنائي والبداية من نهاية الملف
$this->_fp = fopen($this->_file, 'a+b');
// ترك مسافة 1 بايت
fseek($this->_fp, filesize($this->_file)+1, SEEK_CUR);
// كتابة في مكان البايت الحالي
fwrite($this->_fp, chr(1));
// اغلاق الملف
fclose($this->_fp);
// جعل قيمة المتغير الداخلي _add تساوي 1
$this->_add = 1;
}
function _getSession($INDEX)
{
// ارجاع قيمة متغير الجلسة إن وجد
return (isset($this->_SESSION[$INDEX]) ? $this->_SESSION[$INDEX] : false);
}
function _setSession($INDEX, $VALUE)
{
// تغيير قيمة متغير الجلسة المفهرس بالبارامتر $INDEX وجعل قيمته تساوي البارامتر $VALUE
$this->_SESSION[$INDEX] = $VALUE;
return true;
}
function getVisitors()
{
// ارجاع حجم الملف المؤقت الحالي
return ($this->_add == 1) ? filesize($this->_file)+1 : filesize($this->_file);
}
}
?>
في الملف الذي وضعته جعلته يقوم بطباعة عدد الزوار.. تستطيع التحكم بالمخرجات .. مثلاً جعلها على شكل JavaScript لكي تستدعى من ملف html !
عيب السكربت: ان السكربت يعتمد في انشاء الملفات على عدد الدقائق.. حيث ينشىء لكل دقيقة ملف مؤقت.. وهو يقوم بحساب عدد الزوار بحيث يضيف 1 بايت لكل زائر جديد!
مثال:
http://me.mobarmeg.com/mCounter.php
الملف المصدر:
http://me.mobarmeg.com/mCounter.phps
__________________
ArabBB ... SoooooN!
ما يصح الي الصحيح
مثال:
http://me.mobarmeg.com/mCounter.php
الملف المصدر:
http://me.mobarmeg.com/mCounter.phps
أرجوكم الان قولو لي ايش الكود الصح الذي استخدمه
لانه عدد الزورا أسبوعياً لايقل عن 10000 زائر
ايش الحل يا انترنت بلس
أحمد انتظر شوية بسندرس السكريبتات الموجودة واحد واحد وننقحهم ونصل إن شاء الله لأفضل الطرق .. أوكي؟
عاشق القمر
لو عندك عنوان لتجربتك لاسكريبت بارع ياريت تنشره .. لأنه أنا شايف انه مش بيزود واحد مع كل رفرش ..
ملاحظاتي السريعة على سكريبتك:
1- لماذا تستخدم 2 if؟ استخدم if و else .. هذا أفضل للسيرفر من ناحية ويعتبر إضافة أمر دون جدوى من ناحية أخرى ..
2- إذا لم يتم الحذف فلماذا ستظهر رسالة خطأ؟ بعد استخدام delete وupdate إذا كانت النتيجة عدم وجود $delete فهذا ممكن يعني أنه لم توجد صفوف لحذفها .. إذن لا داعي لإظهار رسالة ..
3- أعجبني جدا استخدامك لجملة السيليكت مع id ثم حساب العدد بدالة قواعد البيانات mysql_num_rows .. هذا أخف على السيرفر 100 مرة من استخدام count في السيليكت ..
4- برضو زي ما قلت من قبل كده استخدام delete مع كل زائر رهيبة على السيرفر إذا كان عدد الزيارات كبيرا ..
__________________
....
محمد حسام
انترنت بلس
بإذن الله البرمجه هذه فيها الحل لجميع المشاكل ..
الأخ البـ أحمد ـرنس : مع التعديلات الاخيرة لن يكون هناك اي مشاكل .. تجد في المرفقات السكربت مجهز .. فقط قم بتشغيل الملف example.php ..
** والمصدر موجود أمامكم لمن كان له تعليق ..![]()
أنشأ قاعدة بيانات باسم available وضع فيها :
المصدر كاملاً :كود PHP:
CREATE TABLE available (
BRa INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
time_entry int(20) NOT NULL default'0' )
وللتـــــــــــــــــــــجـــــــــــــــــــربـــ ــــــــــــــــــــــــــــة إضغط هنا ..كود PHP:
<?php
###################################################
// سكربت عدد المتواجدين //
// برمجة عبدالعزيز السعيد //
// Email : bar3_sa(at)hotmail.com //
// Powered By (Pri بارع ncE) Copyright © 2005 //
###################################################
//======================config.php====================//
// === خاص بقاعدة البيانات === //
$dbserver = "localhost"; // اسم السيرفر //
$dbname = "available"; // اسم قاعدة البيانات //
$dbuser = "root"; // اسم المستخدم لقاعدة البيانات //
$dbpss = ""; // كلمة المرور لقاعدة البيانات //
// === هذه البرمجه هي طريقة الدخول لقاعدة البيانات === //
$DBC = @mysql_connect("$dbserver", "$dbuser", "$dbpss");
if (!$DBC) {
echo "يوجد خطأ في سيرفر الموقع !!";
exit();
}
$DBS = @mysql_select_db("$dbname");
if (!$DBS) {
echo "يوجد خطأ في قاعدة البيانات !!";
exit();
}
//====================End config.php==================//
//======================class.php=====================//
// بداية class
class available {
// متغيرات داخلية .. الرسالة - التوقيت
var $msg, $timerec, $time_guest, $number_guest;
// دالة الحسابات
Function available($msg,$timerec){
// تعريف المتغيرات الوقت والرقم
$this->msg = $msg;
$this->timerec = intval($timerec);
$this->time_guest = intval($_COOKIE['time_guest_bar3']);
$this->number_guest = intval($_COOKIE['number_guest_bar3']);
// تعريف متغير بالوقت
$this->time = time();
// حذف الزوار الذين خرجوا أو مضى عليهم وقت
@mysql_query("DELETE FROM available WHERE time_entry<".$this->time);
// إفراغ الجدول إذا كان الزوار صفر
IF ($this->num() == 0){
@mysql_query("TRUNCATE `available`");
}
// يتم التدخول إلى هنا إذا كان الزائر جديد أو مضى عليه وقت
IF ($this->time_guest == "" OR $this->time_guest < $this->time){
// إضافة زائر جديد
@mysql_query("INSERT INTO available SET time_entry=".$this->time."+".$this->timerec);
// إستدعاء رقم الزائر
$this->result = @mysql_query("select max(BRa) from available");
$this->row = mysql_fetch_array($this->result);
$this->BRa = $this->row[0];
// تسجيل وقت الدخول و رقم الزائر
setcookie ('time_guest_bar3', $this->time+$this->timerec, time() + $this->timerec);
setcookie ('number_guest_bar3', $this->BRa, time() + $this->timerec);
}
// يتم دخوله إلى هنا إذا لم يدخل في الأعلى
Else {
// تجديد الوقت لزائر سابق
@mysql_query("UPDATE available SET time_entry=".$this->time."+".$this->timerec." WHERE BRa=".$this->number_guest);
// تسجيل وقت دخول جديد للزائر
setcookie ('time_guest_bar3', $this->time+$this->timerec, time() + $this->timerec);
}
}
// دالة حساب الموجودين
Function num(){
// الإتصال بقاعدة البيانات لمعرفة عدد المتواجدين
$this->result = @mysql_query("Select * From available");
$this->guests = @mysql_num_rows($this->result);
return intval($this->guests);
}
// دالة النتيجة النهائية
Function viewers(){
return $this->msg." ".$this->num();
}
}
//====================End class.php===================//
//====================example.php=====================//
/* تسجيل اسم الكائن بالمتغير
الخانة الأولى - الرسالة التي تظهر قبل عدد المتواجدين
الخانة الثانية - مدة تسجيل الزائر
*/
$Bar3 = new available('مرحباً بك أخي الزائر .. المتواجدين حالياً',120);
// طلب الدالة النهائية
echo "<div align='center'>
<font face='Tahoma' size='2'>
".$Bar3->viewers()."
</font>
</div>";
//==================End example.php===================//
?>
المرفقات السكربت مجهز للإستعمال ..
وتقبلوا تحياتي : عبدالعزيز![]()
__________________
ألا في سبيل الله ما أنا فاعل - - - عطاء وإقدام وحزم ونائل
طريقة أخي المبرمج ذكية وجديدة![]()
وأعتقد أنها ستعمل بصورة جيدة دون أخطاء ..
الملاحظة الوحيدة هي أن التعامل مع الملفات يأخذ وقتا من السيرفر أحيانا يكون أضعاف الوقت اللازم في قواعد البيانات .. ولذلك ستكون هناك مشكلة مع المواقع الكبيرة .. أعتقد ان فيه في السكريبت تأكد من وجود الملف كل مرة يشتغل السكريبت ..
أذكر مرة وضعت سكريبتا لحذف الصور في موقع بعضويات .. جزء أخذ البيانات من قواعد البيانات لم يكن يأخذ وقتا على الإطلاق ليحضر لي مثلا 3000 شخص يجب حذف صورهم .. اللوب التي عملتها لحذف الملفات كانت تحذف حوالي 15 ملف في 30 ثانية (وقت طويل جدا بالنسبة للسيرفر) مما سبب مشكلة للسيرفر .
إذن .. أعتقد أن مشكلتنا في التعامل مع السكريبتات (على المواقع الكبيرة) ستكون البطء .. أما مشكلتنا مع قواعد البيانات استخدام update وdelete كثيرا يسبب تراكم الاوفرهيد مما يبطئها مع الوقت ..
__________________
....
محمد حسام
انترنت بلس
هنا حل سريع .........
http://daif.net/script/session.phpكود PHP:
<?php
session_start();
//وضع متغير في الجلسه لكي يتم التعرف عليها فيما بعد
$_SESSION['daif'] ="ok";
//ملفات الجلسات تخزن في مجلد tmp
$dir = dir("/tmp");
while ($fn = $dir->read()) {
//نقرأ الملفات ونتأكد من أنها ملفات جلسه وتاريخها التعديل عليه أقل 60
if( (substr($fn,0,4) == "sess") AND (time()-filectime("/tmp/$fn") <= 60) ) {
$data = implode('',file("/tmp/$fn"));
//نتأكد من القيمة التى في الملف
if(substr($data,0,4) == "daif"){
$user++;
}
}
}
$dir->close();
print $user;
?>
__________________
ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
الاتصال: daif@daif.net او جوال: 0556639884
الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .
اخي انترنت بلس
لو عندك عنوان لتجربتك لاسكريبت بارع ياريت تنشره .. لأنه أنا شايف انه مش بيزود واحد مع كل رفرش ..
آسف هذا كان على السيرفر الشخصي وانا متأكد من ذالك !!
بالنسبة لif فانت صادق و ايضا للجملة الشرطية فأوافقك الرأي ايضا
بالنسبة للجملة delete ؟؟ هات حل لها ؟
أخ Daif
بالنسبة للمثال الي أنت واضعه
لا يظهر نتيجة من أول مرة ؟
حاضر .. أنا بس باعتذر عن قلة تواجدي هذه الأيام لانشغالي الشديد .. وسوف أعود بإذن الله ..
__________________
....
محمد حسام
انترنت بلس
تعديلات بسيطة على الكود الذي وضعه الأخ ضيف..
1) أنا في جهازي حددت أن ملفات الجلسات تخزن في /home/mobarmeg/php_session .. فالكود لن يشتغل معي بكل تأكيد!
2) عند انشاء ملف الجلسة لن يتم حسابه أول الأمر .. لذا يجب أن تزيد 1 على عدد الملفات.
كود PHP:
<?php
session_start();
$FILE = 0;
if(!$_SESSION['daif'] || ((time()-$_COOKIE['time']) > 60))
{
//وضع متغير في الجلسه لكي يتم التعرف عليها فيما بعد
$_SESSION['daif'] ='ok';
$_COOKIE['time'] = time();
$FILE = 1;
}
// جلب مجلد الجلسات
$dir = session_save_path();
while ($fn = $dir->read()) {
//نقرأ الملفات ونتأكد من أنها ملفات جلسه وتاريخها التعديل عليه أقل 60
if( (substr($fn,0,4) == "sess") AND (time()-filectime("/tmp/$fn") <= 60) ) {
$data = implode('',file("/tmp/$fn"));
//نتأكد من القيمة التى في الملف
if(substr($data,0,4) == "daif"){
$user++;
}
}
}
$dir->close();
$user = $user + $FILE;
print $user;
?>
__________________
ArabBB ... SoooooN!
حياكم الله أخواني
انا الان أريد أركب طريقة الاخ بارع
بس لسه الاخ انترنت بلس والمبرمجين
ايش هي الطريقة الصح يعني الذي مايحدث فيه أخطاء
لاننا أريد أن أركبها في موقع إسلامي ومش ناقصين أخطاء في التصفح
فأرجوكم طريقة حلوة وسهلة والله يعينكم
عفوأً للرفع
بس كان ضروري علشان انا راكن عليكم
لاننا ابي أركب هذا الطريقة على موقعي
وخالص تحياتي لكم