الفرق بين المراجعتين ل"PHP/session gc"

من موسوعة حسوب
< PHP
اذهب إلى التنقل اذهب إلى البحث
سطر 11: سطر 11:
  
 
تِلك الإحتمالات تعمل بشكل جيد إلى حد ما ولكن يوجد بعض المشاكل:
 
تِلك الإحتمالات تعمل بشكل جيد إلى حد ما ولكن يوجد بعض المشاكل:
# المواقع ذات مرور المُستخدمين المُنخفض قد لا يُحذف فيها البيانات المُهملة في فترة زمنية مُناسبة
+
# المواقع ذات مرور المُستخدمين المُنخفض قد لا يُحذف فيها البيانات المُهملة في فترة زمنية مُناسبة.
# المواقع ذات مرور المستخدمين العادي قد تتكرر بها البيانات المُهملة ولا يتم حذفها
+
# المواقع ذات مرور المستخدمين العادي قد تتكرر بها البيانات المُهملة ولا تُحذف.
# تُجمع البيانات المُهملة طِبقًا لطلب المُستخدم مِما قد يُسبب تأخير في جمع البيانات المُهملة
+
# تُجمع البيانات المُهملة طِبقًا لطلب المُستخدم مِما قد يُسبب تأخيرًا في جمع البيانات المُهملة.
لِذلك يُقترح تنفيذ دالة تجميع البيانات المُهملة دوريًا في أنظمة الإنتاج مِثل "cron" في الأنظمة شبيهة UNIX، وتأكد من عدم تفعيل الاحتمالات الافتراضية لجمع البيانات المُهملة عن طريق ضبط <code>[[php/session gc probability|session.gc_probability]]</code> إلى القيمة 0.
+
لِذلك يُقترح تجميع البيانات المُهملة دوريًا في أنظمة الإنتاج مِثل "cron" في الأنظمة الشبيهة بيونكس، وتأكد من عدم تفعيل الاحتمالات الافتراضية لجمع البيانات المُهملة عن طريق ضبط <code>session.gc_probability</code> إلى القيمة 0.
  
 
== القيم المعادة ==
 
== القيم المعادة ==
تُعيد الدالة <code>session_gc()</code>‎ عدد الملفات التي تم حذفها في حالة نجاحها والقيمة <code>FALSE</code> في حالة فشلها.
+
تُعيد الدالة <code>session_gc()</code>‎ عدد الملفات التي حُذِفَت في حالة نجاحها، والقيمة <code>FALSE</code> في حالة فشلها.
  
في حالة استخدام معاملات حفظ الملفات القديمة، لا تُعيد عدد الملفات المحذوفة، وإنما فقط علامات الفشل/النجاح. في هذه الحالة يُعاد رقم واحد في حالة نجاح الدالة مهما كان عدد الملفات المحذوفة.   
+
في حالة استخدام معاملات حفظ الملفات القديمة، لا تُعيد عدد الملفات المحذوفة، وإنما راية الفشل/النجاح فقط. في هذه الحالة يُعاد الرقم 1 في حالة نجاح الدالة مهما كان عدد الملفات المحذوفة.   
  
 
== أمثلة ==
 
== أمثلة ==
سطر 25: سطر 25:
 
<?php
 
<?php
  
// يجب أن ينفذ الكود في نفس الخادوم المُستخدم
+
// يجب أن تُنفذ الشيفرة في نفس الخادم المُستخدم
// يجب بداية الجلسة النشطة للولوج إلى مخازن البيانات
+
// يجب بداية الجلسة النشطة للوصول إلى مخازن البيانات
 
 
 
session_start();
 
session_start();
  
 
// بدء جمع البيانات المُهملة في الحال
 
// بدء جمع البيانات المُهملة في الحال
 
 
session_gc();
 
session_gc();
  
// مسح عنوان الجلسة الافتراضي الذي تم عمله بواسطة جامع البيانات المُهملة
+
// مسح عنوان الجلسة الافتراضي الذي أُنشِئ بواسطة جامع البيانات المُهملة
 
 
 
session_destroy();
 
session_destroy();
  
 
?>
 
?>
  
 
+
</syntaxhighlight>المثال 2: استخدام سكربت قابل للتنفيذ من المستخدم<syntaxhighlight lang="php">
</syntaxhighlight>المثال 2: استخدام الدالة للأكواد القابلة للولوج عن طريق المُستخدم<syntaxhighlight lang="php">
 
 
<?php
 
<?php
  
 
// لاحظ أنه يُفضل استخدام الدالة بواسطة مُدير المهام ولكن يُمكن استخدامها كالآتي  
 
// لاحظ أنه يُفضل استخدام الدالة بواسطة مُدير المهام ولكن يُمكن استخدامها كالآتي  
 
 
$gc_time = '/tmp/php_session_last_gc';
 
$gc_time = '/tmp/php_session_last_gc';
 
 
$gc_period = 1800;
 
$gc_period = 1800;
  
 
session_start();
 
session_start();
  
// يقوم بتنفيذ جامع البيانات المُهملة عند انتهاء مُدة جامع البيانات //الافتراضي 
+
// يقوم بتنفيذ جامع البيانات المُهملة عند انتهاء مُدة جامع البيانات الافتراضي 
 
 
 
if (file_exists($gc_time)) {
 
if (file_exists($gc_time)) {
 
 
    if (filemtime($gc_time) < time() - $gc_period) {
 
    if (filemtime($gc_time) < time() - $gc_period) {
 
 
        session_gc();
 
        session_gc();
 
 
        touch($gc_time);
 
        touch($gc_time);
 
 
    }
 
    }
 
 
} else {
 
} else {
 
 
    touch($gc_time);
 
    touch($gc_time);
 
 
}
 
}
 
 
?>
 
?>
  
سطر 76: سطر 61:
  
 
== انظر أيضًا ==
 
== انظر أيضًا ==
* الدالة <code>[[php/session start|session_start()‎]]</code>: تبدأ جلسة جديدة أو تستكمل جلسة موجودة.
+
* الدالة <code>[[PHP/session start|session_start()‎]]</code>: تبدأ جلسة جديدة أو تستكمل جلسة موجودة.
 
* الدالة <code>[[PHP/session destroy|session_destroy()‎]]</code>: تمسح جميع البيانات المُسجلة في الجلسة.
 
* الدالة <code>[[PHP/session destroy|session_destroy()‎]]</code>: تمسح جميع البيانات المُسجلة في الجلسة.
* <code>[[php/session gc probability|session.gc_probability]]</code>
 
  
 
== مصادر ==
 
== مصادر ==
 
* [http://php.net/manual/en/function.session-gc.php صفحة الدالة session_gc في توثيق PHP الرسمي.]
 
* [http://php.net/manual/en/function.session-gc.php صفحة الدالة session_gc في توثيق PHP الرسمي.]
 
[[تصنيف:PHP]]
 
[[تصنيف:PHP]]
 +
[[تصنيف:PHP Function]]
 
[[تصنيف:PHP Session]]
 
[[تصنيف:PHP Session]]

مراجعة 11:44، 18 أغسطس 2018

(PHP 7, PHP 7.1.0)

تجمع الدالة session_gc()‎ البيانات المُهملة garbage data)‎) .

الوصف

int session_gc ( void )

تجمع الدالة ()session_gc البيانات المُهملة (garbage data) . تعمل PHP على تجميع البيانات المُهملة افتراضيًا طِبقًا لاحتمالات افتراضية على الجلسة.

تِلك الإحتمالات تعمل بشكل جيد إلى حد ما ولكن يوجد بعض المشاكل:

  1. المواقع ذات مرور المُستخدمين المُنخفض قد لا يُحذف فيها البيانات المُهملة في فترة زمنية مُناسبة.
  2. المواقع ذات مرور المستخدمين العادي قد تتكرر بها البيانات المُهملة ولا تُحذف.
  3. تُجمع البيانات المُهملة طِبقًا لطلب المُستخدم مِما قد يُسبب تأخيرًا في جمع البيانات المُهملة.

لِذلك يُقترح تجميع البيانات المُهملة دوريًا في أنظمة الإنتاج مِثل "cron" في الأنظمة الشبيهة بيونكس، وتأكد من عدم تفعيل الاحتمالات الافتراضية لجمع البيانات المُهملة عن طريق ضبط session.gc_probability إلى القيمة 0.

القيم المعادة

تُعيد الدالة session_gc()‎ عدد الملفات التي حُذِفَت في حالة نجاحها، والقيمة FALSE في حالة فشلها.

في حالة استخدام معاملات حفظ الملفات القديمة، لا تُعيد عدد الملفات المحذوفة، وإنما راية الفشل/النجاح فقط. في هذه الحالة يُعاد الرقم 1 في حالة نجاح الدالة مهما كان عدد الملفات المحذوفة.   

أمثلة

المثال 1: شرح استخدام الدالة في حالة مُدير المهام مِثل "cron"

<?php

// يجب أن تُنفذ الشيفرة في نفس الخادم المُستخدم
// يجب بداية الجلسة النشطة للوصول إلى مخازن البيانات
session_start();

// بدء جمع البيانات المُهملة في الحال
session_gc();

// مسح عنوان الجلسة الافتراضي الذي أُنشِئ بواسطة جامع البيانات المُهملة
session_destroy();

?>

المثال 2: استخدام سكربت قابل للتنفيذ من المستخدم

<?php

// لاحظ أنه يُفضل استخدام الدالة بواسطة مُدير المهام ولكن يُمكن استخدامها كالآتي 
$gc_time = '/tmp/php_session_last_gc';
$gc_period = 1800;

session_start();

// يقوم بتنفيذ جامع البيانات المُهملة عند انتهاء مُدة جامع البيانات الافتراضي 
if (file_exists($gc_time)) {
    if (filemtime($gc_time) < time() - $gc_period) {
        session_gc();
        touch($gc_time);
    }
} else {
    touch($gc_time);
}
?>

انظر أيضًا

  • الدالة session_start()‎: تبدأ جلسة جديدة أو تستكمل جلسة موجودة.
  • الدالة session_destroy()‎: تمسح جميع البيانات المُسجلة في الجلسة.

مصادر