كيف تنفّذ شيفرة PHP في الخلفية؟


محمد طاهر الموسوي

قد تحتاج في بعض الأحيان إلى تشغيل شيفرة معيّنة دون انتظار المستخدم للقيام بذلك، يمكنك - والحال هذه - أن تنفّذ الشيفرة في الخلفية وأن تخفيها عن المستخدم، وبهذا تزيد من سرعة وفعّالية موقعك الإلكتروني.

تعتمد هذه الطريقة على ما يسمى بشيفرات الصدفة Shell script في نظام Linux، حيث يتم تشغيل العمليات في الخلفية، ويمكنك إضافة مهمّة (كأن يكون أمرًا أو شيفرة) في الخلفية وذلك بإضافة الرمز & إلى نهاية سطر الأوامر، والذي سيؤدي إلى وضع الأمر في الخلفية وتهيئة الطرفية لاستقبال أوامر أخرى. يصطلح على الأمر الذي يتم في الخلفية بالشغل Job. جدير بالذكر أنّه يمكن كتابة أوامر أخرى في الوقت الذي يتم فيه تشغيل الأمر في الخلفية.

{command} &

// مثال:
ls -l & exec php index.php > /dev/null 2>&1 & echo $!

يمكن التحقق من العمليات التي يتم إجراءها في الوقت الحاضر في الخلفية على Linux بواسطة الأوامر التالية:

ps -l (يسرد هذا الأمر جميع العمليات)
ps -ef (يسرد هذا الأمر جميع العمليات مع تفاصيل كاملة)

ولتنفيذ الأمر من خلال شيفرة php في الخلفية يمكن استخدام الشيفرة التالية:

nohup exec arg1 arg2 > /dev/null &
// مثال:
nohup exec php process.php hello world > /dev/null &

ما هو nohup؟

في معظم الأحيان تقوم بتسجيل الدخول إلى الخادوم البعيد من خلال ssh، ويؤدي الخروج من الخادوم إلى إلغاء جميع شيفرات الصدفة والأوامر التي يتم تنفيذها في تلك اللحظة. ولكن تحتاج بعض الأشغال والأوامر وقتًا طويلًا للتنفيذ لذا يستحسن أن تنفّذ الشغل في الخلفية، ولكن إن سجلت الخروج من النظام، فإن الصدفة ستقوم بإيقاف جميع الأشغال الجارية.

هنا يأتي دور nohup. تتيح هذه الأداة تنفيذ الأوامر والعمليات وشيفرات الصدفة وضمان استمرار عملها في الخلفية حتى بعد تسجيل الخروج من الصدفة.

nohup command syntax: nohup command-name &

ما هو exec؟

يستخدم هذا الأمر لتنفيذ العمليات في Linux، ويمكن من خلاله تنفيذ أمر واحد أو أكثر في نفس الوقت.

كيف تستخدم هذه المكتبة في شيفرتك؟

الخطوة الأولى: أنشئ ملفّين الأول باسم index.php والثاني process.php.

الخطوة الثانية: استورد الملف PHPBackgroundProcesser.php إلى ملف index.php

الخطوة الثالثة: أنشئ نسخة instance من الصنف BackgroundProcess.

يمكنك الآن اتباع إحدى الطرق التالية:

الطريقة الأولى:

$proc=new BackgroundProcess('exec php <BASE_PATH>/process.php hello world');

الطريقة الثانية:

$proc=new BackgroundProcess();
$proc->setCmd('exec php <BASE_PATH>/process.php hello world');
$proc->start();

الطريقة الثالثة:

$proc=new BackgroundProcess();
$proc->setCmd('exec php <BASE_PATH>/process.php hello world')->start();

يمكنك كذلك تنفيذ عنوان PHP URL في الخلفية دون الحاجة إلى تحديد ملف بصيغة .php.

$process=new BackgroundProcess("curl -s -o <Base Path>/log/log_storewav.log <PHP URL to execute> -d param_key=<Param_value>");

يمكن معرفة العمليات التي يتم تنفيذها بواسطة الشيفرة التالية:

$proc=new BackgroundProcess();
print_r($proc->showAllPocess());

أما إيقاف العمليات فيكون عن طريق الشيفرة التالية:

$proc=new BackgroundProcess();
$proc->setProcessId(101)->stop(); //set the process id.

ترجمة - وبتصرّف - للمقال How to run a php script in background لصاحبه Sanjay Panda.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن