تطوير تطبيقات CLI متعددة المنصات باستخدام PHP

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

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

ابدأ الدورة

PHP ليس فقط لتطوير الويب

\n\n

عندما يُذكر اسم "PHP"، يتخيل معظم المطورين فورًا صفحات الويب الديناميكية، سلة التسوق في المتاجر الإلكترونية، أو واجهات WordPress الخلفية. هذا منطقي، فاللغة وُلدت كأداة لتطوير الويب. لكن ماذا لو أخبرتك أن PHP يمكنها أداء مهام تُناط عادةً بلغات مثل Python أو Bash أو Go؟ نحن نتحدث عن تطوير PHP متعدد المنصات — أي بناء أدوات تعمل على Windows وLinux وmacOS دون الحاجة لإعادة كتابة الكود.

\n\n

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

\n\n

هل أنت مستعد؟ افتح الطرفية (Terminal) واستعد للدهشة من إمكانيات PHP العريقة.

\n\n

لماذا PHP للمهام متعددة المنصات؟ ثلاثة أسباب قوية

\n\n

قبل الغوص في الكود، دعنا نفهم لماذا نستخدم PHP لأدوات سطح الخادم وسطح المكتب. لدى Python إطارات Django وFlask، ولدى Node.js إطار Express. فلماذا PHP؟

\n\n
    \n
  • التوفر الشامل. PHP مثبت على几乎所有 استضافات المشاركة (shared hosting) وعلى 80% من خوادم العالم. إذا كنت تكتب أداة إدارية، فمن المحتمل جدًا أن PHP موجود بالفعل على الجهاز المستهدف. لا حاجة لتثبيت بيئة تشغيل إضافية.
  • \n
  • سهولة التعلم لمطوري الويب. أنت تعرف بالفعل بناء الجملة (syntax)، ودوال التعامل مع النصوص والمصفوفات. لست بحاجة لتعلم لغة جديدة لأتمتة المهام الروتينية على الخادم.
  • \n
  • مكتبة قياسية غنية. تحتوي PHP على كل ما تحتاجه للتعامل مع الملفات، العمليات، مآخذ الشبكة، وأرشيفات zip. كما أن إضافات PECL مثل parallel أو pthreads تضيف إمكانيات المعالجة المتعددة.
  • \n
\n\n

بالطبع، PHP ليست مثالية لتطبيقات الواجهات الرسومية (GUI) (رغم وجود PHP-GTK). لكن بالنسبة لأدوات سطر الأوامر والخدمات الخلفية (daemons)، فهي أداة ناضجة ومستقرة. دعنا نرى كيف نكتب هذا الكود بشكل صحيح.

\n\n

أساسيات كود PHP متعدد المنصات

\n\n

أول شيء يجب تذكره: فواصل المسارات. في Linux، الفاصل هو /، وفي Windows هو \\. توفر PHP الثابت DIRECTORY_SEPARATOR، لكن الأسهل استخدام الشرطة المائلة للأمام / — فـ Windows يفهمها جيدًا منذ PHP 7+.

\n\n

التعامل الصحيح مع المسارات

\n\n
<?php\n// خطأ — شرطة مائلة ثابتة\n$path = '/var/log/errors.log'; // سيفشل على Windows\n\n// جيد — استخدام DIRECTORY_SEPARATOR\n$path = 'var' . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . 'errors.log';\n\n// ممتاز — استخدام / مع realpath()\n$path = __DIR__ . '/logs/errors.log';\necho $path; // يعمل على كلا النظامين\n?>\n
\n\n

النقطة المهمة الثانية هي الترميز (encoding). في Windows، تعمل وحدة التحكم (console) افتراضيًا بترميز CP866، بينما تعمل سكريبتات PHP بترميز UTF-8. لإخراج النصوص العربية أو السيريلية في Windows، استخدم الدالة mb_convert_encoding() أو عيّن الترميز عبر chcp 65001 في بداية السكريبت.

\n\n

مثال: قراءة ملف متعددة المنصات

\n\n
<?php\nfunction readLogFile(string $filename): string {\n    // التحقق من وجود الملف\n    if (!file_exists($filename)) {\n        throw new RuntimeException("الملف $filename غير موجود");\n    }\n    \n    // قراءة المحتوى\n    $content = file_get_contents($filename);\n    \n    // تحديد نظام التشغيل وتحويل الترميز للإخراج\n    if (PHP_OS_FAMILY === 'Windows') {\n        $content = mb_convert_encoding($content, 'CP866', 'UTF-8');\n    }\n    \n    return $content;\n}\n\necho readLogFile('logs/app.log');\n?>\n
\n\n

بناء أداة حقيقية: مراقبة التغييرات في مجلد

\n\n

دعنا نكتب شيئًا مفيدًا — سكريبت يراقب مجلدًا وي

المدونات

توصيات الكتب