ماهي لغة بي اتش بي PHP و ما هي استعمالاتها

PHP هي لغة برمجة نصية للأغراض العامة موجهة نحو تطوير الويب .  تم إنشاؤه في الأصل من قبل المبرمج الكندي الدنماركي Rasmus Lerdorf في عام 1994.  يتم الآن إنتاج تطبيق PHP المرجعي بواسطة مجموعة PHP.  كانت PHP تعني في الأصل الصفحة الرئيسية الشخصية ،  لكنها الآن تعني التهيئة العودية PHP: Hypertext Preprocessor . 

وعادة ما يتم معالجتها PHP كود على خادم الويب من قبل PHP مترجم تنفيذها باعتبارها وحدة ، وهو الخفي أو باعتباره واجهة العبارة الشائعة (CGI) القابلة للتنفيذ. على خادم الويب ، ستشكل نتيجة شفرة PHP التي تم تفسيرها وتنفيذها – والتي قد تكون أي نوع من البيانات ، مثل بيانات HTML التي تم إنشاؤها أو بيانات الصورة الثنائية – كامل أو جزء من استجابة HTTP . مختلف أنظمة قالب شبكة الإنترنت ، على شبكة الإنترنت ونظم إدارة المحتوى ، و الأطر على شبكة الإنترنتموجودة والتي يمكن توظيفها لتنظيم أو تسهيل توليد تلك الاستجابة. بالإضافة إلى ذلك، PHP يمكن استخدامها لكثير من المهام البرمجة خارج سياق شبكة الإنترنت، مثل قائمة بذاتها التطبيقات الرسومية  و الآلية بدون طيار السيطرة.  يمكن أيضًا تنفيذ كود PHP مباشرة من سطر الأوامر .

مترجم PHP القياسي ، المدعوم من Zend Engine ، هو برنامج مجاني تم إصداره بموجب ترخيص PHP . تم PHP استدار على نطاق واسع، ويمكن نشرها على معظم خوادم الويب على مجموعة متنوعة من أنظمة التشغيل و المنصات . 

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

أفادت W3Techs أنه اعتبارًا من أبريل 2021 ، “يتم استخدام PHP بواسطة 79.2٪ من جميع مواقع الويب التي نعرف لغة البرمجة من جانب الخادم الخاصة بها.” 

التاريخ 

راسموس ليردورف ، مبتكر PHP ؛ و Andi Gutmans و Zeev Suraski ، مبتكرو محرك Zend

التاريخ المبكر 

بدأ تطوير PHP في عام 1994 عندما كتب Rasmus Lerdorf العديد من برامج Common Gateway Interface (CGI) في لغة C ،   والتي استخدمها للحفاظ على صفحته الرئيسية الشخصية . قام بتوسيعها للعمل مع نماذج الويب والتواصل مع قواعد البيانات ، وأطلق على هذا التنفيذ اسم “الصفحة الرئيسية الشخصية / مترجم النماذج” أو PHP / FI.

يمكن استخدام PHP / FI لبناء تطبيقات ويب بسيطة وديناميكية . لتسريع الإبلاغ عن الأخطاء وتحسين الكود ، أعلن Lerdorf في البداية عن إصدار PHP / FI باسم “أدوات الصفحة الرئيسية الشخصية (أدوات PHP) الإصدار 1.0” في مجموعة مناقشة Usenet comp.infosystems.www.authoring.cgi في 8 يونيو 1995 .   هذا الإصدار يحتوي بالفعل على الوظائف الأساسية الموجودة في PHP اليوم. وشمل ذلك المتغيرات المشابهة لـ Perl ، والتعامل مع النماذج ، والقدرة على تضمين HTML . كانت البنية تشبه تلك الموجودة في لغة بيرل ، ولكنها كانت أبسط وأكثر محدودية وأقل اتساقًا. 

مثال على بناء جملة PHP المبكر : 

<!--include /text/header.html-->

<!--getenv HTTP_USER_AGENT-->
<!--if substr $exec_result Mozilla-->
  Hey, you are using Netscape!<p>
<!--endif-->

<!--sql database select * from table where user='$username'-->
<!--ifless $numentries 1-->
  Sorry, that record does not exist<p>
<!--endif exit-->
  Welcome <!--$user-->!<p>
  You have <!--$index:0--> credits left in your account.<p>

<!--include /text/footer.html-->

لم يكن القصد من PHP أن تكون لغة برمجة جديدة ، ونمت بشكل طبيعي ، مع ملاحظة Lerdorf في الماضي: “لا أعرف كيف أوقفها ، لم يكن هناك أي نية لكتابة لغة برمجة لدي ليس لدي أي فكرة على الإطلاق عن كيفية كتابة لغة برمجة ، فقد واصلت إضافة الخطوة المنطقية التالية على الطريق. ”  بدأ فريق التطوير في التشكيل ، وبعد شهور من العمل والاختبار التجريبي ، أطلق رسميًا PHP / FI 2 في نوفمبر 1997.

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

PHP 3 و 4 

هذا مثال على كود PHP لنظام إدارة محتوى WordPress .

زيف سوراسكي و أندي غوتمانز أعاد كتابة محلل في عام 1997 وشكلت قاعدة PHP 3، وتغيير اسم اللغة إلى عودي اختصار PHP: النص التشعبي قبل المعالج .   بعد ذلك ، بدأ الاختبار العام لـ PHP 3 ، وجاء الإطلاق الرسمي في يونيو 1998. ثم بدأ Suraski و Gutmans إعادة كتابة جديدة لنواة PHP ، وأنتجوا محرك Zend في 1999.  كما أسسا Zend تقنيات في رمات جان ، إسرائيل . 

في 22 مايو 2000 ، تم إصدار PHP 4 ، المشغل بواسطة Zend Engine 1.0.  بحلول أغسطس 2008 ، وصل هذا الفرع إلى الإصدار 4.4.9. PHP 4 لم يعد الآن قيد التطوير ولم يتم التخطيط لإصدار أية تحديثات أمنية.  

PHP 5 

في 1 يوليو 2004 ، تم إصدار PHP 5 ، بدعم من Zend Engine II الجديد.  تضمنت PHP 5 ميزات جديدة مثل الدعم المحسن للبرمجة الموجهة للكائنات ، وامتداد PHP Data Objects (PDO) (الذي يحدد واجهة خفيفة الوزن ومتسقة للوصول إلى قواعد البيانات) ، والعديد من تحسينات الأداء.  في عام 2008 ، أصبحت PHP 5 النسخة المستقرة الوحيدة قيد التطوير. كان الارتباط الثابت المتأخر مفقودًا من الإصدارات السابقة من PHP ، وتمت إضافته في الإصدار 5.3.  

توقفت العديد من المشاريع مفتوحة المصدر رفيعة المستوى عن دعم PHP 4 في كود جديد اعتبارًا من 5 فبراير 2008 ، بسبب مبادرة GoPHP5 ،  المقدمة من مجموعة من مطوري PHP للترويج للانتقال من PHP 4 إلى PHP 5.  

بمرور الوقت ، أصبح مترجمي PHP متاحين في معظم أنظمة التشغيل الحالية 32 بت و 64 بت ، إما عن طريق بنائها من كود مصدر PHP ، أو باستخدام ثنائيات مسبقة البناء.  بالنسبة للإصدارات 5.3 و 5.4 من PHP ، كانت التوزيعات الثنائية الوحيدة المتاحة من Microsoft Windows هي إصدارات IA-32 32 بت ،   تتطلب وضع توافق Windows 32 بت أثناء استخدام خدمات معلومات الإنترنت (IIS) على 64 منصة ويندوز بت. أتاح الإصدار 5.5 من PHP إصدارات 64 بت x86-64 لنظام التشغيل Microsoft Windows. 

انتهى دعم الأمان الرسمي لـ PHP 5.6 في 31 ديسمبر 2018. 

PHP 6 و Unicode 

تلقت PHP مراجعات مختلطة بسبب نقص دعم Unicode الأصلي على مستوى اللغة الأساسية.   في عام 2005 ، بدأ مشروع برئاسة Andrei Zmievski لجلب دعم Unicode الأصلي في جميع أنحاء PHP ، من خلال تضمين المكونات الدولية لمكتبة Unicode (ICU) ، وتمثيل سلاسل نصية كـ UTF-16 داخليًا.  نظرًا لأن هذا قد يتسبب في تغييرات كبيرة في كل من الأجزاء الداخلية للغة وكود المستخدم ، فقد تم التخطيط لإصدار هذا كإصدار 6.0 من اللغة ، إلى جانب ميزات رئيسية أخرى قيد التطوير. 

ومع ذلك ، أدى النقص في المطورين الذين فهموا التغييرات الضرورية ، ومشاكل الأداء الناشئة عن التحويل من وإلى UTF-16 ، والذي نادرًا ما يستخدم في سياق الويب ، إلى تأخيرات في المشروع.  نتيجة لذلك ، تم إنشاء إصدار PHP 5.3 في عام 2009 ، مع العديد من ميزات non-Unicode التي تم نقلها للخلف من PHP 6 ، ولا سيما مساحات الأسماء. في مارس 2010 ، تم التخلي رسميًا عن المشروع في شكله الحالي ، وتم إعداد إصدار PHP 5.4 يحتوي على معظم ميزات غير Unicode المتبقية من PHP 6 ، مثل السمات وإعادة ربط الإغلاق.  كانت الآمال الأولية أن يتم تشكيل خطة جديدة لتكامل Unicode ، ولكن بحلول عام 2014 لم يتم اعتماد أي منها.

PHP 7 

خلال عامي 2014 و 2015 ، تم تطوير إصدار رئيسي جديد من PHP ، PHP 7. تضمن ترقيم هذه النسخة بعض الجدل بين المطورين الداخليين.  بينما لم يتم إطلاق تجربة PHP 6 Unicode مطلقًا ، أشارت العديد من المقالات وعناوين الكتب إلى اسم PHP 6 ، مما قد يتسبب في حدوث ارتباك إذا أعاد إصدار جديد استخدام الاسم.  بعد التصويت ، تم اختيار اسم PHP 7. 

أساس PHP 7 هو فرع PHP أطلق عليه في الأصل PHP للجيل القادم ( phpng ). قام بتأليفه ديمتري ستوجوف ، شينتشين هوي ، ونيكيتا بوبوف ،  وكان يهدف إلى تحسين أداء PHP من خلال إعادة هيكلة محرك Zend مع الاحتفاظ بتوافق اللغة شبه الكامل.  بحلول 14 يوليو 2014 ، أظهرت المعايير المستندة إلى WordPress ، والتي كانت بمثابة مجموعة مرجعية رئيسية لمشروع phpng ، زيادة بنسبة 100٪ تقريبًا في الأداء. تسهل التغييرات من phpng تحسين الأداء في الإصدارات المستقبلية ، حيث يُنظر إلى هياكل البيانات الأكثر إحكاما والتغييرات الأخرى على أنها أكثر ملاءمة لترحيل ناجح إلى مترجم في الوقت المناسب (JIT). بسبب التغييرات الكبيرة ، أطلق على محرك Zend المعاد صياغته اسم Zend Engine 3 ، خلفًا لمحرك Zend 2 المستخدم في PHP 5. 

بسبب التغييرات الداخلية الرئيسية في phpng ، يجب أن يتلقى رقم إصدار رئيسي جديد من PHP ، بدلاً من إصدار PHP 5 ثانوي ، وفقًا لعملية إصدار PHP.  يُسمح للإصدارات الرئيسية من PHP بفك التوافق مع الإصدارات السابقة من التعليمات البرمجية ، وبالتالي قدمت PHP 7 فرصة لتحسينات أخرى تتجاوز phpng والتي تتطلب فواصل التوافق مع الإصدارات السابقة. على وجه الخصوص ، تضمنت التغييرات التالية:

  • تم استبدال العديد من آليات أخطاء PHP القاتلة أو القابلة للاسترداد على مستوى الاستثناءات الحديثة الموجهة للكائنات . 
  • وقد أعيدت صياغتها بناء الجملة من أجل dereferencing متغير ليكون أكثر اتساقا داخليا وكاملة، والسماح للاستخدام من المشغلين ->، ، ()، {}، و ::، مع التعسفية التعبيرات في الجانب الأيسر ذات مغزى. 
  • تم إهمال دعم أساليب المُنشئ القديمة لـ PHP 4. 
  • تم تغيير سلوك foreachالبيان ليكون أكثر قابلية للتنبؤ. 
  • تم تغيير مُنشِئات الفئات القليلة المضمنة في PHP والتي كانت تُرجع قيمة خالية عند الفشل لإلقاء استثناء بدلاً من ذلك ، من أجل التناسق. 
  • تمت إزالة العديد من واجهات برمجة تطبيقات الخادم (SAPI) والامتدادات التي لم تتم صيانتها أو المهملة من نواة PHP ، وأبرزها mysqlالامتداد القديم . 
  • list()تم تغيير سلوك المشغل لإزالة دعم السلاسل. 
  • تمت إزالة الدعم لمحددات نمط ASP القديمة <%و %>و <script language="php"> ... </script>
  • تم إصلاح سهو يسمح لبيان التبديل بأن يكون له عدة defaultفقرات. 
  • تمت إزالة دعم دعم الرقم السداسي العشري في بعض التحويلات الضمنية من السلاسل إلى أنواع الأرقام. 
  • على اليسار التحول و التحول الصحيح تم تغيير المشغلين أن تتصرف على نحو أكثر اتساقا عبر منصات. 
  • تم تغيير التحويلات بين أرقام الفاصلة العائمة والأعداد الصحيحة (على سبيل المثال ، تم تغيير اللانهاية للتحويل إلى صفر) وتم تنفيذها بشكل أكثر اتساقًا عبر الأنظمة الأساسية.  

تضمنت PHP 7 أيضًا ميزات لغة جديدة. والجدير بالذكر أنه قدم إعلانات نوع الإرجاع للوظائف  التي تكمل إعلانات نوع المعلمة الحالية ، ودعم الأنواع العددية (عدد صحيح ، عدد عشري ، سلسلة ، ومنطقية) في تعريفات نوع المعامل والإرجاع. 

PHP 8 

تم إصدار PHP 8 في 26 نوفمبر 2020. PHP 8 هو إصدار رئيسي ولديه تغييرات كبيرة عن الإصدارات السابقة.   تشمل الميزات الجديدة والتغييرات الملحوظة ما يلي:

تجميع في الوقت المناسب 

الترجمة في الوقت المناسب مدعومة في PHP 8. 

يمكن لمجمع PHP 8’s JIT تقديم تحسينات جوهرية في الأداء لبعض حالات الاستخدام ،   بينما صرح مطور PHP نيكيتا بوبوف أن تحسينات الأداء لمعظم مواقع الويب ستكون أقل جوهرية من الترقية من PHP 5 إلى PHP 7.  من المتوقع حدوث تحسينات كبيرة في العمليات الرياضية أكثر من حالات استخدام تطوير الويب الشائعة.  بالإضافة إلى ذلك ، يوفر مترجم JIT إمكانية مستقبلية لنقل بعض الكود من C إلى PHP ، بسبب تحسينات الأداء لبعض حالات الاستخدام. 

اقرأ ايضا :  ما هي البرمجة و لغات البرمجة ؟

إضافة تعبير المطابقة 

المقال الرئيسي: بناء جملة PHP ودلالاتها § تطابق

قدم PHP 8 matchالتعبير.  تعبير المطابقة يشبه من الناحية المفاهيمية switchالعبارة ويكون أكثر إحكاما في بعض حالات الاستخدام.  نظرًا لأنه matchتعبير ، يمكن ضبط نتيجته في متغير أو إرجاعها من دالة. 

اكتب التغييرات والإضافات 

قدم PHP 8 أنواع الاتحاد staticونوع إرجاع جديد mixedونوع جديد . 

تمت إضافة “السمات” ، التي يشار إليها غالبًا باسم “التعليقات التوضيحية” في لغات البرمجة الأخرى ، في PHP 8 ، مما يسمح بإضافة البيانات الوصفية إلى الفئات. 

throwتم تغييره من كونه بيانًا إلى كونه تعبيرًا.  هذا يسمح بوضع استثناءات في الأماكن التي لم تكن ممكنة من قبل. 

تغييرات وإضافات في بناء الجملة 

يتضمن PHP 8 تغييرات للسماح ببناء جمل بديل أو أكثر إيجازًا أو أكثر اتساقًا في عدد من السيناريوهات. على سبيل المثال، المشغل nullsafe مشابه ل مشغل ائتلافه لاغية ?? ، ولكنها تستخدم عند استدعاء أساليب.  لن يؤدي مقتطف الشفرة التالي إلى ظهور خطأ إذا تم getBirthday()إرجاعه فارغًا:

$human_readable_date = $user->getBirthday()?->diffForHumans();

تمت إضافة ترقية خاصية المُنشئ كـ ” سكر نحوي ” ، مما يسمح بتعيين خصائص الفئة تلقائيًا عند تمرير المعلمات إلى مُنشئ فئة .  هذا يقلل من كمية الشفرة المعيارية التي يجب كتابتها.

تشمل التغييرات الطفيفة الأخرى دعم الاستخدام ::classعلى الكائنات ، والتي تعمل كبديل لاستخدام get_class()؛  المصيد غير الملتقط في كتل المحاولة ؛ تعديلات بناء الجملة المتغيرة لحل التناقضات ؛ دعم الحجج المسماة ؛ ودعم الفواصل اللاحقة في قوائم المعلمات ، مما يضيف الاتساق مع دعم الفواصل اللاحقة في سياقات أخرى ، مثل المصفوفات.

التغييرات والإضافات القياسية للمكتبة 

  • تمت إضافة خرائط ضعيفة في PHP 8. WeakMapتحتوي A على مراجع للكائنات ، لكن هذه المراجع لا تمنع تجميع مثل هذه الكائنات .  يمكن أن يوفر هذا تحسينات في الأداء في السيناريوهات حيث يتم تخزين البيانات مؤقتًا ؛ هذا له أهمية خاصة لـ ORMs . 
  • تعديلات مختلفة على الواجهات ، مثل إضافة دعم لإنشاء DateTimeكائنات من واجهات ، وإضافة Stringableواجهة يمكن استخدامها لتلميحات الكتابة.
  • وظائف جديدة مختلفة بما في ذلك str_contains () و str_starts_with () و str_ends_with () ؛  fdiv () ؛ get_debug_type () ، و get_resource_id ()
  • تنفيذ كائن token_get_all ()

تغييرات إضافية 

  • تمت إضافة التعليقات التوضيحية من النوع أيضًا إلى التعليمات البرمجية المصدر لـ PHP نفسها للسماح للوظائف والطرق الداخلية بالحصول على “معلومات كاملة عن النوع في الانعكاس”. 
  • الميراث بأساليب خاصة
  • الأساليب المجردة في تحسين السمات

تاريخ الإصدار 

إصدارتاريخ النشرمعتمد حتى [82]ملحوظات
1.08 يونيو 1995يطلق عليها رسميًا “أدوات الصفحة الرئيسية الشخصية (أدوات PHP)”. هذا هو أول استخدام لاسم “PHP”. [9]
2.01 نوفمبر 1997يطلق عليه رسميًا “PHP / FI 2.0”. هذا هو الإصدار الأول الذي يمكن وصفه بالفعل بـ PHP ، كونها لغة قائمة بذاتها مع العديد من الميزات التي صمدت حتى يومنا هذا.
3.06 يونيو 199820 أكتوبر 2000 [82]ينتقل التطوير من شخص واحد إلى عدة مطورين. أعاد زيف سوراسكي وآندي جوتمان كتابة الأساس لهذا الإصدار. [9]
4.022 مايو 2000 [83]23 يونيو 2001 [82]تمت إضافة نظام تحليل / تنفيذ أكثر تقدمًا على مرحلتين يسمى محرك Zend. [84]
4.110 كانون الأول / ديسمبر 2001 [85]12 مارس 2002 [82]قدم “superglobals” ( $_GET، $_POST، $_SESSION، الخ) [84]
4.222 أبريل 2002 [86]6 سبتمبر 2002 [82]معطل register_globalsبشكل افتراضي. لم يعد يتم إدخال البيانات الواردة عبر الشبكة مباشرة في مساحة الاسم العالمية بعد الآن ، مما يؤدي إلى إغلاق الثغرات الأمنية المحتملة في التطبيقات. [84]
4.327 ديسمبر 2002 [87]31 مارس 2005 [82]تقديم واجهة سطر الأوامر (CLI) ، لتكملة CGI. [84] [88]
4.411 يوليو 2005 [89]7 أغسطس 2008 [82]تم إصلاح خطأ تلف الذاكرة ، والذي تطلب كسر التوافق الثنائي مع الامتدادات المجمعة على إصدار PHP 4.3.x. [90]
5.013 يوليو 2004 [91]5 سبتمبر 2005 [82]Zend Engine II مع نموذج كائن جديد. [92]
5.124 تشرين الثاني (نوفمبر) 2005 [93]24 أغسطس 2006 [82]تحسينات في الأداء مع إدخال متغيرات المترجم في محرك PHP المعاد هندسته. [92] تمت إضافة كائنات بيانات PHP (PDO) كواجهة متسقة للوصول إلى قواعد البيانات. [94]
5.22 تشرين الثاني (نوفمبر) 2006 [95]6 يناير 2011 [82]تم تمكين امتداد المرشح افتراضيًا. دعم JSON الأصلي . [92]
5.330 يونيو 2009 [96]14 أغسطس 2014 [82]دعم Namespace . الارتباطات ثابتة في وقت متأخر ، والتسمية قفزة (محدودة غوتو )، وظائف مجهولة ، إغلاق ، PHP المحفوظات (PHAR)، جمع القمامة للحصول على مراجع دائرية، وتحسين ويندوز الدعم، sqlite3، mysqlnd كبديل لlibmysql كما الكامنة مكتبة لملحقات هذا العمل مع الخلية ، fileinfo كبديل لـ mime_magic للحصول على دعم MIME أفضل ، وامتداد التدويل ، وإيقاف امتداد ereg.
5.41 مارس 2012 [97]3 سبتمبر 2015 [82]دعم السمات ، دعم بناء جملة قصير. إزالة البنود: register_globals، safe_mode، allow_call_time_pass_reference، ، و . خادم الويب المدمج. [98] العديد من التحسينات على الميزات الموجودة والأداء ومتطلبات الذاكرة المخفضة. session_register()session_unregister()session_is_registered()
5.520 يونيو 2013 [99]10 يوليو 2016 [100]دعم المولدات ، finallyوحظر التعامل مع الاستثناءات ، و OpCache (على أساس Zend Optimizer +) المجمعة في التوزيع الرسمي. [101]
5.628 أغسطس 2014 [102]31 ديسمبر 2018 [100]التعبيرات العددية الثابتة ، الدوال المتغيرة ، تفريغ الوسيطة ، مشغل الأس الجديد ، امتدادات useبيان الدوال والثوابت ، phpdbgمصحح الأخطاء الجديد كوحدة نمطية SAPI ، وتحسينات أخرى أصغر. [103]
6.xلم يفرج عنهغير متاحنسخة مهجورة من PHP والتي خططت لتضمين دعم Unicode الأصلي. [104] [105]
7.03 ديسمبر 2015 [106]10 يناير 2019 [52]Zend Engine 3 (تحسينات الأداء [50] ودعم عدد صحيح 64 بت على Windows [107] ) ، بناء جملة متغير منتظم ، [54] عملية تجميع تعتمد على AST ، [108] مضاف ، [109] إزاحة متناسقة عبر الأنظمة الأساسية ، [ 110] ( الاندماج الفارغ ) عامل ، [111] صيغة هروب نقطة كود Unicode ، [112] تعريفات نوع الإرجاع ، [65] إعلانات النوع القياسي (عدد صحيح ، عدد عشري ، سلسلة و منطقية) ، [66] مقارنة ثلاثية الاتجاهات “سفينة الفضاء” عامل ، [113] مولدClosure::call() ?? <=> التفويض ، [114] فئات مجهولة ، [115] واجهة CSPRNG API أبسط وأكثر اتساقًا ، [116] استبدال العديد من “أخطاء” PHP الداخلية المتبقية مع الاستثناءات الأكثر حداثة ، [53] وبناء الجملة المختصرة لاستيراد عناصر متعددة من مساحة الاسم . [117]
7.11 ديسمبر 20161 ديسمبر 2019 [100]نوع الإرجاع الفارغ ، [118] معدِّلات الرؤية الثابتة للفئة [119]
7.230 نوفمبر 201730 نوفمبر 2020 [100]معلمة الكائن وإعلان نوع الإرجاع ، [120] امتداد Libsodium ، [121] تجاوز الطريقة المجردة ، [122] توسيع نوع المعلمة [123]
7.36 ديسمبر 2018 [124]6 ديسمبر 2021بناء جمل Heredoc و Nowdoc المرن ، [125] دعم إسناد المرجع وتفكيك الصفيف مع list () ، [126] دعم PCRE2 ، [127] hrtime () وظيفة [128]
7.428 نوفمبر 2019 [129]28 نوفمبر 2022الخصائص المكتوبة 2.0 ، [130] التحميل المسبق ، [131] عامل تخصيص الاندماج الصفري ، [132] تحسين openssl_random_pseudo_bytes ، [133] مراجع ضعيفة ، [79] FFI – واجهة دالة خارجية ، [134] امتداد تجزئة متاح دائمًا ، [135] سجل تجزئة كلمة المرور ، [136] تقسيم سلسلة متعددة البايت ، [137] انعكاس للمراجع ، [138] فك تجميع ext / wddx ، [139] آلية تسلسل كائن مخصصة جديدة [140]
8.026 نوفمبر 2020 [141]26 نوفمبر 2023تجميع Just-In-Time (JIT) ،  المصفوفات التي تبدأ بمؤشر سالب ، [142] دلالات لغة أكثر صرامة / أكثر صرامة (التحقق من صحة طرق السمات المجردة) ، [143] سلسلة معقمة إلى مقارنات رقمية ، [144] سلاسل ، [145] خطأ في النوع في معاملات حسابية / بت غير صالحة ، [146] إعادة تصنيف أخطاء المحرك المختلفة ، [147] أخطاء النوع المتناسقة للوظائف الداخلية ، [148] خطأ فادح لتوقيعات الطريقة غير المتوافقة [149] ) ، عائم مستقل عن اللغة لتحويل سلسلة ، [150] تعديلات بناء الجملة المتغيرة ، [151] سمة ،[152] [153] [154] [155] الوسيطات المسماة ،  تعبير المطابقة ،  ترقية خاصية المُنشئ ،  أنواع الاتحاد ،  النوع المختلط ،  نوع الإرجاع الثابت ،  عامل nullsafe ،  مسكات غير ملتقطة،  تعبيررملي،  امتداد JSON متاح دائمًا. [163]
8.125 نوفمبر 2021؟؟ نوفمبر 2024التدوين الحرفي للعدد الصحيح الثماني ، [164] التعدادات [165]
أسطورة:نسخة قديمةنسخة أقدم ، لا تزال محفوظةاحدث اصدارأحدث إصدار للمعاينةالإصدار المستقبلي

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

التميمة 

تميمة elePHPant و PHP

تميمة مشروع PHP هي elePHPant ، وهو فيل أزرق يحمل شعار PHP على جانبه ، صممه Vincent Pontier  في عام 1998.  “كانت الحروف (PHP) تشكل شكل فيل إذا تم عرضها في زاوية جانبية “.  أحيانًا يكون لون elePHPant مختلفًا عندما يكون في شكل لعبة قطيفة .

تم إجراء العديد من الاختلافات في هذا التميمة على مر السنين. فقط elePHPants التي تستند إلى التصميم الأصلي من قبل Vincent Pontier تعتبر رسمية من قبل المجتمع.  يمكن تحصيلها وبعضها نادر للغاية. 

بناء الجملة 

المقال الرئيسي: بناء جملة PHP ودلالاتهاتطبيق “Hello World” في PHP 7.4 يعمل على خادم تطوير مضيف محلي

ما يلي “Hello، World!” البرنامج مكتوب في كود PHP مضمن في مستند HTML :

<! DOCTYPE html> 
< html > 
    < head > 
        < title > PHP "Hello، World!" البرنامج </ title > 
    </ head > 
    < body >
        <؟ php
            صدى  '<p> مرحبا العالم! </ p>' ؛
        ؟>
    </ body > 
</ html >

ومع ذلك ، نظرًا لعدم وجود متطلبات لتضمين كود PHP في HTML ، فإن أبسط إصدار من Hello، World! يمكن كتابتها على هذا النحو ، مع حذف علامة الإغلاق كما هو مفضل في الملفات التي تحتوي على كود PHP خالص ?>

<؟ php 
    echo  "Hello، World!" ؛ 
؟>

مترجم PHP ينفذ فقط كود PHP ضمن محدداته . لا تتم معالجة أي شيء خارج المحددات الخاصة به بواسطة PHP ، على الرغم من أن النص غير PHP لا يزال يخضع لهياكل التحكم الموضحة في كود PHP. المحددات الأكثر شيوعًا هي <?phpفتح وإغلاق أقسام PHP. النموذج المختصر موجود أيضا. يجعل هذا المحدِّد القصير ملفات البرامج النصية أقل قابلية للنقل ، حيث يمكن تعطيل دعمها في تكوين PHP المحلي وبالتالي لا يُنصح بذلك.   بالمقابل ، لا توجد توصية ضد علامة echo القصيرة .  قبل إصدار PHP 5.4.0 ، كانت هذه الصيغة القصيرة تعمل فقط مع امتداد?><?<?=echoshort_open_tagتم تمكين إعداد التكوين ، بينما يتوفر دائمًا في PHP 5.4.0 والإصدارات الأحدث.    الغرض من كل هذه المحددات هو فصل كود PHP عن محتوى غير PHP ، مثل كود JavaScript أو ترميز HTML.  لذا فإن أقصر عبارة “Hello، World!” البرنامج المكتوب بلغة PHP هو:

<؟ = "مرحبًا بالعالم!" ؛

أول شكل من أشكال المحددات، <?phpو ، في XHTML وغيرها XML الوثائق، يخلق شكل إرشادات المعالجة XML بشكل صحيح.  هذا يعني أن المزيج الناتج من كود PHP والترميز الآخر في ملف جانب الخادم هو نفسه XML منسق جيدًا. ?>

تكون مسبوقة متغيرات مع رمز الدولار ، و نوع لا تحتاج إلى أن تكون محددة مسبقا. قدمت PHP 5 تعريفات النوع التي تسمح للوظائف بفرض معاملاتها لتكون كائنات من فئة أو مصفوفات أو واجهات أو وظائف رد اتصال معينة . ومع ذلك ، قبل PHP 7 ، لا يمكن استخدام تعريفات النوع مع الأنواع العددية مثل عدد صحيح أو سلسلة. 

اقرأ ايضا :  ماهي لغة HTML و كيف تستعمل

فيما يلي مثال على كيفية الإعلان عن متغيرات PHP وتهيئتها.

<؟ php 
    $ name  =  'John' ؛   // متغير من نوع السلسلة يتم التصريح عنه وتهيئته 
    $ age  =  18 ؛        // متغير من نوع العدد الصحيح يتم التصريح عنه وتهيئته 
    $ height  =  5.3 ؛    // متغير من النوع المزدوج يتم الإعلان عنه وتهيئة 
    echo  $ name  .  "هو"  .  ارتفاع دولار  .  "الطول \ n" ؛  // سلسلة المتغيرات والسلاسل 
    صدى  " $ name هو $ العمر سنة." ؛  // استيفاء المتغيرات إلى السلسلة 
؟>

على عكس أسماء الوظائف والفئات ، فإن أسماء المتغيرات حساسة لحالة الأحرف. توفر كل من السلاسل ذات علامات الاقتباس المزدوجة (“”) والرابطية القدرة على إقحام قيمة متغير في السلسلة.  تتعامل PHP مع الأسطر الجديدة على أنها مسافة بيضاء بطريقة اللغة ذات الشكل الحر ، ويتم إنهاء العبارات بفاصلة منقوطة.  PHP لها ثلاثة أنواع من بناء جملة التعليقات : /* */العلامات على الكتل والتعليقات المضمنة؛ //أو #تستخدم للتعليقات ذات السطر الواحد.  و echoالبيان هو واحد من عدة مرافق يوفر PHP إلى النص الإخراج.

من حيث الكلمات الأساسية وبناء جملة اللغة ، فإن PHP تشبه بناء جملة النمط C. ifالظروف، forو whileالحلقات، وترجع الدالة متشابهة في بناء جملة لغات مثل C، C ++، C #، جافا وبيرل.

أنواع البيانات 

يتم كتابة PHP بشكل فضفاض . يقوم بتخزين الأعداد الصحيحة في مجموعة والتي تعتمد على منصة، إما 32، 64 أو 128 بت وقعت صحيح يعادل نوع طويل C-لغة . يتم تحويل الأعداد الصحيحة غير الموقعة إلى قيم موقعة في مواقف معينة ، وهو سلوك يختلف عن العديد من لغات البرمجة الأخرى.  يمكن تعيين المتغيرات عدد صحيح باستخدام عشري (الإيجابية والسلبية)، ثماني ، عشري ، و ثنائي الملاحظات.

يتم أيضًا تخزين أرقام الفاصلة العائمة في نطاق خاص بالمنصة. يمكن تحديدها باستخدام تدوين الفاصلة العائمة ، أو شكلين من التدوين العلمي .  PHP لها نوع منطقي أصلي مشابه للأنواع المنطقية الأصلية في Java و C ++ . باستخدام قواعد التحويل من النوع المنطقي ، يتم تفسير القيم غير الصفرية على أنها صحيحة والصفر على أنها خطأ ، كما هو الحال في Perl و C ++. 

يمثل نوع البيانات الفارغة متغيرًا ليس له قيمة ؛ NULLهي القيمة الوحيدة المسموح بها لنوع البيانات هذا. 

تمثل المتغيرات من نوع “المورد” إشارات إلى موارد من مصادر خارجية. يتم إنشاء هذه عادةً بواسطة وظائف من امتداد معين ، ولا يمكن معالجتها إلا من خلال وظائف من نفس الامتداد ؛ تتضمن الأمثلة موارد الملفات والصورة وقاعدة البيانات. 

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

و PHP مكتبة قياسي (SPL) يحاول حل المشاكل القياسية والأدوات الفعالة واجهات الوصول إلى البيانات والطبقات. 

وظائف 

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

يمكن للمطور تحديد الوظائف المخصصة:

function  myAge ( int  $ birthYear ) :  string 
{ 
    // احسب العمر بطرح سنة الميلاد من السنة الحالية. 
    $ yearsOld  =  التاريخ ( 'Y' )  -  $ birthYear ؛

    // إرجاع العمر في سلسلة وصفية. 
    العودة  $ yearsOld  .  "عام"  .  ( $ yearsOld  ! =  1  ؟  's' : '' )؛ 
}

صدى  "أنا حاليا"  .  myAge ( 1995 )  .  ' قديم.' ؛

في عام 2021 ، كان ناتج البرنامج النموذجي أعلاه هو “عمري حاليًا 26 عامًا”.

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

حتى PHP 5.3، ودعم وظائف مجهول و الإغلاق لم تكن موجودة في PHP. على الرغم من وجوده create_function()منذ PHP 4.0.1 ، فهو مجرد غلاف رفيع eval()يسمح بإنشاء وظائف PHP العادية أثناء تنفيذ البرنامج.  PHP 5.3 أضاف بناء جملة لتعريف دالة مجهولة أو ” إغلاق ”  والذي يمكنه التقاط متغيرات من النطاق المحيط. تمت إضافة صيغة سهم الاختزال في PHP 7.4: 

دالة  getAdder ( $ x )  { 
    return  fn ( $ y )  =>  $ x  +  $ y ؛ 
}

$ adder  =  getAdder ( 8 ) ؛ 
صدى  $ adder ( 2 ) ؛  // طباعة "10"

في المثال أعلاه ، getAdder()تنشئ الدالة إغلاقًا باستخدام الوسيطة التي تم تمريرها $xuseتستورد الكلمة الأساسية متغيرًا من السياق المعجمي) ، والتي تأخذ وسيطة إضافية $y، وتعيد الإغلاق الذي تم إنشاؤه إلى المتصل. هذه الدالة هو كائن من الدرجة الأولى، وهذا يعني أنه يمكن تخزينها في متغير، أقر بأنه المعلمة إلى وظائف أخرى، إلخ. 

بشكل غير معتاد بالنسبة للغة المكتوبة ديناميكيًا ، تدعم PHP إعلانات النوع على معلمات الوظيفة ، والتي يتم فرضها في وقت التشغيل. تم دعم هذا للفئات والواجهات منذ PHP 5.0 ، للمصفوفات منذ PHP 5.1 ، لأنواع “callables” منذ PHP 5.4 ، والأنواع العددية (عدد صحيح ، عدد عشري ، سلسلة و منطقية) منذ PHP 7.0.  يحتوي PHP 7.0 أيضًا على إعلانات الأنواع لأنواع إرجاع الوظائف ، معبرًا عنها بوضع اسم النوع بعد قائمة المعلمات ، مسبوقًا بنقطتين.  على سبيل المثال ، getAdderيمكن إضافة تعليقات توضيحية للوظيفة من المثال السابق بأنواع مثل ذلك في PHP 7:

دالة  getAdder ( int  $ x ) :  إغلاق 
{ 
    return  fn ( int  $ y ) :  int  =>  $ x  +  $ y ؛ 
}

$ adder  =  getAdder ( 8 ) ؛ 
صدى  $ adder ( 2 ) ؛  // طباعة "10" 
echo  $ adder ( خالية ) ؛  // يطرح استثناء لأنه تم تمرير نوع غير صحيح 
$ adder  =  getAdder ()؛  // سيطرح أيضًا استثناءً

بشكل افتراضي ، تتبع تعريفات النوع القياسي مبادئ الكتابة الضعيفة. لذلك ، على سبيل المثال ، إذا كان نوع المعلمة هو int، فإن PHP لن تسمح فقط بتمرير الأعداد الصحيحة ، ولكن أيضًا السلاسل الرقمية القابلة للتحويل ، والعوامات أو القيم المنطقية إلى هذه الوظيفة ، وستقوم بتحويلها.  ومع ذلك ، يحتوي PHP 7 على وضع “كتابة صارمة” والذي ، عند استخدامه ، لا يسمح بمثل هذه التحويلات لاستدعاءات الوظائف ويعود داخل ملف. 

كائنات PHP 

تمت إضافة وظائف البرمجة الأساسية الموجهة للكائنات في PHP 3 وتحسينها في PHP 4.  سمح ذلك لـ PHP باكتساب مزيد من التجريد ، مما يجعل المهام الإبداعية أسهل للمبرمجين الذين يستخدمون اللغة. تمت إعادة كتابة معالجة الكائنات بالكامل لـ PHP 5 ، لتوسيع مجموعة الميزات وتحسين الأداء.  في الإصدارات السابقة من PHP ، تم التعامل مع الكائنات مثل أنواع القيم .  عيب هذه الطريقة هو أنه كان على الكود أن يستخدم بكثافة متغيرات PHP “المرجعية” إذا أراد تعديل كائن تم تمريره بدلاً من إنشاء نسخة منه. في النهج الجديد ، تتم الإشارة إلى الكائنات بواسطة المقبض وليس بالقيمة.

قدم PHP 5 متغيرات وطرق خاصة ومحمية للأعضاء ، جنبًا إلى جنب مع الفئات المجردة ، والفئات النهائية ، والطرق المجردة ، والطرق النهائية . وقد أدخلت أيضا وسيلة معيارية للإعلان الصانعين و تالفة ، مماثلة لتلك التي لغات أخرى وجوه المنحى مثل C ++ ، ومعيار التعامل مع استثناء نموذج. علاوة على ذلك ، أضافت PHP 5 واجهات وسمحت بتنفيذ واجهات متعددة. هناك واجهات خاصة تسمح للكائنات بالتفاعل مع نظام وقت التشغيل. يمكن استخدام الكائنات التي تنفذ ArrayAccess مع ملفاتيمكن استخدام بنية المصفوفة والكائنات التي تنفذ Iterator أو IteratorAggregate مع foreach بنية اللغة . لا توجد ميزة جدول ظاهري في المحرك ، لذلك ترتبط المتغيرات الثابتة باسم بدلاً من مرجع في وقت الترجمة. 

إذا قام المطور بإنشاء نسخة من كائن باستخدام الكلمة المحجوزة clone، فسيقوم محرك Zend بالتحقق مما إذا كان __clone()قد تم تعريف الطريقة أم لا. إذا لم يكن كذلك ، فسوف يستدعي افتراضيًا __clone()يقوم بنسخ خصائص الكائن. إذا __clone()تم تحديد طريقة ، فستكون مسؤولة عن تعيين الخصائص الضرورية في الكائن الذي تم إنشاؤه. للراحة ، سيوفر المحرك وظيفة تستورد خصائص الكائن المصدر ، بحيث يمكن للمبرمج البدء بنسخة متماثلة حسب القيمة للكائن المصدر وتجاوز الخصائص التي تحتاج إلى تغيير فقط. 

و الرؤية غير محددة من خصائص PHP وطرق استخدام الكلمات الرئيسية public ، privateو protected. الافتراضي هو عام ، إذا تم استخدام var فقط ؛ varهو مرادف ل publicpublicيمكن الوصول إلى العناصر المعلنة في كل مكان. protectedيحد من الوصول إلى الفئات الموروثة (وإلى الفئة التي تحدد العنصر). privateيحد من الرؤية للفئة التي تحدد العنصر فقط.  الكائنات من نفس النوع لها حق الوصول إلى الأعضاء الخاصة والمحمية لبعضهم البعض على الرغم من أنهم ليسوا نفس الحالة.

مثال 

فيما يلي مثال أساسي على البرمجة الشيئية في PHP 8:

<؟ php

 مستخدم فئة  مجردة
{
     سلسلة  محمية اسم $ ؛

     الوظيفة  العامة __construct ( سلسلة  اسم $ )
    {
        // اجعل الحرف الأول كبيرًا والباقي أحرفًا صغيرة
        $ this -> name  =  ucfirst ( strtolower ( $ name )) ؛
    }

     دالة  عامة تحية () :  سلسلة
    {
        العودة  "مرحبا اسمي"  .  $ هذا -> الاسم ؛
    }

     وظيفة الوظيفة العامة  المجردة () : سلسلة ؛  
}

فئة  الطالب  يوسع  المستخدم
{
     الوظيفة  العامة __construct ( سلسلة  $ name ،  سلسلة خاصة  $ course ) 
    {
        الوالد :: __construct ( $ name ) ؛
    }

     وظيفة  الوظيفة العامة () :  string
    {
        العودة  "أنا أتعلم"  .  $ هذا -> بالطبع ؛
    }
}

فئة  المعلم  يوسع  المستخدم
{
     الوظيفة  العامة __construct ( سلسلة  $ name ،  مصفوفة خاصة  $ teachingCourses ) 
    {
        الوالد :: __construct ( $ name ) ؛
    }

     وظيفة  الوظيفة العامة () :  string
    {
        العودة  "أنا أعلم"  .  تنفجر ( "،" ،  $ this -> teachingCourses ) ؛
    }
}

الطلاب  =  



 ؛

مدرسون بالدولار  =  
     مدرس جديد ( "دان" ،  ) ،
     مدرس جديد ( "Erin" ،  ) ،
     مدرس جديد ( "فرانكي" ،  ) ،
] ؛

foreach  (  كما  $ مستخدمين )  {
    صدى  المستخدمين $  :: فئة  .  "s: \ n " ؛

    array_walk ( $ users ،  function  ( User  $ user )  {
        صدى  " { $ user -> أحيت () } ، { $ user -> job () } \ n " ؛
    }) ؛
}

// ناتج البرنامج:
// تلاميذ:
// مرحبًا ، اسمي أليس ، أتعلم علوم الكمبيوتر
// مرحبًا ، اسمي بوب ، أتعلم علوم الكمبيوتر
// مرحبًا ، اسمي تشارلي ، أتعلم دراسات الأعمال
// معلمون:
// مرحبًا ، اسمي دان ، أقوم بتدريس علوم الكمبيوتر وأمن المعلومات
// مرحبًا ، اسمي إيرين ، أقوم بتدريس علوم الكمبيوتر ، وبرمجة الرسومات ثلاثية الأبعاد
// مرحبًا ، اسمي فرانكي ، أقوم بتدريس التسويق عبر الإنترنت ، ودراسات الأعمال ، والتجارة الإلكترونية

تطبيقات 

تطبيق PHP الكامل الوحيد هو الأصل ، والمعروف ببساطة باسم PHP. إنه الأكثر استخدامًا ويتم تشغيله بواسطة محرك Zend . لإزالة الغموض عن التطبيقات الأخرى ، يطلق عليه أحيانًا بشكل غير رسمي اسم “Zend PHP”. يقوم Zend Engine بتجميع كود PHP المصدر سريعًا إلى تنسيق داخلي يمكن تنفيذه ، وبالتالي فهو يعمل كمترجم فوري .   وهو أيضًا “التطبيق المرجعي” لـ PHP ، حيث لا تحتوي PHP على مواصفات رسمية ، وبالتالي فإن دلالات Zend PHP تحدد دلالات PHP. نظرًا للدلالات المعقدة والدقيقة لـ PHP ، والتي تحددها طريقة عمل Zend ، من الصعب على التطبيقات المتنافسة تقديم توافق كامل.

اقرأ ايضا :  ماهي لغة HTML و كيف تستعمل

نموذج تنفيذ الطلب الفردي لكل نص بلغة PHP ، وحقيقة أن محرك Zend هو مترجم ، يؤدي إلى عدم الكفاءة ؛ نتيجة لذلك ، تم تطوير العديد من المنتجات للمساعدة في تحسين أداء PHP. من أجل تسريع وقت التنفيذ وعدم الاضطرار إلى تجميع شفرة مصدر PHP في كل مرة يتم فيها الوصول إلى صفحة الويب ، يمكن أيضًا نشر نصوص PHP في التنسيق الداخلي لمحرك PHP باستخدام ذاكرة التخزين المؤقت لرمز التشغيل ، والتي تعمل عن طريق التخزين المؤقت للنموذج المترجم من السيناريو PHP (أكواد العمليات) في الذاكرة المشتركة لتجنب النفقات العامة من تحليل و تجميع رمز في كل مرة تشغيل البرنامج النصي. ذاكرة التخزين المؤقت لرمز التشغيل ، Zend Opcache ، مدمجة في PHP منذ الإصدار 5.5. مثال آخر لذاكرة التخزين المؤقت المستخدمة على نطاق واسع هو ذاكرة التخزين المؤقت البديلة PHP (APC) ، والتي تتوفر كملحق PECL . 

بينما لا يزال تطبيق Zend PHP هو التطبيق الأكثر شيوعًا ، فقد تم تطوير العديد من التطبيقات الأخرى. بعضها عبارة عن مجمعات أو تدعم تجميع JIT ، وبالتالي تقدم مزايا أداء على Zend PHP على حساب عدم توافق PHP الكامل. تشمل التطبيقات البديلة ما يلي:

  • HHVM (جهاز ظاهري HipHop) – تم تطويره على Facebook ومتاح كمصدر مفتوح ، يقوم بتحويل كود PHP إلى رمز ثانوي عالي المستوى (يُعرف عمومًا باسم لغة وسيطة ) ، والذي يتم ترجمته بعد ذلك إلى رمز آلة x86-64 ديناميكيًا في وقت التشغيل بواسطة a مترجم في الوقت المناسب (JIT) ، ينتج عنه تحسينات في الأداء تصل إلى 6 ×.  ومع ذلك ، منذ الإصدار 7.2 تفوق Zend على HHVM ،  و HHVM 3.24 هو الإصدار الأخير الذي يدعم PHP رسميًا. 
  • الببغاء  – آلة افتراضية مصممة لتشغيل اللغات الديناميكية بكفاءة ؛ يقوم Pipp بتحويل كود PHP المصدر إلى تمثيل Parrot الوسيط ، والذي يتم ترجمته بعد ذلك إلى كود Parrot ويتم تنفيذه بواسطة الجهاز الظاهري.
  • PeachPie – مترجم من الجيل الثاني لملفات . NET Common Intermediate Language (CIL) bytecode ، المبني على منصة Roslyn ؛ خليفة فالنجر ، وتقاسم العديد من المكونات المعمارية
  • فالنجر  – يقوم بترجمة PHP إلى كود ثانوي للغة المتوسطة المشتركة (CIL) ؛ سلف PeachPie
  • Quercus  – يقوم بترجمة PHP إلى Java bytecode
  • HipHop  – تم تطويره على Facebook ومتاح كمصدر مفتوح ، وهو يحول نصوص PHP إلى كود C ++ ثم يجمع الكود الناتج ، مما يقلل من تحميل الخادم بنسبة تصل إلى 50٪. في أوائل عام 2013، انتقدت الفيسبوك في صالح HHVM لأسباب متعددة، بما في ذلك الصعوبات نشر ويفتقرون إلى الدعم للغة PHP بأكملها، بما في ذلك create_function()و eval()يبني. 

الترخيص 

PHP هو برنامج مجاني تم طرحه بموجب ترخيص PHP ، والذي ينص على ما يلي: 

لا يجوز تسمية المنتجات المشتقة من هذا البرنامج بـ “PHP” ، ولا يجوز أن تظهر “PHP” في أسمائها ، بدون إذن كتابي مسبق من group@php.net. يمكنك الإشارة إلى أن برنامجك يعمل جنبًا إلى جنب مع PHP بقول ” Foo for PHP” بدلاً من تسميتها “PHP Foo” أو “phpfoo”.

هذا التقييد على استخدام “PHP” يجعل ترخيص PHP غير متوافق مع الترخيص العام العام (GPL) ، في حين أن ترخيص Zend غير متوافق بسبب بند إعلان مشابه لذلك الخاص بترخيص BSD الأصلي . 

التنمية والمجتمع 

تتضمن PHP العديد من المكتبات المجانية ومفتوحة المصدر في توزيعها المصدر ، أو تستخدمها في إنشاءات PHP الثنائية الناتجة. PHP هو في الأساس نظام مدرك للإنترنت مع وحدات مدمجة للوصول إلى خوادم بروتوكول نقل الملفات (FTP) والعديد من خوادم قواعد البيانات ، بما في ذلك PostgreSQL و MySQL و Microsoft SQL Server و SQLite (وهي قاعدة بيانات مضمنة) وخوادم LDAP وغيرها . تتوفر العديد من الوظائف المألوفة لمبرمجي لغة سي ، مثل تلك الموجودة في عائلة stdio ، في إصدارات PHP القياسية. 

تسمح PHP للمطورين بكتابة الامتدادات في C لإضافة وظائف إلى لغة PHP. يمكن تجميع امتدادات PHP بشكل ثابت في PHP أو تحميلها ديناميكيًا في وقت التشغيل. تمت كتابة العديد من الامتدادات لإضافة دعم لواجهة برمجة تطبيقات Windows ، وإدارة العمليات على أنظمة تشغيل شبيهة بـ Unix ، وسلاسل متعددة البايت ( Unicode ) ، و cURL ، والعديد من تنسيقات الضغط الشائعة . تشمل ميزات PHP الأخرى المتوفرة من خلال الامتدادات التكامل مع IRC ، والتوليد الديناميكي للصور ومحتوى Adobe Flash ، وكائنات بيانات PHP(PDO) كطبقة تجريد تستخدم للوصول إلى قواعد البيانات ،        وحتى تركيب الكلام . يتم أيضًا تنفيذ بعض الوظائف الأساسية للغة ، مثل تلك التي تتعامل مع السلاسل والمصفوفات ، كإمتدادات.  مشروع PHP Extension Community Library (PECL) هو مستودع لتمديدات لغة PHP. 

توفر بعض المشاريع الأخرى ، مثل Zephir ، القدرة على إنشاء امتدادات PHP بلغة عالية المستوى وتجميعها في امتدادات PHP أصلية. مثل هذا النهج ، بدلاً من كتابة امتدادات PHP مباشرة في لغة C ، يبسط تطوير الامتدادات ويقلل من الوقت اللازم للبرمجة والاختبار. 

بحلول ديسمبر 2018 ، تألفت مجموعة PHP من عشرة أشخاص: Thies C. Arntzen و Stig Bakken و Shane Caraveo و Andi Gutmans و Rasmus Lerdorf و Sam Ruby و Sascha Schumann و Zeev Suraski و Jim Winstead و Andrei Zmievski . 

توفر Zend Technologies شهادة PHP استنادًا إلى اختبار PHP 7  (وكان يعتمد سابقًا على PHP 5.5) للمبرمجين ليصبحوا مطوري PHP معتمدين.

التثبيت والتهيئة 

مثال لإخراج دالة phpinfo () في PHP 7.1

هناك طريقتان أساسيتان لإضافة دعم PHP إلى خادم ويب – كوحدة نمطية لخادم الويب الأصلي ، أو كبرنامج CGI قابل للتنفيذ. تحتوي PHP على واجهة وحدة مباشرة تسمى واجهة برمجة تطبيقات الخادم (SAPI) ، والتي تدعمها العديد من خوادم الويب بما في ذلك خادم Apache HTTP و Microsoft IIS و iPlanet Web Server . تدعم بعض خوادم الويب الأخرى ، مثل OmniHTTPd ، واجهة برمجة تطبيقات خادم الإنترنت (ISAPI) ، وهي واجهة وحدة خادم ويب Microsoft . إذا لم يكن PHP يدعم الوحدة النمطية لخادم الويب ، فيمكن استخدامه دائمًا كواجهة بوابة عامة (CGI) أو FastCGIالمعالج. في هذه الحالة ، يتم تكوين خادم الويب لاستخدام CGI الخاص بـ PHP القابل للتنفيذ لمعالجة جميع الطلبات إلى ملفات PHP. 

PHP-FPM (FastCGI Process Manager) هو تطبيق FastCGI بديل لـ PHP ، مدمج مع توزيع PHP الرسمي منذ الإصدار 5.3.3.  عند مقارنته بتطبيق FastCGI الأقدم ، فإنه يحتوي على بعض الميزات الإضافية ، معظمها مفيدة لخوادم الويب المحملة بكثافة. 

عند استخدام PHP للبرمجة النصية لسطر الأوامر ، يلزم وجود واجهة PHP لسطر الأوامر (CLI) قابلة للتنفيذ. تدعم PHP واجهة برمجة تطبيقات خادم CLI (SAPI) منذ PHP 4.3.0.  التركيز الرئيسي ل SAPI هذا هو تطوير تطبيقات شل باستخدام PHP. هناك عدد قليل جدًا من الاختلافات بين CLI SAPI و SAPIs الأخرى ، على الرغم من أنها تشترك في العديد من نفس السلوكيات. 

PHP لها واجهة وحدة مباشرة تسمى SAPI لخوادم الويب المختلفة ؛  في حالة PHP 5 و Apache 2.0 على Windows ، يتم توفيره في شكل ملف DLL يسمى php5apache2.dll ،  وهو عبارة عن وحدة نمطية ، من بين وظائف أخرى ، توفر واجهة بين PHP وخادم الويب ، بالشكل الذي يفهمه الخادم. هذا النموذج هو ما يعرف باسم SAPI.

هناك أنواع مختلفة من SAPIs لمختلف امتدادات خادم الويب. على سبيل المثال ، بالإضافة إلى تلك المذكورة أعلاه ، تتضمن SAPIs الأخرى للغة PHP واجهة البوابة العامة (CGI) وواجهة سطر الأوامر (CLI).  

يمكن أيضًا استخدام PHP لكتابة تطبيقات واجهة المستخدم الرسومية لسطح المكتب ، باستخدام امتداد PHP-GTK . لم يتم تضمين PHP-GTK في توزيعة PHP الرسمية ،  وكامتداد يمكن استخدامها فقط مع إصدارات PHP 5.1.0 والأحدث. الطريقة الأكثر شيوعًا لتثبيت PHP-GTK هي تجميعها من الكود المصدري. 

عند تثبيت PHP واستخدامه في البيئات السحابية ، يتم توفير مجموعات تطوير البرامج (SDK) لاستخدام الميزات الخاصة بالسحابة. على سبيل المثال:

  • توفر Amazon Web Services AWS SDK لـ PHP 
  • يمكن استخدام Microsoft Azure مع Windows Azure SDK لـ PHP. 

يتم دعم العديد من خيارات التكوين ، مما يؤثر على ميزات وإضافات PHP الأساسية.  php.ini يتم البحث عن ملف التكوين في مواقع مختلفة ، اعتمادًا على طريقة استخدام PHP.  ملف التكوين مقسم إلى أقسام مختلفة ،  بينما يمكن أيضًا تعيين بعض خيارات التكوين ضمن تكوين خادم الويب. 

استخدم 

نظرة عامة على حزمة برامج LAMP المعروضة هنا مع Squid

PHP هي لغة برمجة نصية للأغراض العامة وهي مناسبة بشكل خاص لتطوير الويب من جانب الخادم ، وفي هذه الحالة يتم تشغيل PHP بشكل عام على خادم ويب . وأي رمز PHP في ملف طلب تنفيذها من قبل PHP وقت التشغيل، وعادة لخلق دينامية صفحة ويب المحتوى أو الصور الديناميكية المستخدمة في المواقع أو في أي مكان آخر.  يمكن استخدامه أيضًا في البرمجة النصية لسطر الأوامر وتطبيقات واجهة المستخدم الرسومية من جانب العميل (GUI). PHP يمكن نشرها على معظم خوادم الويب، العديد من أنظمة التشغيل و المنصات ، ويمكن استخدامها مع العديد من أنظمة إدارة قواعد البيانات العلائقية (RDBMS). يدعم معظم موفري استضافة الويب PHP ليستخدمها عملاؤهم. إنه متاح مجانًا ، وتوفر PHP Group شفرة المصدر الكاملة للمستخدمين لإنشاء وتخصيص وتوسيع نطاق استخدامهم الخاص. صفحة الويب الديناميكية: مثال على البرمجة النصية من جانب الخادم (PHP و MySQL)

مصممة أصلا لخلق دينامية صفحات الويب ، PHP يركز الآن بشكل رئيسي على البرمجة من جانب الخادم ،  وأنه مشابه لغات البرمجة من جانب الخادم الأخرى التي تقدم محتوى ديناميكي من خادم ويب إلى العميل ، مثل مايكروسوفت الصورة ASP .NET ، صفحات JavaServer الخاصة بشركة Sun Microsystems ،  و . اجتذبت PHP أيضًا تطوير العديد من أطر البرامج التي توفر اللبنات الأساسية وهيكل التصميم لتعزيز التطوير السريع للتطبيقات (RAD). بعض هذه تشمل PRADO و CakePHPmod_perl، أن symfony ، كود إغنيتر ، لارافل ، إطار Yii ، فالكون و Laminas ، وتقديم ميزات مشابهة لغيرها من الأطر على شبكة الإنترنت .

أصبحت بنية LAMP شائعة في صناعة الويب كطريقة لنشر تطبيقات الويب.  تُستخدم PHP بشكل شائع كـ P في هذه الحزمة جنبًا إلى جنب مع Linux و Apache و MySQL ، على الرغم من أن P قد تشير أيضًا إلى Python أو Perl أو مزيج من الثلاثة. حزم مماثلة ، WAMP و MAMP ، متوفرة أيضًا لنظامي التشغيل Windows و macOS، مع وضع الحرف الأول في نظام التشغيل المعني. على الرغم من توفير كل من PHP و Apache كجزء من التثبيت الأساسي لنظام macOS ، فإن مستخدمي هذه الحزم يبحثون عن آلية تثبيت أبسط يمكن تحديثها بسهولة أكبر.

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

تلقت PHP مراجعات مختلطة بسبب نقص الدعم لتعدد مؤشرات الترابط على مستوى اللغة الأساسية ،  على الرغم من أن استخدام الخيوط أصبح ممكنًا عن طريق امتداد PECL “pthreads” .  

تم إنتاج واجهة سطر أوامر ، php-cli ، ومحركين لبرمجة ActiveX Windows Script Host لـ PHP.

إحصائيات الشعبية والاستخدام 

تُستخدم PHP لأنظمة إدارة محتوى الويب بما في ذلك MediaWiki ،  WordPress ،  Joomla ،  دروبال ،  Moodle ،  eZ Publish ، eZ Platform ، و SilverStripe . 

تشمل المواقع الإلكترونية التي تستخدم PHP Facebook و  Digg و  Dailymotion و  و Tumblr . 

اعتبارًا من يناير 2013 ، تم استخدام PHP في أكثر من 240 مليون موقع (39٪ من تلك العينات) وتم تثبيتها على 2.1 مليون خادم ويب . 

اعتبارًا من مارس 2021 ، تم استخدام PHP كلغة برمجة من جانب الخادم في 79.1٪ من مواقع الويب ، بانخفاض عن 83.5٪ سابقًا ، حيث يمكن تحديد اللغة ، و PHP 7 هو الإصدار الأكثر استخدامًا للغة بنسبة 50.3٪ من الكل مواقع الويب على الويب تستخدم هذا الإصدار. 

الأمن 

في عام 2019 ، تم ربط 11٪ من جميع نقاط الضعف المدرجة في قاعدة البيانات الوطنية للثغرات الأمنية بلغة PHP ؛  تاريخياً ، حوالي 30٪ من جميع نقاط الضعف المدرجة منذ عام 1996 في قاعدة البيانات هذه مرتبطة بـ PHP. العيوب الأمنية التقنية للغة نفسها أو في مكتباتها الأساسية ليست متكررة (22 في عام 2009 ، حوالي 1٪ من الإجمالي على الرغم من أن PHP تنطبق على حوالي 20٪ من البرامج المدرجة).  مع الاعتراف بأن المبرمجين يرتكبون أخطاء ، تتضمن بعض اللغات فحص الأخطاء للكشف تلقائيًا عن نقص التحقق من صحة الإدخال مما يؤدي إلى العديد من المشكلات. يتم تطوير مثل هذه الميزة لـ PHP ،  ولكن تم رفض تضمينها في إصدار عدة مرات في الماضي. 

هناك تصحيحات حماية متقدمة مثل Suhosin و Hardening -Patch ، وهي مصممة خصيصًا لبيئات استضافة الويب. 

تاريخيًا ، كانت الإصدارات القديمة من PHP تحتوي على بعض معلمات التكوين والقيم الافتراضية لإعدادات وقت التشغيل التي جعلت بعض تطبيقات PHP عرضة لمشاكل الأمان. من بين هذه ، magic_quotes_gpcو register_globals توجيهات التكوين كانت الأكثر شهرة ؛ هذا الأخير جعل أي معلمات URL تصبح متغيرات PHP ، مما يفتح مسارًا لنقاط ضعف أمنية خطيرة من خلال السماح للمهاجم بتعيين قيمة أي متغير عالمي غير مهيأ والتدخل في تنفيذ نص PHP. تم إيقاف دعم إعدادات ” عروض الأسعار السحرية ” و “تسجيل العالم” منذ PHP 5.3.0 ، وإزالتها من PHP 5.4.0. 

مثال آخر للثغرة الأمنية المحتملة في إعدادات وقت التشغيل يأتي من الفشل في تعطيل تنفيذ PHP (على سبيل المثال باستخدام engineتوجيه التكوين)  للدليل حيث يتم تخزين الملفات التي تم تحميلها ؛ تمكينه يمكن أن يؤدي إلى تنفيذ التعليمات البرمجية الضارة المضمنة في الملفات التي تم تحميلها.    أفضل ممارسة هي إما تحديد موقع دليل الصورة خارج جذر المستند المتاح لخادم الويب وتقديمه عبر برنامج نصي وسيط ، أو تعطيل تنفيذ PHP للدليل الذي يخزن الملفات التي تم تحميلها.

أيضًا ، يمكن أن يؤدي تمكين التحميل الديناميكي لملحقات PHP (عبر enable_dlتوجيه التكوين)  في بيئة استضافة ويب مشتركة إلى مشكلات أمنية.  

يمكن أن تؤدي تحويلات النوع الضمني التي تؤدي إلى معاملة قيم مختلفة على قدم المساواة ، وأحيانًا ضد قصد المبرمج ، إلى مشكلات أمنية. على سبيل المثال، نتيجة المقارنة '0e1234' == '0'هي true، لأن السلاسل التي هي قابلة للتحليل كما يتم تحويل الأرقام إلى أرقام. في هذه الحالة ، يتم التعامل مع القيمة المقارنة الأولى على أنها تدوين علمي له القيمة (0 × 10 1234 ) وهو صفر. أدت مثل هذه الأخطاء إلى وجود ثغرات أمنية في المصادقة في منتدى Simple Machines Forum ،  Typo3  و phpBB  عند مقارنة تجزئات كلمة مرور MD5 . الطريقة الموصى بها لاستخدام hash_equals () (ل توقيت الهجوم سلامة)، أو مشغل الهوية ( )، و النتائج في . strcmp==='0e1234' === '0'false

في تحليل عام 2013 أكثر من 170،000 مهاجمات الموقع الذي نشرته المنطقة-H ، كانت في معظم الأحيان (53٪) تستخدم تقنية استغلال الضعف إدراج ملف ، تتعلق في معظمها إلى استخدام الآمن للبنيات اللغة PHP include، requireو allow_url_fopen 

اعتبارًا من أبريل 2021 ، ذكرت W3Techs أن 64٪ من مواقع الويب التي تستخدم PHP تستخدم الإصدارات 7.2 أو أقدم (والتي لم تعد مدعومة من قبل فريق تطوير PHP) مع 35٪ من جميع مواقع PHP التي تستخدم الإصدار 5.6 أو أقدم. 

لا يزال 24.5٪ من جميع المواقع مستخدمة الإصدار 5 (سبتمبر 2021).  يوصى بشدة بالانتقال إلى PHP الإصدار 7 أو 8 واستخدام random_int () بدلاً من rand () أو mt_rand (). هناك نوعان من الهجمات التي يمكن تنفيذها على مصادر إنتروبيا PHP: “هجوم البذور” و “هجوم استعادة الحالة”. باستخدام تقنيات GPU الحالية ، يمكن للمهاجم إجراء ما يصل إلى 2 ^ 30 حساب MD5 في الثانية باستخدام وحدة معالجة الرسومات 250 دولارًا ، بينما يمكن أن يصل مبلغ 500 دولار إضافي إلى 2 ^ 32 عملية حسابية.  بالاقتران مع ” هجوم عيد الميلاد ” يمكن أن يؤدي هذا إلى ثغرات أمنية خطيرة.

wikipedia

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني.

Previous post ماهو الموقع الكتروني و كيف يعمل
Next post ما هو عنوان URL وكيف يعمل