النتائج 1 إلى 8 من 8

الموضوع: حلول برمجية (3) PHP

  1. #1
    عضو سوبر نشيط
    تاريخ التسجيل
    Dec 2000
    المشاركات
    998

    حلول برمجية (3) PHP



    حلول برمجية (3)

    قررت أن أطبق هذه الحلول على البرامج العربية لتطويرها، فإن لم أجد جربت على الأجنبية.

    البرنامج الذي سنطبق عليه الحل هو برنامج الأعداد من برمجة الأخ OneTo9
    من موقع قرية php

    وهنا رابطه
    http://www.phpvillage.com/script.php?ids=21

    ما المشكلة؟

    المشكلة ليست مشكلة برمجية، بل هي مشكلة أخلاقية

    كيف؟

    المشكلة هي أن العداد يحسب كل تحديث أو زيارة للصفحة، وهذا يعني أنك تعطي رقما غير صحيح لعدد الزوار.

    بعض الناس يفرح بهذا! لكن العاقل لا يفرح؛ لأنه لا فائدة من خداع نفسك وخدع الآخرين.

    نرجع إلى الموضوع :

    كيف نوقف هذا العد؟

    هناك عدة حلول، سأذكر طريقة واحدة ويمكنكم معرفة بقية الطرق ( أنا أعرف ثلاث طرق فقط ).

    الطريقة الأولى هي تسجيل معلومات الزائر في ملف البصمة ( أعجبتني هذه الترجمة لملف cookyes ).

    حيث نسجل الرقتفي (هذه من عندي نحت لكلمة الرقم التعريفي IP) ، ونسجل الوقت.

    ثم ننظر إن كانت المعلومات المتوفرة تطابق ما هو في ملف البصمة فلا يعمل العداد.

    الخطوات :

    الأولى : علينا تعديل بعض السطور في البرنامج ليتوافق مع الحل. لأن أمر إنشاء ملف البصمة لا يصح أن يسبق بأمر طباعة

    في ملف config.php ستجد :

    كود:
    echo '<body topmargin=0 leftmargin=0 marginwidth=0 marginheight=0 bgcolor=E3E1D7 
    text=000000 link=000080 
    alink=FF0000 vlink=000080>
    <link rel=stylesheet href=style.css><br>';

    انسخه، ثم ألصقه في ملف counter.php قبل هذا الأمر

    كود:
    echo "<TABLE WIDTH=20% BORDER=1 bordercolor=$color2 CELLPADDING=2 CELLSPACING=2 align=center dir=rtl>";

    ثم احذف الأمر السابق من ملف config.php

    هناك تعديل في ملف config.php

    كود:
    if (!db)

    عدلها إلى
    كود:
    if (!$db)

    وكذا
    كود:
    if (!ta)

    عدلها إلى

    كود:
    if (!$ta)

    الآن نرجع إلى ملف counter.php

    الخطوة الثانية :

    بعد أمر

    كود:
    include("config.php");

    نضيف أوامر جلب معلومات الزائر

    كود:
    $vist_ip = getenv("REMOTE_ADDR");
    $vist_xip = getenv("HTTP_X_FORWARDED_FOR");
    $vist_time = time();

    السطر الأول يجلب الرقم البعيد
    والسطر الثاني يجلب الرقم القريب
    والسطر الثالث يجلب وقت الزيارة

    يمكنك إضافة عدة أنواع كنوع المتصفح، والنظام وغيرها.

    الخطوة الثالثة
    ثم نحفظ هذه المتغيرات في ملف البصمة

    كود:
     setcookye(vistinfo ,$vist_time.":".$vist_ip.":".$vist_xip,time()+3600);

    الخطوة الرابعة :

    الآن نجلب المعلومات من ملف البصمة


    كود:
    $vist_data = explode(':', $vistinfo);
    $v_time = $vist_data[0];
    $v_ip = $vist_data[1];
    $v_xip = $vist_data[2];
    $new_time=$vist_time-3600;

    السطر الأول لتقسيم المعلومات من خلال فرزها بعلامة :
    الأسطر بعدها تحديد قيمة هذه المتغيرات
    السطر الأخير : تحديد الوقت الذي يعمل فيه العداد، وهو هنا ساعة (3600 ثانية)

    الخطوة الخامسة :

    تحديث العداد

    البرمجة الأساسية هي :

    كود:
    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");

    سنعدلها إلى :

    كود:
    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");
    }

    المتغير الأول هو الرقتفي للزائر $vist_ip

    فإذا كان الرقم يساوي الرقم المحفوظ في ملف البصمة فإنه التحديث لن يعمل.
    لن يعمل إلا إذا كان الرقمان مختلفين.
    بالإضافة إلى تحديد الوقت

    بهذه الطريقة تقلل من عمل العداد، وتحصل على نتيجة مقاربة للحقيقة.

    هذا حل كتبته على عجل، وجربته في جهازي.
    يمكنك تغيير عمل التحديث، الذي يهم هو أن تعرف الفكرة

    إذا كان الزائر يتصفح فلا تحدث العداد إلا بعد مرور مدة زمنية
    وهذه متغيرات الزائر

    هذه هي الفكرة، وكل الطرق تؤدي إلى مكة!

    كما قلت هناك طرق أخرى؛ لأن هذه الطريقة لا تنفع مع مجلة php-nuke في نظام الوحدات blocks






    __________________
    لا تعاند من إذا قال فعل
    الشنكبوتية
    اللغة العربية سياج هويتنا
    عبد الرحمن غير متواجد حالياً


  2. #2
    عضو سوبر نشيط
    تاريخ التسجيل
    Nov 2001
    المشاركات
    823


    جزاك الله خير
    درس جميل ومفيد
    نرجوا من المشرف تثبيت الموضوع





    __________________
    يارب تهديني قبل لحظة الفوت ++ وتجزل ثوابي يا جزيل العطايا
    طريق التوبة II ذكرى II قلوب الأنقياء II صيد الفوائد IIمنابر الدعوة IIدعوة IIكلمات
    مهلا فقد يلد الأسى أفراحا ++ فالليل ينجب للحياة صباحا
    أبو الوليد غير متواجد حالياً

  3. #3
    تسجيل غير مقبول
    تاريخ التسجيل
    Nov 2002
    المشاركات
    250


    جزاك الله خيرا ..

    فعلا الفكره نظرياً جميله جدا

    ولكن عمليا لم اقم بعملها . قبل ذلك لدي عدة استفسارات ..

    في السعوديه كمثال تتشابه الايبي ( الرقتفي ) ومن الممكن ان تتبدل فما الحل ؟

    اتوقع ان كثرة المعلومات عن الزائر ممكن تفيد في هذه العمليه ..

    اذا كان كذلك فماذا نضيف لـ ..

    $vist_ip = getenv("REMOTE_ADDR");
    $vist_xip = getenv("HTTP_X_FORWARDED_FOR");
    $vist_time = time();

    اخيرا ما اقول الا كثر الله من امثالك ..

    تحياتي ..




    الاخ المشرف الله يريحك دنيا واخره ريحنا من الكوكيز هذا تراه ذبحني في سوالف





    LATE غير متواجد حالياً

  4. #4
    عضو نشيط جدا
    تاريخ التسجيل
    Apr 2001
    المشاركات
    541


    ليه الموضوع كذة ملخبط....
    على كل حال شكرا لك جزيل الشكر...
    وملاحظة بسيطة:
    ليه ما تشتغل في مجمع اللغة العربية في سوريا او مصر...
    ما شاء الله عليك مترجم بارع...تعرف تختار الترجمات الصحيحة..
    يعني مثلا الكوكيز = البصمة...
    ترجمة رائعة وليست حرفية....
    وافضل مثلا من ترجمتها ك( بسكويت) او (كعك ) او غيرها..او كتابتها كماهي بالانجليزية ولكن بحروف عربية (الكوكيز)..
    واجدد شكري لك ....واهنئك على الترجمة الجميلة





    __________________
    يا نبض الضفة لا تهدأ أعلنها ثورة
    حطم قيدك إجعل لحمك جسر العودة
    almuslet غير متواجد حالياً

  5. #5
    عضو سوبر نشيط
    تاريخ التسجيل
    Dec 2000
    المشاركات
    998


    أيها الإخوة : awilah
    LATE
    almuslet

    شكرا لكم

    الأخ : LATE
    بخصوص تغير الرقتفي (IP) فقد حدد في البرنامج السابق التحديث بمرور ساعة (3600 ثانية)

    وكما قلت سابقا، العداد قريب من الحقيقة وليس دقيقا.

    يمكنك إضافة نوع المتصفح أو النظام باستخدام

    getenv("HTTP_USER_AGENT");

    لتقريب الدقة.

    الأخ almuslet:

    ما الذي قلب رأسك في الموضوع


    أنا متخصص في اللغة العربية، وأنشأت موقعي ( الشنكبوتية ) من أجل هذه اللغة.

    وأما المجامع اللغوية فهي للأسف في الوقت الحالي بعضها مفسد للغة كمجمع مصر!
    فقد كان علما، وحصنا للغة العربية؛ لكنه انقلب في السنوات الأخيرة إلى ملهى لغوي.


    بخصوص ( البصمة ) هذه ليست من عندي، بل استفدتها من تعريب دليل PHP في قسم المصطلحات، حيث اقترحه أحد المشاركين أظنه عابر سبيل


    نرجع إلى الموضوع :

    الحل السابق لا ينفع مع مجلة php-nuke حيث لا يمكن الكتابة إلى ملف البصمة في الوحدات blocks!

    ولا أعلم السبب

    نتيجة لهذا لا بد من استخدام طريقة أخرى لحفظ المعلومات

    وسأذكر الطريقة الأولى إن شاء الله لاحقا





    __________________
    لا تعاند من إذا قال فعل
    الشنكبوتية
    اللغة العربية سياج هويتنا
    عبد الرحمن غير متواجد حالياً



  6. الاخ الاستاذ عبدالرحمن .
    الله يجزاك خير و يوفقك في الدنيا و الاخرة ( ترا اللحين وقت اجابة الدعاء . يوم الجمعه العصر )

    تحياتي
    اخوك ابو مشعل


    للرد على هذا الموضوع اضغط على
    http://www.swalif.net/softs/newreply...threadid=40404





    __________________
    أخوكم ابو مشعل
    ملاحظات لتنظيم المنتدى:
    http://www.swalif.net/softs/showthread.php?s=&threadid=42612
    ---------------
    ابو مشعل غير متواجد حالياً

  7. #7
    عضو نشيط
    تاريخ التسجيل
    Apr 2001
    المشاركات
    76


    السلام عليكم ورحمة الله وبركاته ..

    جزاك الله خيراً على ما ذكرت اخي عبدالرحمن ، لكني الموضوع حاذف يسـار شوي لذلك لا تظهر الأكواد بشكل سليم ، ما الحل .. ؟

    المشكلة ليست مشكلة برمجية، بل هي مشكلة أخلاقية
    صدقت .. وأعتقد أني لم انبه لذلك ، ولكن أوجدت حلاً ( ليس متوفراً لي الآن ) اعتقد أنه جيد ويحل المشكلة الأخلاقية التي ذكرته ..

    لعلي أعقب على الموضوع لاحقاً ..





    __________________
    الابداع .. 1% فكرة .. 99% جهد !!
    قرية بي اتش بي
    الدروس : 1 | 2 | 3 | 4 |
    5 | 6 | 7 | 8 | 9 | 10
    OneTo9 غير متواجد حالياً

  8. #8
    عضو سوبر نشيط
    تاريخ التسجيل
    Dec 2000
    المشاركات
    998


    اللهم آمين أخي أبا مشعل

    وجزيت خيرا

    الأخ 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

    ولكل طريقته ...





    __________________
    لا تعاند من إذا قال فعل
    الشنكبوتية
    اللغة العربية سياج هويتنا
    عبد الرحمن غير متواجد حالياً





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض