هل لدى PHP التحكم في الوظيفة مثل باش؟
-
27-09-2019 - |
سؤال
هل يدعم PHP شيئًا مثل Ampersand في Bash (Forking)؟ دعنا نقول أنني أردت استخدام حليقة على صفحتين ويبان بشكل متزامن ، لذلك لا يتعين على البرنامج النصي الانتظار قبل أن يكون الأمر الأول لاتفاقية Curl ، كيف يمكن للمرء أن يحقق ذلك في PHP؟ شيء من هذا القبيل في باش:
curl www.google.com &
curl www.yahoo.com &
wait
المحلول
هل يدعم PHP شيئًا مثل Ampersand في Bash (Forking)؟
رقم. انظر الإجابات الأخرى ، على الرغم من أنني أشير إلى أن امتداد PCNTL هو UNIX فقط.
... كيف يمكن للمرء تحقيق ذلك في PHP؟*
يدعم Curl تشغيل تنزيلات متعددة بشكل متزامن.
نصائح أخرى
يمكنك استخدام popen
أو proc_open
لفتح عملية واتركها تعمل في الخلفية ، ولكن لا يوجد دعم لغوي لعمليات الخلفية مثل bash
(التي تم إجراؤها لتشغيل المهام ، على أي حال ؛ تم صنع PHP للأشياء البرمجة النصية).
باستخدام proc_open ، يمكنك بعد ذلك الاستخدام proc_get_status
لمعرفة متى يتم إنهاء العمليات. أخشى أنه لا يوجد wait
ما يعادل.
يمكنك كتابة أساليب غير متزامنة إذا كنت ترغب حقًا في ذلك ، لكنها الكثير من العمل ، وربما فكرة تصميم فظيعة إذا كنت تستخدم PHP.
غالبًا ما يكون نوعًا من آلية قائمة الانتظار هو الأفضل. Gearman هي آلية قائمة انتظار مفتوحة المصدر يمكنك استخدامها. لديّ أيضًا منشور مدونة على قائمة انتظار وظيفة Zend Server التي تتحدث عن تشغيل المهام بشكل غير متزامن هل تصطف؟ مقدمة في قائمة انتظار وظيفة Zend Server.
يمكنك أيضًا استخدام شيء مثل فصول قائمة انتظار Zend Framework لتنفيذ بعض الأعمال غير المتزامنة. Zend_queue