PHP لدى EGPHP

كل ما نبنيه يبدأ بلغة PHP.

يكتب فريقنا PHP ويشغّلها منذ خمسة وعشرين عامًا، أي منذ PHP 4. والخوادم ولوحة التحكم والمواقع التي نرعاها كلها تبدأ من هنا.

خمسة وعشرون عامًا، إصدارًا بعد إصدار

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

  1. PHP 4 2000

    الجلسات وتخزين المخرجات مؤقتًا، ضمن اللغة

    وصل Zend Engine، فصارت الجلسات وتخزين المخرجات مؤقتًا جزءًا من اللغة بدلًا من إضافات خارجية. وعليه كُتب جيل كامل من المواقع الديناميكية الأولى.

    • Zend Engine
    • session_start()
    • ob_start()
    ماذا عنى لنا

    هنا بدأ فريقنا: مواقع مكتوبة يدويًا على خوادم مشتركة، وما زال register_globals مفعّلًا.

  2. PHP 5.0 2004

    نموذج كائنات حقيقي

    جاء Zend Engine 2 بأصناف ذات مستويات وصول، وبالواجهات والاستثناءات، وبكائنات تُمرَّر بمقبضها بدلًا من نسخها، وبامتدادَي MySQLi وSimpleXML.

    • private
    • interface
    • try / catch
    • mysqli
    ماذا عنى لنا

    صار بالإمكان تنظيم الشيفرة في أصناف يتشاركها الفريق، وحصلت قاعدة البيانات على مشغّل حديث.

  3. PHP 5.3 2009

    مساحات الأسماء والدوال المغلقة

    مساحات الأسماء والدوال المجهولة والربط الساكن المتأخر: الأساس الذي بُني عليه لاحقًا Composer ومنظومة الحزم المشتركة.

    • namespace
    • function () use ()
    • static::
    ماذا عنى لنا

    أخيرًا صار بإمكان مكتبات من مؤلفين مختلفين أن تتعايش في مشروع واحد دون أن تتصادم أسماؤها.

  4. PHP 5.4 2012

    السمات والمصفوفات المختصرة وحملة تنظيف عطّل الشيفرة القديمة

    السمات، وصيغة المصفوفات المختصرة []، وخادم تطوير مدمج، بينما أُزيلت register_globals والاقتباسات السحرية (magic quotes) والوضع الآمن (safe mode) نهائيًا.

    • trait
    • [ ]
    • php -S
    ماذا عنى لنا

    توقفت المواقع القديمة المعتمدة على register_globals عن العمل، وصارت ترقيتها تعني إصلاحها أولًا.

  5. PHP 5.5 2013

    OPcache مدمج في PHP

    صار OPcache يأتي مع PHP نفسها ويحفظ السكربتات المترجمة في الذاكرة، إلى جانب المولّدات والدالة password_hash().

    • opcache
    • yield
    • password_hash()
    ماذا عنى لنا

    شيفرة مترجمة تبقى في الذاكرة بدلًا من إعادة قراءتها مع كل طلب. وما زال أول إعداد نفحصه على أي خادم PHP.

  6. PHP 6 لم يصدر قط

    الإصدار الذي لم يصدر قط

    خُطط لإصدار PHP 6 حول دعم أصيل لسلاسل Unicode النصية، ثم جرى التخلي عنه. وحمل الإصدار التالي الرقم 7 حتى لا يُخلط بينه وبين الكتب والخطط التي كُتبت للإصدار 6.

  7. PHP 7.0 2015

    قفزة السرعة عطّل الشيفرة القديمة

    محرك أُعيد بناؤه، وصفه مشروع PHP بأنه أسرع بما يصل إلى الضعف من 5.6 مع استهلاك أقل للذاكرة، إضافةً إلى تصريحات الأنواع البسيطة وأنواع القيم المُرجعة، والعاملَين ?? و <=>.

    • int $id
    • : string
    • ??
    • <=>
    ماذا عنى لنا

    أُزيلت دوال mysql_* القديمة، وكان ذلك سببًا متكررًا لتعطّل المواقع القديمة عند هذه الترقية.

  8. PHP 7.4 2019

    الخصائص محددة النوع والتحميل المسبق

    الخصائص محددة النوع، والدوال السهمية، والعامل ??=، والتحميل المسبق في OPcache، وFFI.

    • public int $id
    • fn ($x) =>
    • ??=
    ماذا عنى لنا

    آخر إصدارات 7.x، والإصدار الذي بقيت عليه تطبيقات قديمة كثيرة أطول مدة، ولهذا ما زلنا ننقل مواقع منه.

  9. PHP 8.0 2020

    JIT والواصفات والوسائط المسمّاة عطّل الشيفرة القديمة

    مترجم JIT، والواصفات، والوسائط المسمّاة، وأنواع الاتحاد، وتعبير match، وعامل الأمان من القيم الفارغة ?->، وترقية خصائص المُنشئ.

    • #[Attribute]
    • match
    • ?->
    • JIT
    ماذا عنى لنا

    تحوّلت تحذيرات كثيرة إلى أخطاء، وتغيّرت المقارنة بين النصوص والأرقام، فقد تتوقف على 8.0 شيفرةٌ كانت تعمل بهدوء على 7.4.

  10. PHP 8.1 2021

    التعدادات والقراءة فقط والألياف

    تعدادات أصيلة، وخصائص للقراءة فقط، والألياف (fibers)، ونوع الإرجاع never، وصيغة الاستدعاءات من الدرجة الأولى.

    • enum
    • readonly
    • Fiber
    • never
    ماذا عنى لنا

    فتحت الألياف الطريق أمام مكتبات PHP غير المتزامنة، دون تغيير طريقة تنفيذ الطلب العادي.

  11. PHP 8.2 2022

    أصناف للقراءة فقط، وتحذير للشيفرة القديمة

    أصناف للقراءة فقط، وأنواع DNF، والقيم true وfalse وnull أنواعًا مستقلة، وامتداد Random جديد.

    • readonly class
    • (A&B)|null
    • Random\Randomizer
    ماذا عنى لنا

    أُعلن إهمال الخصائص الديناميكية، فملأت الإضافات القديمة السجلات بالتنبيهات حتى حُدّثت.

  12. PHP 8.3 2023

    الثوابت محددة النوع والواصفة #[\Override]

    ثوابت أصناف محددة النوع، والواصفة #[\Override]، والدالة json_validate()، وجلب ثوابت الأصناف ديناميكيًا.

    • const string
    • #[\Override]
    • json_validate()
    ماذا عنى لنا

    إصدار أهدأ، ما يجعله خطوة سهلة للمواقع التي تعمل على 8.2 أصلًا.

  13. PHP 8.4 2024

    خطافات الخصائص

    خطافات الخصائص، ومستويات وصول غير متماثلة، والكائنات الكسولة، ومحلّل DOM يفهم HTML5، وكتابة new MyClass()->method() دون الأقواس الإضافية.

    • get { }
    • public private(set)
    • Dom\HTMLDocument
    ماذا عنى لنا

    دوال القراءة والتعيين التي كانت تحتاج كلٌّ منها إلى دالة مستقلة صارت جزءًا من الخاصية نفسها، فتقلّ الشيفرة التي تحتاج إلى صيانة.

  14. PHP 8.5 2025

    عامل الأنبوب الحالي

    عامل الأنبوب |>، وامتداد URI مدمج، وclone with، والواصفة #[\NoDiscard]، والدالتان array_first() وarray_last()، وتتبّع الاستدعاءات عند الأخطاء الفادحة.

    • |>
    • Uri\Rfc3986\Uri
    • clone($o, [ ])
    ماذا عنى لنا

    سلسلة الإصدارات الحالية، وعليها نبدأ المواقع الجديدة حين تدعمها شيفرتها.

السنوات هي سنوات الإصدار الأول لكل نسخة، كما وردت في سجل الإصدارات الخاص بمشروع PHP نفسه.

تتبّع طلبًا واحدًا عبر طبقات المنظومة

تمرّ الصفحة على موقع PHP بخمس طبقات في طريقها إلى الداخل، ثم تعود صاعدةً عبر الطبقات الخمس نفسها في طريقها إلى الخارج. نحن نرعى كل واحدة منها، ولكلٍّ منها صفحتها الخاصة.

  1. الزائر

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

  2. خادم الويب

    يستقبل Nginx أو LiteSpeed الاتصال، ويقدّم الصور والملفات بنفسه، ولا يمرّر إلى المجمّع الذي خلفه إلا عمل PHP.

  3. بيئة تشغيل PHP

    مجمّعات PHP-FPM، مجمّع لكل موقع، كلٌّ منها على إصدار PHP الذي تحتاجه شيفرته، مع OPcache ساخن وعمليات محسوبة على حجم الزيارات.

  4. شيفرتك

    يحوّل إطار عمل أو منصة جاهزة الطلب إلى صفحة: تطبيق Laravel الخاص بك، أو WordPress وMagento وMoodle وغيرها.

  5. البيانات

    يحفظ MySQL أو MariaDB السجلات، ويُبقي Redis في الذاكرة ما يُطلب مرة بعد مرة.

تحت الطبقات الخمس

الخادم نفسه

خوادمنا نحن، يديرها الفريق نفسه، وفوقها لوحة التحكم الخاصة بنا.

الانتقال إلى PHP أحدث دون صباح عصيب

لكل موقع مجمّعه الخاص، فيستطيع خادم واحد تشغيل عدة إصدارات من PHP جنبًا إلى جنب، وينتقل كل موقع حين تجهز شيفرته، لا حين يجهز الخادم.

  1. نحصر ما يعمل عليه كل موقع

    إصدار PHP الخاص به، وامتداداته، والإضافات أو الحزم التي تعيقه.

  2. نسخة تجرّب الإصدار الجديد

    يُنسخ الموقع ويُشغَّل على إصدار PHP التالي، ويُقرأ سجل أخطائه سطرًا سطرًا.

  3. نصلح ما يتعطّل

    تُصلَح أو تُستبدل الدوال المُزالة، والاستدعاءات المُهمَلة، والإضافات التي لا تحديث لها.

  4. موقعًا بعد موقع

    ينتقل كل موقع إلى مجمّعه الجديد وحده، ويمكن إعادته فورًا إن فات شيء.

php-fpmخادم واحد، إصدارات متعددة
الموقعPHPالمجمّعالحالة
shop.example.com 8.4 fpm-shop مباشر
blog.example.com 8.3 fpm-blog مباشر
crm.example.com 7.4 → 8.3 fpm-crm على نسخة
learn.example.com 8.3 fpm-learn مباشر
خادم على سبيل المثال

أحضر لنا مشروعك على PHP

موقع قديم يحتاج إلى PHP أحدث، أو منصة تريد تثبيتها، أو خادم يشغّل ذلك كله. نسعّر كل مهمة بعد محادثة قصيرة.