عليك أن تغير من طريقة تفكيرك لحل مثل هذا النوع من المشاكل.
واضع أنك تحتاج Multi-threading أو Asynchronous Programming لحل هذه المشكلة
PHP بطبيعتها لا تدعم تعدد الخيوط (MultiThreading) إلا عن طريق إضافة خاصة
قم بوضع الكود الذي يأخذ وقتاً طويلاً في Thread خاص به، وضع عليه مؤقتاً Timer.
أما إذا لم يكن لديك وصول لتركيب هذه الإضافة، فعليك تغيير لغة البرمجة، إلى Java أو Python مثلاً
خطر في بالي السيناريو التالي :
تفتح جلسة session وفي السطر قبل الدالة تسند القيمة on لمتغير ما على الجلسة.
تنفذ الدالة بداخل Thread لكن في نهاية كود الدالة تغير قيمة الجلسة الى off.
في السطر مابعد الدالة تعمل sleep لـ 30 ثانية.
في السطر بعد sleep تعمل شرط اذا كانت الجلسة قيمتها on تعمل kill للـ Thread.
ثم تنفذ باقي الاكواد.
ممكن تستعين بهذه المكتبة في موضوع الـ Thread.
سؤالك غير واضح باي لغة تعمل وهل ممكن مثال علي ما تريد ؟
لو كان عندك ملف فية 10 دوال مثلاً
وهناك دالة فيهم ربما تأخذ وقت فى التنفيذ 60 ثانية وأنت لا تريد أن تتجاوز هذة الدالة مثلاً ال 30 ثانية
وتريد أن تغلق عمل الدالة أو تتجاوزها بعد ال 30 ثانية
أو بمعنى آخر أعطاء وقت معين للتنفيذ فى أحد اجزاء ملف ال php
تفضل
شكراً لك
أنا مريت على المواضع دى فعلياً أشكرك مرة أخرى لكن المشكلة لو أن حلقة التكرار مثلا التى تأخذ 60 ثانية تأتى قبل هذا الكود
if ((time() - $start_time) > 300) {
فى راى أفضل حل أن تكون الدالة فى ملف آخر ويتم إرسال البيانات لها POST مع تحديد وقت 30 ثانية
لكنى أبحث عن حل أقرب
نعم أخي هذا هو أفضل حل ,
الفكرة هي عمل شيء مشابه لطريقة البرمجة asynchronous للموجود في javascript
كنت أبحث عن هذا الموضوع منذ بضعت أيام , وجدت هذا المقال [1] الذي يتحدث عن كل الطرق الممكنة لعمل ذلك وأفضلها .
[1]
طالما أن السيرفر الخاص بك لا يمكنه معالجة البيانات فى خلال فترة زمنية قصيرة فأنت يجب أن تحترم حدود السيرفر ولا ترهقه بدوال تجعله overloaded
إعمل على تقليل ما تستهلكه الدالة و تقسيم عملها على عدة مراحل و إسنادها إلى ال Cron jobs
من الممكن كذلك تقسيم أعمالك عبر عدة سيرفرات و بناء API على أحدهم يقوم بتوزيع ال Load عليهم
فمثلاً يقوم السيرفر رقم A بإستعلام عن 100 Row و تقوم بإرسال 50 منهم إلى سيرفر B و 50 إلى سيرفر C .. ثم تلتقط الناتج منهم بعد إنتهاء المعالجة
تحياتى
لأ مش موضوع سيرفر أو أرهاق
المشكلة دى حصلت معايا فى برنامج خاص بالنظم الخبيرة والمفترض هيشارك فية أكثر من مبرمج وكل مبرمج له اكواده الخاصة
فمش عايز كود لأى مبرمج يتجاوز فترة زمنية معينة هو دا كل ما فى الموضوع
ان كنت تقصد لغة ال PHP
يوجد اضافة لل PHP لدعم ال
Event-driven, non-blocking I/O
وهو ان شاءالله ماتبحث عنه
مجتمع للمبرمجين من جميع المستويات لتبادل المعرفة والخبرات. ناقش لغات البرمجة المختلفة، الحلول البرمجية، والمشاريع.
صمم موقعك كاملا بالسحب والإفلات بدون خبرة برمجية، واحجز مكانك على الإنترنت.