Serverless على PHP: AWS Lambda وبدائل للباك إند بدون خادم

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

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

ابدأ الدورة

PHP بدون خادم: خرافة أم حقيقة؟

\n\n

عندما تسمع عبارة "دوال Serverless"، فإن أول ارتباط يتبادر إلى الذهن عادةً هو Node.js أو Python. تبدو PHP وكأنها كتلة صلبة تعيش على Apache أو Nginx الأبدي. لكن الأوقات تتغير. اليوم، PHP في بنية serverless ليست أمرًا غريبًا، بل هي أداة عمل لآلاف المشاريع. يمكنك كتابة خدمات مصغرة، ومعالجة webhooks، وتغيير حجم الصور، وحتى تشغيل واجهات برمجة تطبيقات كاملة، دون التفكير في الخوادم، أو التوسع، أو دفع ثمن القدرات الخاملة.

\n\n

في هذه المقالة، سنشرح كيف يعمل PHP على AWS Lambda، وما هي البدائل المتاحة (Bref، OpenFaaS، Vercel)، والأهم من ذلك، سنكتب كودًا حقيقيًا يمكن تشغيله فورًا. إذا كنت مطور PHP وتريد الانتقال إلى التطوير الحديث السحابي الأصلي، فأنت في المكان الصحيح.

\n\n

ما هو Serverless ولماذا يحتاجه مطور PHP؟

\n\n

Serverless (أو FaaS — Functions as a Service) هو نموذج حيث تقوم بتحميل الكود الخاص بك، ويقرر المزود بنفسه متى وكيف يشغله. أنت تدفع فقط مقابل وقت التنفيذ الفعلي. لا أجهزة افتراضية، ولا "Apache" يستهلك الذاكرة 24/7. بالنسبة لـ PHP، التي طالما اعتُبرت "لغة للاستضافة عبر FTP"، فهذا نَفَس من الهواء النقي.

\n\n

مزايا مشاريع PHP:

\n
    \n
  • توفير — لا حاجة لاستضافة خادم كامل من أجل سكريبت واحد.
  • \n
  • توسع تلقائي — Lambda تنشئ نسخًا من الدالة تلقائيًا عند زيادة الحمل.
  • \n
  • سهولة النشر — حمّل الكود، وسيعمل.
  • \n
  • نهج الخدمات المصغرة — يمكن تقسيم الكتلة الواحدة إلى دوال صغيرة.
  • \n
\n\n

المشكلة: PHP لا يدعم Serverless بشكل افتراضي

\n\n

PHP التقليدية ليست خفيّة (daemon). يتم تشغيلها، وتنفيذ السكريبت، ثم تنتهي. بالنسبة لـ Lambda، هذه مشكلة: يجب أن تكون الدالة "باردة" وتبدأ في غضون أجزاء من الثانية. PHP العادية تبدأ ببطء (تحميل الإطار، التحميل التلقائي، الإعدادات). الحل هو Bref.

\n\n

Bref — الأداة الرئيسية لـ Serverless PHP

\n\n

Bref هي حزمة SDK ووقت تشغيل مفتوح المصدر يحول PHP إلى دالة Lambda أصلية. يقوم بتجميع PHP في ملف ثنائي ثابت (عبر bref/bref)، مما يعطي بداية باردة فورية. يدعم Bref Laravel و Symfony و Slim وأي كود مخصص.

\n\n

كيف يعمل Bref؟

\n

تكتب فئة PHP عادية، وتنفذ الواجهة Bref\\Context\\Context، ويتولى Bref معالجة HTTP. بالنسبة لواجهة API، تكفي دالة واحدة.

\n\n

مثال: واجهة API Serverless على PHP لإنشاء رموز QR

\n

لنفترض أننا بحاجة لاستقبال طلب POST بنص وإرجاع رمز QR بتنسيق PNG. نكتب الدالة:

\n\n
<?php\n// handler.php\nrequire __DIR__ . '/vendor/autoload.php';\n\nuse Bref\\Context\\Context;\nuse Bref\\Event\\Http\\HttpHandler;\nuse chillerlan\\QRCode\\QRCode;\nuse chillerlan\\QRCode\\QROptions;\n\nclass QrGenerator extends HttpHandler\n{\n    public function handleRequest($request, Context $context): array\n    {\n        $body = json_decode($request->getBody()->getContents(), true);\n        $text = $body['text'] ?? 'Hello, Serverless!';\n        \n        $options = new QROptions([\n            'outputType' => QRCode::OUTPUT_IMAGE_PNG,\n            'imageBase64' => false,\n        ]);\n        \n        $qrcode = new QRCode($options);\n        $imageData = $qrcode->render($text);\n        \n        return [\n            'headers' => ['Content-Type' => 'image/png'],\n            'statusCode' => 200,\n            'body' => base64_encode($imageData),\n            'isBase64Encoded' => true,\n        ];\n    }\n}\n\nreturn new QrGenerator();
\n\n

النشر على AWS Lambda عبر Bref

\n

قم بتثبيت واجهة سطر الأوامر Bref ونفّذ:

\n
composer require bref/bref\n./vendor/bin/bref init\n./vendor/bin/bref deploy
\n

كل شيء. بعد دقيقة، سيكون لديك نقطة نهاية HTTPS،

المدونات

توصيات الكتب