PHP للبرمجة النظامية: أداة غير متوقعة في ترسانة المطور

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

PHP للبرمجة النظامية: كسر الصور النمطية



عندما نسمع "البرمجة النظامية"، تتبادر إلى الذهن فوراً لغات مثل C أو Rust أو Go. PHP؟ بجدية؟ بالتأكيد. معظم المطورين لا يدركون حتى أن PHP ليست فقط للنماذج الإلكترونية و WordPress. إنها لغة كاملة قادرة على إدارة العمليات، والعمل مع المآخذ، وإنشاء الخلفيات، والتفاعل مع نواة نظام التشغيل. في هذه المقالة، سنستعرض كيف يمكن أن تصبح PHP أداتك للبرمجة النظامية، وسنقدم أمثلة حقيقية على الكود.



لماذا هذا ضروري أصلاً؟ تخيل: تحتاج إلى كتابة أداة لمراقبة الخادم، أو معالج سجلات في الوقت الفعلي، أو مجدول مهام بسيط. أنت تعرف PHP، وإعادة التعلم إلى C لمهمة بسيطة هو إفراط في التكلفة. PHP للبرمجة النظامية تسمح لك بحل هذه المهام بسرعة وبدون ألم. دعنا نتعمق أكثر.



ما هي البرمجة النظامية باستخدام PHP؟



البرمجة النظامية هي تطوير برامج تتفاعل مع الأجهزة ونظام التشغيل على مستوى منخفض. في PHP، هذا ممكن بفضل الإضافات pcntl و posix و sockets والوظائف المدمجة للتعامل مع الملفات والعمليات. PHP ليست مصممة لكتابة برامج التشغيل، ولكنها مناسبة تماماً لإنشاء الأدوات النظامية والخلفيات وبرامج الأتمتة النصية.



الإمكانيات الرئيسية لـ PHP للبرمجة النظامية



  • إدارة العمليات — الإنشاء، الإنهاء، الانتظار (pcntl_fork, pcntl_wait).
  • الإشارات — معالجة SIGTERM و SIGHUP وغيرها (pcntl_signal).
  • صلاحيات الوصول — العمل مع UID و GID والأقنعة (posix_getuid, posix_setuid).
  • المآخذ — إنشاء خوادم وعملاء (socket_create, socket_bind).
  • نظام الملفات — inode، الروابط الصلبة، مراقبة التغييرات (inotify).
  • التنفيذ المتوازي — تعدد العمليات، الخيوط (pthreads، العمليات المتوازية).


كل هذه الإمكانيات متاحة "مباشرة من الصندوق" أو من خلال الإضافات القياسية. لا حاجة لأي مكتبات خارجية.



مثال 1: خلفية مراقبة باستخدام PHP



لنكتب خلفية بسيطة تتحقق كل 10 ثوانٍ مما إذا كانت عملية nginx قيد التشغيل، وتكتب سجلاً. هذه مهمة كلاسيكية في البرمجة النظامية.



<?php// خلفية لمراقبة nginxdeclare(ticks = 1);

// نبدأ كخلفيةfunction daemonize() { $pid = pcntl_fork(); if ($pid == -1) { die("خطأ في التفرع"); } elseif ($pid) { // العملية الأم تنتهي exit(0); } // العملية الابنة — جلسة جديدة posix_setsid();}

daemonize();

// معالجة الإشاراتpcntl_signal(SIGTERM, function($signo) { file_put_contents('/var/log/monitor.log', "تم استلام SIGTERM، سأنهي", FILE_APPEND); exit(0);});

// الحلقة الرئيسيةwhile (true) { // نتحقق من nginx عبر shell_exec $output = shell_exec('pgrep nginx | wc -l'); $count = trim($output); $log = "[" . date('Y-m-d H:i:s') . "] عدد عمليات nginx: " . $count . ""; file_put_contents('/var/log/monitor.log', $log, FILE_APPEND); sleep(10);}?>


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



مثال 2: معالجة متوازية للبيانات باستخدام التفرعات



تخيل أنك بحاجة لمعالجة 1000 ملف سجل. المعالجة المتسلسلة ستستغرق ساعات. نستخدم تعدد العمليات في PHP.



<?php$files = glob('/var/log/*.log');$maxWorkers = 4;$workers = [];

foreach ($files as $file) { // إذا وصلنا إلى حد العمال — ننتظر حتى ينتهي أحدهم while (count($workers) >=

المدونات

توصيات الكتب