پی‌اچ‌پی

زبان برنامه‌نویسی

پی‌اچ‌پی (PHP) یک زبان برنامه‌نویسیِ شیءگرا و برای سرور است که برای طراحی وب توسعه یافته‌است؛ اما می‌توان از آن به عنوان یک زبان عمومی نیز استفاده‌کرد. تا ژانویهٔ سال ۲۰۱۳ میلادی، پی‌اچ‌پی روی ۲۴۴ میلیون وبگاه و ۲٫۱ میلیون سرور وب نصب شده‌است.[۶] این زبان در سال ۱۹۹۵ میلادی توسط راسموس لِردورف (به انگلیسی: Rasmus Lerdorf) ساخته‌شد و در حال حاضر توسعهٔ آن بر عهدهٔ گروه پی‌اچ‌پی است.[۷] در ابتدا، پی‌اچ‌پی از عبارت صفحهٔ خانگی شخصی (به انگلیسی: Personal Home Page) گرفته شده‌بود.[۷] اما اکنون این کلمه مخففِ بازگشتی PHP: Hypertext Preprocessor به معنی پی‌اچ‌پی: پیش‌پردازنده‌ی ابرمتن است.[۸]

پی‌اچ‌پی
پارادایم برنامه‌نویسیچندالگویی: دستوری، تابعی، شیءگرا، رویه‌ای، پژواکی
طراحی شده توسطراسموس لردورف
توسعه‌دهندهراسموس لردورف, اندی گوتمانس, زند (شرکت), زیو سوراسکی
ظهوریافته در۸ ژوئن ۱۹۹۵؛ ۲۸ سال پیش (۸ ژوئن ۱۹۹۵-خطا: زمان نامعتبر}})
انتشار پایدار
8.3.4[۱] ویرایش در ویکی‌داده
۱۴ مارس ۲۰۲۴؛ ۱۳ روز پیش (۱۴ مارس ۲۰۲۴-خطا: زمان نامعتبر}})
انتشار آزمایشی
8.1.0 Beta 1[۲] ویرایش در ویکی‌داده
۲۲ ژوئیه ۲۰۲۱؛ ۲ سال پیش (۲۲ ژوئیه ۲۰۲۱-خطا: زمان نامعتبر}})
پویا، کم‌زور از ویرایش ۷٫۰: تدریجی[۳]
زبان پیاده‌سازی
C (در اصل؛ بعضی از مولفه‌ها سی پلاس‌پلاس)
سیستم‌عاملشبه یونیکس, مایکروسافت ویندوز
پروانهمجوز پی‌اچ‌پی[۴]
php,[۵] phtml, php4, php3, php5, phps, phar, php7, pht
وبگاه
پیاده‌سازی‌های بزرگ
موتور زند، ماشین مجازی هیپ‌هاپ، Phalanger, Quercus, Parrot
متأثر از
سی++, پرل, سی, جاوا, تی‌سی‌ال, اچ‌ تی‌ ام‌ ال, جاوااسکریپت
تأثیر گذاشته بر
هک, فالکن

PHP Programming در ویکی‌کتاب (انگلیسی)

کدهای پی‌اچ‌پی توسط یک سرور وب که نرم‌افزار پی‌اچ‌پی روی آن نصب باشد، تفسیر می‌شود. دستورهای این زبان می‌توانند به صورت مستقیم در درون کدهای اچ‌تی‌ام‌ال قرار بگیرند. زبان پی‌اچ‌پی از نسخهٔ ۴٫۳ به بعد قابلیت پشتیبانی از واسط خط فرمان را نیز به امکانات خود اضافه کرد. این قابلیت می‌تواند برای ایجاد نرم‌افزارهای غیر وبی یا نرم‌افزارهایی با واسط گرافیکی کاربر مورد استفاده قرار بگیرد.[۹]

پی‌اچ‌پی یک نرم‌افزار آزاد است که تحت مجوز پی‌اچ‌پی انتشار یافته‌است. این مجوز به دلیل قرار دادن محدودیت روی استفاده از عنوان پی‌اچ‌پی، با مجوز همگانی گنو (GPL) سازگار نیست. پی‌اچ‌پی را می‌توان روی اکثر سرورهای وب نصب کرد. همچنین قابلیت نصب آن به صورت یک شل جداگانه روی تقریباً تمامی سیستم‌های عامل و پلت‌فرم‌ها (یا سکوها) وجود دارد.[۱۰] تمامی این استفاده‌ها رایگان است.[۱۱]

تاریخچه ویرایش

     
راسموس لردورف (در تصویر سمت راست) که پی‌اچ‌پی اولیه را نوشت، در کنار اندی گوتمانس و زیو سوراسکی سازندگان موتور زند

توسعهٔ پی‌اچ‌پی از سال ۱۹۹۴ و زمانی آغاز شد که راسموس لردورف تعدادی اسکریپت به زبان سی نوشت تا صفحهٔ خانگی خود را مدیریت کند. این اسکریپت‌ها که به صورت رابط دروازهٔ مشترک (به انگلیسی: Common Gateway Inteface) نوشته شده‌بودند، مسئول انجام عملیات‌های ساده‌ای مانند نشان دادن رزومهٔ راسموس و بررسی آمارهای بازدید از وبگاه او بودند.[۷] با گسترش اسکریپت‌ها و افزودن توانایی تعامل با فرم‌های وب و ارتباط با پایگاه‌های داده، نام صفحهٔ خانگی شخصی/مفسر فرم (به انگلیسی: Personal Home Page/Form Interpreter) یا PHP/FI برای آن‌ها انتخاب شد. PHP/FI می‌توانست برای ایجاد نرم‌افزارهای سادهٔ وب استفاده شود. در ابتدا، لردورف برای یافتن خطاهای این اسکریپت‌ها و بهبود آن‌ها، در ۸ جون سال ۱۹۹۵ میلادی اسکریپت‌ها را با نام ابزارهای صفحهٔ خانگی شخصی نسخهٔ ۱٫۰ (به انگلیسی: Personal Home Page Tools version 1.0) تحت مجوز عمومی گنو روی گروه خبری یوزنت منتشر کرد.[۱۲] این نسخهٔ اولیه بسیاری از ویژگی‌های نسخهٔ کنونی این زبان را داشت. متغیرها به سبک زبان پرل بودند، مدیریت فرم‌ها وجود داشت و می‌شد کدها را در درون کدهای اچ‌تی‌ام‌ال قرار داد. قواعد پی‌اچ‌پی نیز از زبان پرل پیروی می‌کردند، اما ساده‌تر، محدودتر و ناپایدارتر بودند.[۷] با شکل‌گیری یک گروه برنامه‌نویسی و بعد از انجام تست‌های فراوان روی نسخهٔ بتا و بازنویسی موتور تجزیه‌کننده، سرانجام PHP/FI نسخهٔ ۲٫۰ در نوامبر سال ۱۹۹۷ میلادی منتشر گردید.[۷]

اندی گاتسمن و زیو سوراسکی با بازنویسی موتور تجزیه‌کننده در سال ۱۹۹۷ میلادی پایه و اساس نسخهٔ ۳ پی‌اچ‌پی را بنیان نهادند. این دو نفر با همراهی لردورف با تغییر نام پی‌اچ‌پی به پی‌اچ‌پی: پیش‌پردازندهٔ ابرمتن (به انگلیسی: PHP: Hypertext Preprocessor) که یک مخفف بازگشتی است، در ماه جون ۱۹۹۸ میلادی رسماً پی‌اچ‌پی نسخهٔ ۳٫۰ را منتشر کردند.[۷] بعد از این اتفاق گاتسمن و سوراسکی شروع به نوشتن هستهٔ جدیدی برای زبان پی‌اچ‌پی کردند که منجر به به وجود آمدن موتور زِند در سال ۱۹۹۹ میلادی شد. آن‌ها همچنین شرکت زِند تکنولوژی را در کشور اسرائیل تأسیس کردند.[۱۳][۱۴]

در تاریخ ۲۲ مه سال ۲۰۰۰ میلادی، پی‌اچ‌پی نسخهٔ ۴ که از موتور زند نسخهٔ ۱٫۰ استفاده می‌کرد، منتشر شد.[۷] این نسخه تا ماه اوت سال ۲۰۰۸ میلادی توسعه یافت و به زیرنسخهٔ ۴٫۴٫۹ رسید. هم‌اکنون پشتیبانی این نسخه به پایان رسیده‌است و هیچ به‌روزرسانی برای آن منتشر نمی‌شود.[۱۵][۱۶]

در ۱۳ ژوئیه سال ۲۰۰۴ میلادی، نسخهٔ ۵ پی‌اچ‌پی که از موتور زند نسخهٔ ۲ بهره می‌برد، منتشر شد.[۷] نسخهٔ ۵ ویژگی‌های زیادی را به پی‌اچ‌پی اضافه کرد. پشتیبانی کامل از شیء گرایی، افزونهٔ PDO (PHP Data Object Extension) (که دسترسی به بانک‌های اطلاعاتی را ممکن می‌ساخت) و بهبود بازدهی از جملهٔ این ویژگی‌ها محسوب می‌شد.[۱۷] از سال ۲۰۰۸ به بعد، با پایان یافتن پشتیبانی از تمامی نسخه‌های قدیمی‌تر پی‌اچ‌پی، نسخهٔ ۵ تنها نسخهٔ در حال گسترش است.

در کنار نسخهٔ ۵ پی‌اچ‌پی یک نسخهٔ اصلی دیگر در حال توسعه است. با توجه به تغییرات عمدهٔ موجود در این نسخه از جمله پشتیبانی کامل از یونیکد، قرار بود این نسخه به عنوان نسخهٔ ۶ پی‌اچ‌پی منتشر گردد. اما پیاده‌سازی پشتیبانی از یونیکد بیش از آنچه انتظار می‌رفت، به طول انجامید. این امر باعث شد تا در مارس سال ۲۰۱۰ میلادی، این نسخه به بخش در حال توسعه (به انگلیسی: Trunk) منتقل شد و دیگر به آن نسخهٔ ۶ گفته نمی‌شود.

مهم‌ترین تغییرات این بخش جدید: حذف register_globals،[۱۸] magic quotes و safe mode .[۱۵] دلیل حذف magic quotes تأثیرات غیرقابل پیش‌بینی و دلیل حذف register_globals خطرهای امنیتی بود که در نرم‌افزارها ایجاد می‌کرد. به جای استفاده از magic qoutes برنامه‌نویس می‌تواند از تابع addslashes()یا توابع دقیق‌تری استفاده کنند که برای هر پایگاه داده ایجاد شده‌اند، مانند mysql_real_escape_string()که برای پایگاه داده مای‌اس‌کیوال طراحی شده‌است. توابعی که قرار است در نسخهٔ ۶ حذف شوند، از نسخهٔ ۵٫۳ به صورت توصیه‌نشده (به انگلیسی: Deprecated) درآمده‌اند و استفاده از آن‌ها باعث بروز هشدار در نرم‌افزار خواهد شد.[۱۹]

تعداد بسیار زیادی از پروژه‌های بزرگ و متن‌باز که از زبان پی‌اچ‌پی استفاده می‌کنند، از سال ۲۰۰۸ با به وجود آمدن جنبش ابتکاری GoPHP5 به معنای برو به پی‌اچ‌پی ۵ دیگر از پی‌اچ‌پی نسخهٔ ۴ استفاده نمی‌کنند. این جنبش توسط بسیاری از توسعه‌دهندگان پی‌اچ‌پی پشتیبانی شد تا بتوانند به گسترش استفاده از نسخهٔ ۵ پی‌اچ‌پی کمک کنند.[۲۰][۲۱][۲۲]

مفسرهای زبان پی‌اچ‌پی برای هر دو معماری ۳۲بیتی و ۶۴بیتی موجود است. تنها استثنا سیستم‌عامل ویندوز است که فقط نسخه‌های ۳۲بیتی برای آن منتشر می‌شود. اما مدتی است که نسخه‌های ۶۴بیتی ویندوزی نیز به صورت امتحانی روی وبگاه پی‌اچ‌پی منتشر می‌شوند و استفاده از نسخه‌های امتحانی ۶۴بیتی ویندوز برای سرورهای بزرگ توصیه نمی‌شود.[۲۳][۲۴]

تاریخچه انتشار ویرایش

نسخه تاریخ انتشار تاریخ اتمام پشتیبانی[۲۵] یادداشت‌ها
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۱٫۰ ۸ ژوئن ۱۹۹۵ این نسخه به صورت رسمی "Personal Home Page Tools" یا "PHP Tools" نامیده شد. کلمهٔ پی‌اچ‌پی اولین بار در اینجا به کار رفت.[۲۶]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۲٫۰ ۱ نوامبر ۱۹۹۷ به‌طور رسمی "PHP/FI 2.0" نامیده می‌شود. این اولین نسخه‌ای است که در واقع می‌تواند به‌عنوان PHP شناخته شود، یک زبان مستقل با ویژگی‌های بسیاری که تا به امروز دوام آورده‌است.
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۳٫۰ ۶ ژوئن ۱۹۹۸ ۲۰ اکتبر ۲۰۰۰[۲۵] توسعه‌دهندگان از یک به چند نفر افزایش یافتند. زیو سوراسکی و اندی گاتمنس هستهٔ این نسخه را بازنویسی کردند.[۷]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۴٫۰ ۲۲ مه ۲۰۰۰ ۲۳ ژوئن ۲۰۰۱[۲۵] سیستم دومرحله‌ای تجزیه/اجرای پیشرفته تحت عنوان موتور زند به این نسخه اضافه شد.[۲۷]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۴٫۱ ۱۰ دسامبر ۲۰۰۱ ۱۲ مارس ۲۰۰۲[۲۵] متغیرهای فوقِ سراسری(Superglobal) معرفی شدند. (GET، $_POST، $_SESSION و…)[۲۷]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۴٫۲ ۲۲ آوریل ۲۰۰۲ ۶ سپتامبر ۲۰۰۲[۲۵] تنظیم register_globals به صورت پیش‌فرض غیرفعال شد. با این تغییر اطلاعاتی که از طریق شبکه ارسال می‌شدند، دیگر به‌طور مستقیم در محدودهٔ متغیرهای فوقِ سراسری قرار نمی‌گرفتند. این نکته مشکلات امنیتی احتمالی بسیاری از نرم‌افزارها را برطرف کرد.[۲۷]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۴٫۳ ۲۷ دسامبر ۲۰۰۲ ۳۱ مارس ۲۰۰۵[۲۵] واسط خط فرمان یا همان CLI به این نسخه اضافه شد.[۲۷]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۴٫۴ ۱۱ ژوئیه ۲۰۰۵ ۷ اوت ۲۰۰۸[۲۵] صفحات راهنما(man page) برای دستورات phpsize و config-php اضافه شد.[۲۷]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۵٫۰ ۱۳ ژوئیه ۲۰۰۴ ۵ سپتامبر ۲۰۰۵[۲۵] موتور زند نسخهٔ ۲ معرفی شد.[۲۸]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۵٫۱ ۲۴ نوامبر ۲۰۰۵ ۲۴ اوت ۲۰۰۶[۲۵] بهبود بازدهی با معرفی متغیرهای مترجم (Compiler Variables) در موتور جدید پی‌اچ‌پی.[۲۸] مدل PDO به عنوان یک رابط پایدار برای برقراری ارتباط با بانک‌های اطلاعاتی معرفی شد.[۲۹]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۵٫۲ ۲ نوامبر ۲۰۰۶ ۶ ژانویه ۲۰۱۱[۲۵] افزونهٔ فیلتر (Filter Extension) به صورت پیش‌فرض فعال شد. پشتیبانی از جی‌سَن (JSON) افزوده شد.[۲۸]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۵٫۳ ۳۰ ژوئن ۲۰۰۹ ۱۴ اوت ۲۰۱۴[۲۵] پشتیبانی از namespace, late static binding، دستور jump (نسخهٔ ضعیف شدهٔ دستور Goto) و زباله جمع‌کن. پشتیبانی بهتر از سیستم‌عامل ویندوز. پشتیبانی از اس‌کیوال‌لایت نسخهٔ ۳. کتابخانهٔ Mysqlnd جایگزین کتابخانهٔ libmysql (که مسئول برقراری ارتباط با بانک‌اطلاعاتی مای‌اس‌کیوال بود) شد. افزونهٔ fileinfo که کارایی بهتری در مورد MIMEها دارد، جایگزین افزونهٔ mime_magic شد. افزونهٔ بین‌الملل (Internationalization) اضافه شد و توابع ereg از دور خارج شدند.
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۵٫۴ ۱ مارس ۲۰۱۲ ۳ سپتامبر ۲۰۱۵[۲۵] پشتیبانی از Trait. پشتیبانی از آرایه‌ها با فرمت کوتاه. سرور وب داخلی.[۳۰] بهبود کارایی و استفاده از حافظه به میزان کمتر.
توابع حذف شده: register_globals, safe_mode, allow_call_time_pass_reference, session_register
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۵٫۵ ۲۰ ژوئن ۲۰۱۳ ۱۰ ژوئیه ۲۰۱۶[۳۱] جنراتورها افزوده شدند(Generators). بهینه‌ساز زند+ (Zend Optimizer+) افزوده شد.[۳۲]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۵٫۶ ۲۸ اوت ۲۰۱۴ ۳۱ دسامبر ۲۰۱۸[۳۱] قابلیت بازنویسی عملگرها (Operator Overloading). ایجاد تغییرات در GMP یا GNU Multiple Precision.[۳۳]
۶٫x منتشر نشده Abandoned version of PHP that planned to include native Unicode support.[۳۴][۳۵]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۷٫۰ ۳ دسامبر ۲۰۱۵[۳۶] ۳ دسامبر ۲۰۱۸[۳۷] Zend Engine 3 (performance improvements[۳۸] and 64-bit integer support on Windows[۳۹]), uniform variable syntax,[۴۰] AST-based compilation process,[۴۱] added Closure::call(),[۴۲] bitwise shift consistency across platforms,[۴۳] ?? (null coalesce) operator,[۴۴] Unicode code point escape syntax,[۴۵] return type declarations,[۴۶] scalar type (integer, float, string and boolean) declarations,[۴۷] <=> "spaceship" three-way comparison operator,[۴۸] generator delegation,[۴۹] anonymous classes,[۵۰] simpler and more consistently available CSPRNG API,[۵۱] replacement of many remaining internal PHP "errors" with the more modern exceptions,[۵۲] and shorthand syntax for importing multiple items from a namespace.[۵۳]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۷٫۱ ۲۱ نوامبر ۲۰۱۶ ۱ دسامبر ۲۰۱۹[۳۱] مقدار بازگشتی void ,[۵۴] تعیین میزان دید برای ثابت‌ها در کلاس[۵۵]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۷٫۲ ۳۰ نوامبر ۲۰۱۷ ۳۰ نوامبر ۲۰۲۰[۳۱] Object parameter and return type hint,[۵۶] Libsodium extension,[۵۷] Abstract method overriding,[۵۸] Parameter type widening[۵۹]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۷٫۳ ۶ دسامبر ۲۰۱۶ (‎۱۵ آذر ۱۳۸۹)[۶۰] ۶ نوامبر ۲۰۲۱ (‎۱۵ آبان ۱۴۰۰) Flexible Heredoc and Nowdoc syntax,[۶۱] support for reference assignment and array deconstruction with list(),[۶۲] PCRE2 support,[۶۳] hrtime() function[۶۴]
نگارش قدیمی، دیگر پشتیبانی نمی‌شود: ۷٫۴ ۲۸ نوامبر ۲۰۱۹ (‎۷ آذر ۱۳۹۸)[۶۵] ۲۸ نوامبر ۲۰۲۲ (‎۷ آذر ۱۴۰۱)
نگارش قدیمی‌تر، هنوز پشتیبانی می‌شود: ۸ ۲۶ نوامبر ۲۰۲۰ (‎۶ آذر ۱۳۹۹)[۶۶] ۲۶ نوامبر ۲۰۲۳ (‎۵ آذر ۱۴۰۲) کامپایل درجا، آرایه‌ها می‌توانند با یک ایندکس منفی شروع شوند، consistent type errors for internal functions, fatal error for incompatible method signatures
نگارش پایدار جاری: ۸/۱ نوامبر ۲۰۲۰ (‎آبان ۱۳۹۹) نوامبر ۲۰۲۴ (‎آبان ۱۴۰۳) Explicit octal integer literal notation,[۶۷]
نگارش پایدار جاری: ۸/۲ دسامبر ۲۰۲۲ (آذر ۱۴۰۱)[۶۸] دسامبر ۲۰۲۵ (آذر ۱۴۰۴)
  • کلاس‌های فقط‌خواندنی[۶۹]
  • null, false, and true as stand-alone types[۷۰][۷۱]
  • locale-independent case conversion[۷۲]
  • disjunctive normal form types[۷۳]
  • ثوابت در تریت‌ها[۷۴]
نگارش آتی: ۸/۳ ۲۳ نوامبر ۲۰۲۳ (۲ آذر ۱۴۰۲)[۷۵] ۲۳ نوامبر ۲۰۲۶ (۲ آذر ۱۴۰۵)
ایجاز:
نگارش قدیمی
نگارش قدیمی‌تر، هنوز پشتیبانی می‌شود
نگارش پایدار جاری
آخرین نگارش پیش‌نمایش
انتشار آتی

از تاریخ ۲۸ جون سال ۲۰۱۱ میلادی (برابر ‎۷ تیر ۱۳۹۰)، گروه پی‌اچ‌پی برنامه‌ای مدون برای انتشار نسخه‌های آیندهٔ این زبان را منتشر کرد.[۷۶] بر اساس این برنامه، هر ماه یک انتشار جزئی و هر سال یک انتشار اصلی اتفاق خواهد افتاد. از هر نسخه از پی‌اچ‌پی تا ۳ سال پشتیبانی می‌شود. تا ۲ سال تمامی به‌روزرسانی‌ها و سال سوم تنها به‌روزرسانی‌های امنیتی برای هر نسخه منتشر می‌شود.

نماد ویرایش

 
elePHPant, نماد پی‌اچ‌پی

elePHPant نام نماد پروژه پی‌اچ‌پی است، یک فیل آبی با آرم پی‌اچ‌پی در کنارش، که توسط وینسنت پانتیر (به انگلیسی: Vincent Pontier)[۷۷] در سال ۱۹۹۸ طراحی شد.[۷۸]

«اگر در یک زاویه به طرفین نگاه کنید، حروف (PHP) شکل یک فیل را تشکیل می‌دادند.»[۷۹]

گاهی elePHPant به شکل اسباب‌بازی‌های مخملی دارای رنگ‌های مختلف است.

تغییرات زیادی از این نماد در طول سال‌ها ساخته شده‌است. فقط elePHPantهای بر اساس طرح اصلی وینسنت پانتیر توسط جامعه، رسمی در نظر گرفته می‌شوند.[۸۰] اینها قابل جمع‌آوری و برخی از آنها بسیار نادر هستند.[۸۱]

ساختار ویرایش

برنامه Hello World زیر با استفاده از زبان پی‌اچ‌پی که در درون کدهای اچ‌تی‌ام‌ال قرار گرفته‌است، نوشته شده:

<!DOCTYPE html>
<meta charset="utf-8">
<title>PHP Test</title>
<?php
 echo 'Hello World';
?>

از آنجایی که پی‌اچ‌پی نیازی ندارد که در درون کدهای اچ‌تی‌ام‌ال قرار بگیرد یا روی سرور وب اجرا شود، کوتاه‌ترین برنامه Hello World پی‌اچ‌پی به صورت زیر است:

<?= 'Hello world';

مفسر پی‌اچ‌پی تنها کدهایی را که در درون جداکننده‌های پی‌اچ‌پی قرار بگیرند، تفسیر می‌کند. معروف‌ترین جداکننده‌های پی‌اچ‌پی علامت <?php و ?> است. جداکننده‌های دیگری، مانند <script language="php"> و </script> یا جداکنندهٔ کوتاه <? یا <?= (که برای خروجی دادن متن یا متغیر استفاده می‌شود) و <% یا <%= و %> نیز وجود دارند. تمامی نوشته‌هایی که در خارج از جداکننده‌های پی‌اچ‌پی قرار بگیرند، توسط مفسر تفسیر نشده و به عنوان خروجی ارسال خواهند شد. استفاده از جداکننده‌های کوتاه می‌تواند از قابلیت حمل برنامه بکاهد. ازآن‌جاکه این جداکننده‌های توسط تنظیمات پی‌اچ‌پی فعال‌سازی نمی‌شود، استفاده از این جداکننده‌ها توصیه نمی‌شود.[۸۲] هدف تمامی این جداکننده‌ها این است که کد پی‌اچ‌پی را از قسمت غیر-پی‌اج‌پی مانند اچ‌تی‌ام‌ال جدا کند.[۸۳]

نام متغیرها در زبان پی‌اچ‌پی حتماً باید با نماد دلار آغاز شود و نیازی به مشخص کردن نوع آن‌ها نیست. برخلاف نام توابع و کلاس‌ها نام متغیرها به بزرگی و کوچکی حروف حساس هستند. خطوط جدید و فاصله‌ها نادیده گرفته شده (به جز فاصله‌هایی که در درون رشته‌ها قرار داشته باشند) و تمامی دستورهای این زبان با علامت سمی‌کولن (;) پایان می‌یابند.[۸۴] در زبان پی‌اچ‌پی به ۳ صورت متفاوت می‌توان کامنت گذاشت. از علامت‌های /* */ برای کامنت‌های چندخطی و از علامت‌های // یا # برای کامنت‌های یک خطی استفاده می‌شود.[۸۵]

 
مقایسه ۲ حالت کد پی‌اچ‌پی

از نظر ساختار کلی و کلمات کلیدی، پی‌اچ‌پی مانند بسیاری از زبان‌های سطح بالا از قواعد زبان سی پیروی می‌کند. اما برای تمام ساختارهای کنترلی قواعد نوع دومی نیز وجود دارد که می‌توان از آن‌ها مانند ساختار اصلی بهره برد.[۸۶] این قواعد نوع دوم مانند زبان‌های خانوادهٔ بیسیک است.

انواع داده ویرایش

زبان پی‌اچ‌پی داده‌های عددیِ صحیح را بر اساس نوع پلت‌فرم ذخیره می‌کند. در سیستم‌های ۳۲بیتی و ۶۴بیتی به ترتیب اعداد صحیح به‌صورت ۳۲ و ۶۴بیتی ذخیره می‌شوند. اعداد بدون علامت در عملکردی که مانند هیچ‌کدام از زبان‌ها برنامه‌نویسی دیگر نیست، در موقعیت‌هایی به اعداد علامت‌دار تبدیل می‌شود.[۸۷] اعداد صحیح می‌توانند با مبنای ده (به صورت مثبت یا منفی یا مثبت)، در مبنای ۱۶، در مبنای ۸ یا در مبنای ۲ مقدار دهی شود.[۸۸] اعداد اعشاری نیز با توجه به پلت‌فرم ذخیره می‌شوند. این اعداد را به صورت اعشاری ساده یا ۲ حالت از نمایش علمی می‌توان مشخص کرد.[۸۹] پی‌اچ‌پی مانند زبان‌های جاوا و سی++ به‌صورت پیش‌فرض داده‌های بولی (صحیح و غلط) را در خود تعریف کرده‌است. بر اساس قوانین تبدیل متغیرها در این زبان، تمامی متغیرهای غیر صفر به صحیح و تمامی متغیرها با مقدار صفر به غلط تبدیل می‌شوند.[۹۰] عملکردی مشابه در زبان پرل و سی++ وجود دارد. نوع داده‌ای به نام نال (null) نیز در این زبان وجود دارد. متغیر نال هیچ مقداری ندارد. تنها متغیر از نوع نال NULL (کلمهٔ نال با حروف بزرگ) است.[۹۱] داده‌هایی که از نوع منبع (Resource) هستند، نمایان‌گر اشاره‌گرهایی به منابع خارجی است. این نوع متغیرها توسط خانوادهٔ خاصی از توابع که از معمولاً در یک افزونه قرار دارند، ایجاد شده و تنها توسط همین خانواده از توابع قابل استفاده است. داده‌هایی مانند فایل، تصاویر و اتصال‌ها به پایگاه‌های داده مثال‌هایی از منابع خارجی هستند که نیاز به متغیرهای منبع دارند.[۹۲]آرایه‌ها می‌توانند اعضایی از تمامی انواع داده‌ای را در خود داشته‌باشند که پی‌اچ‌پی از آن‌ها پشتیبانی می‌کند. ترتیب در آرایه‌های پی‌اچ‌پی حفظ می‌گردد. آرایه‌ها در واقع جداول درهم‌سازی هستند که می‌توانند برای هر عضو خود یک کلید داشته‌باشند. در صورتی که کلیدی برای عضو مشخص نگردد، مانند آرایه‌های معمولی، به‌صورت خودکار از اعداد به‌عنوان کلید استفاده می‌گردد. این شماره‌گذاری از عدد صفر آغاز می‌شود. همچنین اعضای با کلید و بدون کلید می‌توانند در کنار هم در یک آرایه قرار بگیرند.[۹۳] پی‌اچ‌پی داده‌های رشته ای نیز دارد. رشته‌ها می‌توانند در درون علامت ' یا قرار گرفته یا با قواعد نوداک (nowdoc) و هیِرداک (heredoc) نوشته‌شوند.[۹۴][۹۵]

کتابخانه استاندارد پی‌اچ‌پی (SPL: Standard PHP Library) در تلاش است تا بتواند انواع داده‌های استاندارد را به بهترین نحو توسط کلاس و اینترفیس پیاده‌سازی کند. این داده‌ها شامل لیست پیوندی، پشته، صف و … است.[۹۶]

توابع ویرایش

زبان پی‌اچ‌پی صدها تابع پایه و هزاران تابع افزونه دارد. اکثر این توابع به‌خوبی روی وبگاه پی‌اچ‌پی مستندسازی شده‌اند. نام‌گذاری توابع پایهٔ این زبان از قوانین یکسانی و مشخصی پیروی نمی‌کند.[۹۷] پی‌اچ‌پی تاکنون توابعی برای پشتیبانی از رشته‌های اجرایی (Thread) ارائه نکرده‌است، اما از سیستم‌های چندپردازنده پازیکس (POSIX) پشتیبانی می‌کند.[۹۸]

توابع جدید می‌توانند به شکل زیر تعریف شوند:

function myNameFunction() { // تابع را تعریف می‌کند
 return 'John Doe'; // مقداری را بازمی‌گرداند
}

echo 'My name is ' . myNameFunction() . '!';
// خروجی متن مقابل خواهد بود: 'My name is John Doe!'

در نسخهٔ ۵٫۲ و نسخه‌های قبل آن توابع دست اول نبوده و تنها به‌صورت مستقیم یا غیرمستقیم با نام‌شان قابل فراخوانی هستند.[۹۹] توابع پی‌اچ‌پی می‌توانند بدون نوشتن نمونه اولیه (Prototype) تعریف شوند.[۹۹] تعریف توابع می‌تواند در درون بلاک‌های شرطی قرار بگیرند تا در شرایط خاص تعریف شود. تمامی توابع پی‌اچ‌پی در هنگام فراخوانی در جلوی خود باید پرانتز داشته‌باشند. متغیرهایی که با دستور new ساخته می‌شود، در صورتی که آرگومان نداشته‌باشد، از این قاعده مستثنی هست. پی‌اچ‌پی قابلیت تعریف توابع بدون نام را ندارد، اما می‌توان با قرار دادن نامِ یک تابع در متغیر تابع را به‌صورت غیرمستقیم فراخوانی کرد.[۹۹]

از نسخهٔ ۵٫۳ به بعد می‌توان با استفاده از قابلیت بستار (Closure)، توابع بدون‌اسم را به صورت زیر تعریف کرد:

function getAdder($x) {
 return function($y) use ($x) {
  return $x + $y;
 };
}

$adder = getAdder(8);
echo $adder(2); // خروجی عدد ۱۰ خواهد بود

در تکه‌کد بالا، تابع getAdder به کمک متغیر $x یک بستار تعریف می‌کند که متغیر $y را به‌عنوان ورودی می‌گیرد. این نوع تابع یک شیء دست اول است به این معنی که می‌توان آن را در یک متغیر نگاه داشت و می‌توان به‌عنوان ورودی آن را به توابع دیگر داد و استفاده‌های دیگری از آن کرد. (توضیحات کامل‌تر در وبگاه ویکی پی‌اچ‌پی موجود است)

دستور goto نیز در زبان پی‌اچ‌پی به‌شکل زیر قابل استفاده است:

function lock() {
 $file = fopen('file.txt', 'r+');
 retry:
 if (!flock($file, LOCK_EX | LOCK_NB)) {
  goto retry;
 }
 fwrite($file, 'Success!');
 fclose($file);
}

هنگامی که تابع flock فراخوانده می‌شود، پی‌اچ‌پی سعی می‌کند تا فایلی را قفل کند. کلمه‌ای که قبل از علامت : در ابتدای خط قرار می‌گیرد، نام خط را مشخص می‌کند. (در اینجا retry) این نام را می‌توان در دستور goto به‌عنوان مقصد استفاده کرد. مقصدهای دستور goto در زبان پی‌اچ‌پی باید درون فایل و محیط جاری باشند. پشتیبانی از این دستور از نسخهٔ ۵٫۳ به پی‌اچ‌پی افزوده شده‌است.[۱۰۰] دستور if در زبان پی‌اچ‌پی از توابع شرطی به‌شکل زیر قابل استفاده است:

$t = date("H");

if ($t < "20") {
  echo "Have a good day!";
}

خروجی "Have a good day!" اگر زمان فعلی (HOUR) کمتر از ۲۰ باشد چاپ خواهد شد.[۱۰۱]

اشیاء ویرایش

قابلیت برنامه‌نویسی شیءگرایی به‌صورت ابتدایی در نسخهٔ ۳ به زبان پی‌اچ‌پی افزوده و در نسخهٔ ۴ بهتر شد.[۷] این قابلیت که در نسخهٔ ۵ کاملاً بازنویسی شده‌بود، با افزایش قابلیت‌ها و بهبود عمل‌کرد در درون زبان قرار گرفت.[۱۰۲] در نسخه‌های قبلی پی‌اچ‌پی، با اشیاء مانند یک نوع داده برخورد می‌شد.[۱۰۲] بنابراین، باید در هر بار مقداردهی یا ارسال شیء به یک تابع، کل محتویات شیء در یک فضای حافظه جدید کپی شود، اما در نسخهٔ ۵ نحوهٔ مدیریت اشیا تغییر کرد. از این پس، اشیاء با یک اشاره‌گر به فضای حافظه مشخص می‌شود، نه با مقادیرشان. در کنار این بهبودها، مفاهیم جدیدی مانند متغیرهای شخصی (Private member variables) و عمومی (Public member variables) و همچنین کلاس‌های انتزاعی (Abstract Class)، کلاس‌های نهایی (Final Class) و بسیاری موارد دیگر نیز معرفی شد. نحوهٔ تعریف متدهای سازنده (Constructors) و تخریب‌کننده (Destructors) نیز مانند زبان سی++ استانداردسازی شد و راه حلی برای مدیریت خطاها و استثناها ارائه گردید. علاوه‌بر این موارد، پی‌اچ‌پی ۵ قابلیت استفاده از اینترفس‌ها (Interface) را نیز معرفی و از پیاده‌سازی چندین اینترفیس در یک کلاس پشتیبانی کرد. در این میان، اینترفیس‌های خاصی برای برقرار کردن رابطه با ساختارهای زبان به وجود آمدند؛ مثلاً، با کلاس‌هایی که اینترفیس ArrayAccess را پیاده‌سازی کنند، می‌توان مانند آرایه‌ها برخورد کرد.[۱۰۳]

اگر شخص برنامه‌نویس با استفاده از کلمهٔ کلیدی clone سعی کند که یک شیء را کپی کند، موتور زند ابتدا بررسی می‌کند که متد __clone در درون کلاس تعریف شده‌است یا خیر. در صورتی که تعریف نشده‌باشد، متد پیش‌فرض __clone فراخوانی می‌شود که تمامی خصوصیات کلاس را کپی می‌کند. اما اگر این متد در کلاس وجود داشته‌باشد، مسئولیت کپی کردن و مقداردهی در کلاس کپی‌شده بر عهدهٔ این متد خواهد بود.[۱۰۴]

یک نمونه‌کد ابتدایی از برنامه‌نویسی شیءگرا به زبان پی‌اچ‌پی به‌شکل زیر است:

class Person {
 public $firstName;
 public $lastName;

 public function __construct($firstName, $lastName = '') {
  $this->firstName = $firstName;
  $this->lastName = $lastName;
 }

 public function greet() {
  return "Hello, my name is " . $this->firstName . " " . $this->lastName . ".";
 }

 public static function staticGreet($firstName, $lastName) {
  return "Hello, my name is " . $firstName . " " . $lastName . ".";
 }
}

$he = new Person('John', 'Smith');
$she = new Person('Sally', 'Davis');
$other = new Person('iAmine');

echo $he->greet(); // prints "Hello, my name is John Smith."

echo $she->greet(); // prints "Hello, my name is Sally Davis."

echo $other->greet(); // prints "Hello, my name is iAmine."

echo Person::staticGreet('Jane', 'Doe'); // prints "Hello, my name is Jane Doe."

میدان دید متغیرها و متدهایی که در درون کلاس‌های پی‌اچ‌پی تعریف می‌شود، به‌وسیلهٔ کلمات کلیدی مانند public، private و protected مشخص می‌گردد. کلمهٔ کلیدی var نیز که در نسخه‌های قدیمی‌تر استفاده می‌شد، هم‌اکنون معادل public است. متدها و خاصیت‌های public در همه‌جا قابل دسترسی هستند. protected دسترسی آن‌ها را به کلاس‌های مشتق‌شده (Inherited Class) محدود کرده و private دسترسی را فقط برای کلاس تعریف‌کننده میسر می‌سازد.[۱۰۵] در پی‌اچ‌پی، اشیائی از یک نوع می‌توانند به متدها و خاصیت‌های خصوصی (private) یکدیگر دسترسی داشته‌باشند. در بسیاری از موارد، قابلیت‌های میدان دید در این زبان مفید دانسته می‌شود.[۱۰۶] با این حال عده‌ای نیز آن‌ها را ناکارآمد می‌دانند.[۱۰۷]

پیاده‌سازی‌ها ویرایش

در ابتدا، زبان پی‌اچ‌پی به صورت یک زبان مفسری پیاده‌سازی شد و امروزه نیز این پیاده‌سازی پرکاربردترین نسخهٔ مورد استفاده است. تعدادی مترجم نیز برای این زبان ایجاد شده‌است که این زبان را از مفسرها دور می‌کند. مترجم‌ها در زمان اجرا، قابلیت آنالیز ایستا (Static Analysis) و رابطهٔ بهینه با زبان‌های دیگر نسبت به مفسرها برتری دارند.

از مترجم‌های مطرح زبان پی‌اچ‌پی می‌توان به فالانگر اشاره کرد که کد پی‌اچ‌پی را به بایت‌کد زبان میانی مشترک (CIL) تبدیل می‌کند، و هیپ‌هاپ که به صورت منبع‌باز توسط فیس‌بوک توسعه داده می‌شود. مترجم هیپ‌هاپ با تبدیل کد پی‌اچ‌پی به کد زبان سی++ می‌تواند سربار سرور را تا ۶ برابر کاهش دهد.[۱۰۸]

از روش‌های دیگری که برای بهبود زمان اجرا اسفاده می‌شود، می‌توان از بهینه‌سازی کد نام برد. این عمل با کاهش حجم کد، حذف و ادغام قسمت‌های تکراری و تغییرات متفاوت دیگر صورت می‌گیرد. قابلیت بهینه‌سازی کد در زبان پی‌اچ‌پی نیز موجود بوده و برنامه‌ها و افزونه‌هایی، مانند eAccelerator برای این منظور توسعه داده می‌شود.[۱۰۹]

برای کاهش سربار ترجمه در زبان پی‌اچ‌پی می‌توان از حافظه نهان برای کدهای عملیاتی (Opcode Caching) نیز استفاده کرد. در این روش، دستورهای ترجمه‌شده، در حافظهٔ مشترک (Shared Memory) قرار می‌گیرد تا از ترجمهٔ مجدد آن‌ها جلوگیری شود. از نسخهٔ ۵٫۵ به بعد افزونه Zend Opcache که از این روش برای افزایش کارایی استفاده می‌کند، به صورت پیش‌فرض به زبان پی‌اچ‌پی افزوده شد.[۱۱۰] از نمونه‌های دیگر حافظهٔ نهان برای کدهای عملیاتی می‌توان به Alternative PHP Cache (APC) اشاره کرد.[۱۱۱]

پروانه انتشار ویرایش

پی‌اچ‌پی یک نرم‌افزار آزاد است که با پروانه پی‌اچ‌پی منتشر می‌شود.[۱۱] این پروانه علاوه بر قوانین موجود در نرم‌افزارهای آزاد اعلام می‌دارد که:

تمامی محصولاتی که بر پایهٔ پی‌اچ‌پی گسترش می‌یابند، نباید بدون اجازهٔ قبلی از group@php.net از نام "PHP" برای نام‌گذاری استفاده کنند. شما می‌توانید با قرار دادن کلمهٔ "for PHP" (به‌معنای برای پی‌اچ‌پی) در نام محصول خود نشان دهید که محصول شما با زبان پی‌اچ‌پی کار می‌کند؛ مثلاً استفاده از نام "PHP Foo" غیرمجاز است، در حالی‌که استفاده از "Foo for PHP" بدون مشکل خواهد بود.

وجود این محدودیت در پروانهٔ این زبان آن را با پروانه عمومی همگانی گنو (GPL) ناسازگار می‌کند.[۱۱۲]

توسعه و جامعیت ویرایش

پی اچ پی شامل کتابخانه‌های منبع باز و آزاد مختلفی در منبع توزیع خود می‌شود، یا از آن‌ها در برنامه‌های دودویی پی اچ پی استفاده می‌کند. پی اچ پی اساساً یک سامانه اینترنت فهم با ماژول‌های داخلی است که از طریق این ماژول‌ها به سرورهای FTP (پروتکل انتقال فایل) و بسیاری از سرورهای پایگاه داده از جمله PostgreSQL,Mysql,Microsoft SQL Server و SQLite (که یک پایگاه داده توکار است)، سرورهای LDAP و غیره. بسیاری از توابعی که برنامه نویسان زبان C با آن‌ها آشنایی دارند، مانند آن‌هایی که در خانواده stdio قرار دارند، در برنامه‌های استاندارد پی اچ پی قابل دسترسی هستند.

پی اچ پی به توسعه دهندگان این اجازه را می‌دهد تا با نوشتن افزونه‌هایی به زبان C، به زبان پی اچ پی کارایی لازم را ببخشند. افزونه‌های پی اچ پی می‌توانند به صورت ایستا در داخل پی اچ پی کامپایل شوند یا به صورت پویا در زمان اجرا بارگزاری شوند. افزونه‌های بی شماری نوشته شده‌اند تا از ویندوز اِی پی آی، فرایند مدیریت در سیستم عامل‌های شبه یونیکس، رشته‌های چند بایتی (یونیکدcURL و چند قالب فشرده سازی محبوب پشتیبانی کنند. دیگر ویژگی‌های پی اچ پی که توسط افزونه‌ها در دسترس قرار گرفتند، شامل مجتمع سازی با IRC، تولید پویای تصاویر و محتوای ادوبی فلش، اشیاء داده پی اچ پی (PDO) که به عنوان یک لایه ظاهری برای دسترسی به پایگاه داده به کار می‌رود، و حتی ترکیب صدا می‌شود. بخشی از توابع هسته زبان، مانند آن‌هایی که با رشته‌ها و آرایه‌ها سروکار دارند، نیز به عنوان افزونه پیاده‌سازی شده‌اند. پروژه کتابخانه جامع افزونه‌های پی اچ پی (PECL) مخزنی برای افزونه‌های به زبان پی اچ پی است.

چند پروژه دیگر مانند زفیر (Zephir)، برای افزونه‌های پی اچ پی این توانایی را فراهم می‌کنند تا به یک زبان سطح بالا نوشته شده و به افزونه‌های داخلی پی اچ پی کامپایل شوند. چنین رویکردی، به جای نوشتن افزونه‌های پی اچ پی به زبان C به صورت مستقیم، توسعه افزونه‌ها را تسهیل کرده و زمان لازم برای برنامه‌نویسی و تست را کاهش می‌دهد.

در دسامبر سال ۲۰۱۸ میلادی، گروه پی اچ پی شامل ۱۰ نفر بود: سیِز سی آرِنتزِن، استیگ باکِن، شِین کاراوِئو، اندی گاتمَنز، راسموس لردورف، سم رابی، ساشا شومان، زیو سوراسکی، جیم وینستِد و آندرِی زِمینِوسکی. فناوری زِند بر اساس آزمون پی اچ پی ۵٫۵ یک گواهی نامه پی اچ پی برای برنامه نویسان صادر می‌کند تا به عنوان توسعه دهندگان مجاز شناخته شوند.

نصب و تنظیمات ویرایش

به‌طور کلی، دو روش اصلی برای نصب زبان پی‌اچ‌پی بر روی سرورهای وب است. در بسیاری از سرورهای وب یک ماژول مستقیم به نام Server Application Programming Interface یا SAPI وجود دارد. برای مثال، سرورهای آپاچی، مایکروسافت آی‌آی‌اس و آی‌پلنت (iPlanet) از این روش استفاده می‌کنند. تعدادی دیگر از سرورهای وب نیز از Internet Server Application Programming Interface یا ISAPI پشتیبانی می‌کنند. اگر زبان پی‌اچ‌پی در سرور وب ماژولی نداشته‌باشد، همواره می‌توان از آن به عنوان Common Gateway Interface یا CGI و FastCGI استفاده کرد. در این حالت باید سرور را تنظیم کرد تا تمامی درخواست‌های مربوط به زبان پی‌اچ‌پی را با فایل‌های CGI اجرا کند.[۱۱۳]

برای نوشتن برنامه‌های دارای رابط گرافیکی نیز می‌توان از افزونهٔ PHP-GTK در زبان پی‌اچ‌پی استفاده کرد. این افزونه در نسخهٔ منتشر شده موجود نیست و باید به این زبان افزوده‌شود.[۱۱۳] برای استفاده از این افزونه، نسخهٔ پی‌اچ‌پی باید بالاتر از ۵٫۱ باشد. رایج‌ترین روش برای نصب این افزونه، ترجمهٔ کد آن می‌باشد.[۱۱۴]

هنگامی که از زبان پی‌اچ‌پی در محیط‌های ابری استفاده می‌شود، کیت‌های توسعه نرم‌افزار (SDK) خاصی برای استفاده از امکانات محیط نیز همراه با آن منتشر می‌گردد. برای مثال:

امنیت ویرایش

۲۹٪ از مشکلات امنیتی که در ماه سپتامبر سال ۲۰۱۳ میلادی توسط پایگاه داده امنیتی ملی (National Vulnerability Database) منتشر شد، با زبان پی‌اچ‌پی مرتبط است.[۱۱۵] این مسائل اکثراً به دلیل نبود استفاده از روش‌های مناسب توسط برنامه‌نویسان ایجاد می‌شود. و این در حالی‌است که مشکلات تکنیکی که در خود زبان پی‌اچ‌پی وجود دارند، بسیار کم هستند. (۲۳ مشکل در سال ۲۰۰۸، کمتر از ۱٪ مشکلات)[۱۱۶][۱۱۷] با توجه به این‌که برنامه‌نویس‌ها اشتباهات بسیاری می‌کنند، بارها پیشنهاد شده‌است که قابلیت‌هایی برای تشخیص خطاهای امنیتی در زبان پی‌اچ‌پی گنجانده شود تا این خطاها را به برنامه‌نویس گزارش بدهد. با اینکه چنین ابزاری برای زبان پی‌اچ‌پی در حال توسعه است،[۱۱۸] اما این پیشنهادها تاکنون رد شده و این ابزارها به زبان افزوده نشده‌اند.[۱۱۹]

تست PHP ویرایش

تست برنامه‌های کاربردی و نرم‌افزارهای توسعه داده شده با PHP از جهت‌های مختلف حایز اهمیت هستند. با توجه به استفاده فراگیر PHP در برنامه‌های کاربردی وب (Web Applications) تست کارایی (Performance Testing)از اهمیت دوچندانی برخوردار است. همچنین ابزارهای بازبینی و مرور کد نیز کمک فراوانی به توسعه دهندگان می‌کند که بتوانیم بسیاری از اشکالات را در سطح کد و قبل از تست برطرف نماییم.

اشکال زدایی php ویرایش

گاهی ممکن است به دلایل مختلف در یک برنامه php مشکلاتی ایجاد شود، در حالت عادی یافتن خطا در بین هزاران خط کد ممکن است بسیار سخت باشد

در php می‌توان با فعال کردن حالت اشکال زدایی با استفاده از توابع مربوط به آن، خطا در برنامه را به راحتی پیدا کرد.

یک روش فعال سازی حالت اشکال زدایی در php:

ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);

جستارهای وابسته ویرایش

منابع ویرایش

  1. "Version 8.3.4". 14 مارس 2024. Retrieved 18 March 2024.
  2. "PHP 8.1.0 Beta 1 available for testing". 22 ژوئیه 2021. Retrieved 29 July 2021.
  3. "PHP: Function arguments - Manual". secure.php.net.
  4. http://php.net/license/; زمان بازیابی داده‌ها: 25 اوت 2016.
  5. https://fileinfo.com/extension/php.
  6. Andy Ide (January 31, 2013), PHP just grows & grows (به انگلیسی), Netcraft, retrieved September 22, 2013
  7. ۷٫۰۰ ۷٫۰۱ ۷٫۰۲ ۷٫۰۳ ۷٫۰۴ ۷٫۰۵ ۷٫۰۶ ۷٫۰۷ ۷٫۰۸ ۷٫۰۹ History of PHP (به انگلیسی), PHP Website, retrieved September 22, 2013
  8. Preface (به انگلیسی), PHP Webiste, retrieved September 22, 2013
  9. What can PHP do? (به انگلیسی), PHP Website, retrieved September 22, 2013
  10. PHP: Installation and Configuration (به انگلیسی), PHP Website, retrieved September 22, 2013
  11. ۱۱٫۰ ۱۱٫۱ The PHP License, version 3.01 (به انگلیسی), PHP Website, retrieved September 22, 2013
  12. Rasmus Lerdorf (June 8, 1995), Announce: Personal Home Page Tools (PHP Tools) (به انگلیسی), retrieved September 24, 2013
  13. PHP and Zend Engine (به انگلیسی), Zend, retrieved September 24, 2013
  14. Zend Takes Home Award for Best Israeli Startup Company (به انگلیسی), Zend Press, June 21, 2006, retrieved September 24, 2013
  15. ۱۵٫۰ ۱۵٫۱ PHP: News Archive 2007 (به انگلیسی), PHP News, 2007, retrieved September 24, 2013
  16. Sean Michael Kerner (February 01, 2008), PHP 4 is Dead—Long Live PHP 5 (به انگلیسی), Internet News, retrieved September 24, 2013 {{citation}}: Check date values in: |تاریخ= (help)
  17. Adam Trachtenberg (July 15, 2004), Why PHP 5 Rocks! (به انگلیسی), O'Reilly, archived from the original on 31 March 2016, retrieved September 24, 2013
  18. Description of core php.ini directives (به انگلیسی), PHP, retrieved September 24, 2013
  19. Deprecated features in PHP 5.3.x (به انگلیسی), PHP, archived from the original on 23 September 2013, retrieved September 24, 2013
  20. Go PHP5! (به انگلیسی), Edge Hill University, July 01, 2007, archived from the original on 27 September 2013, retrieved September 24, 2013 {{citation}}: Check date values in: |تاریخ= (help)
  21. PEARL: Joining the GoPHP5.org's movement (به انگلیسی), retrieved September 24, 2013
  22. Lets Go PHP5 (به انگلیسی), Hawk Host Blog, January 20, 2008, retrieved September 24, 2013
  23. PHP for Windows (به انگلیسی), PHP, retrieved September 24, 2013
  24. PHP For Windows: Binaries and sources Snapshots (به انگلیسی), retrieved September 24, 2013
  25. ۲۵٫۰۰ ۲۵٫۰۱ ۲۵٫۰۲ ۲۵٫۰۳ ۲۵٫۰۴ ۲۵٫۰۵ ۲۵٫۰۶ ۲۵٫۰۷ ۲۵٫۰۸ ۲۵٫۰۹ ۲۵٫۱۰ ۲۵٫۱۱ "Unsupported Branches". php.net. Retrieved 2015-11-14.
  26. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام about PHP وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  27. ۲۷٫۰ ۲۷٫۱ ۲۷٫۲ ۲۷٫۳ ۲۷٫۴ PHP: PHP 4 ChangeLog (به انگلیسی), retrieved September 24, 2013
  28. ۲۸٫۰ ۲۸٫۱ ۲۸٫۲ PHP: PHP 5 ChangeLog (به انگلیسی), PHP, retrieved September 24, 2013
  29. Introduction to PDO (به انگلیسی), PHP, retrieved Spetember 24, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  30. PHP: Built-in web server - Manual (به انگلیسی), retrieved September 24, 2013
  31. ۳۱٫۰ ۳۱٫۱ ۳۱٫۲ ۳۱٫۳ "Supported Versions". php.net. Retrieved 2017-12-13.
  32. What is new in PHP 5.5.4 (به انگلیسی), Mildcoder, retrieved September 24, 2013
  33. PHP RFC: Internal operator overloading and GMP improvements (به انگلیسی), May 12, 2013, retrieved September 24, 2013
  34. "Resetting PHP 6". There have been books on the shelves purporting to cover PHP 6 since at least 2008. But, in March 2010, the PHP 6 release is not out — in fact, it is not even close to out. Recent events suggest that PHP 6 will not be released before 2011 — if, indeed, it is released at all.
  35. "PHP 7 moves full speed ahead". Recent versions of PHP have been part of the 5.x release series, but there will be no PHP 6. "We're going to skip [version] 6, because years ago, we had plans for a 6, but those plans were very different from what we're doing now," Gutmans said. Going right to version 7 avoids confusion.
  36. "News Archive – 2018: PHP 7.2.9 Released". php.net. 2018-08-16. Retrieved 2018-08-16.
  37. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام releaseprocess وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  38. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام phpng وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  39. "PHP: rfc:size_t_and_int64_next". php.net. Retrieved 16 December 2014.
  40. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام uvs وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  41. "PHP: rfc:abstract_syntax_tree". php.net. Retrieved 16 December 2014.
  42. "PHP: rfc:closure_apply". php.net. Retrieved 16 December 2014.
  43. "PHP: rfc:integer_semantics". php.net. Retrieved 16 December 2014.
  44. "PHP: rfc:isset_ternary". php.net. Retrieved 16 December 2014.
  45. "RFC: Unicode Codepoint Escape Syntax". 2014-11-24. Retrieved 2014-12-19.
  46. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام return-types وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  47. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام scalar-types وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  48. "Combined Comparison (Spaceship) Operator". php.net. Retrieved 2015-05-21.
  49. "PHP RFC: Generator Delegation". php.net. Retrieved 2015-05-21.
  50. "PHP RFC: Anonymous Classes". php.net. Retrieved 2015-05-21.
  51. "PHP RFC: Easy User-land CSPRNG". php.net. Retrieved 2015-05-21.
  52. "PHP RFC: Exceptions in the engine (for PHP 7)". php.net. Retrieved 2015-05-21.
  53. "PHP RFC: Group Use Declarations". php.net. Retrieved 2015-05-21.
  54. "PHP: rfc:void_return_type". php.net. 2015-11-09. Retrieved 2015-11-14.
  55. "PHP: rfc:class_constant_visibility". php.net. 2015-10-27. Retrieved 2015-12-08.
  56. "PHP: rfc:object-typehint". wiki.php.net.
  57. "PHP: rfc:libsodium". wiki.php.net.
  58. "PHP: rfc:allow-abstract-function-override". wiki.php.net.
  59. "PHP: rfc:parameter-no-type-variance". wiki.php.net.
  60. "PHP: Supported Versions". php.net.
  61. "PHP: rfc:flexible_heredoc_nowdoc_syntaxes". wiki.php.net.
  62. "PHP: rfc:list_reference_assignment". wiki.php.net.
  63. "PHP: rfc:pcre2-migration". wiki.php.net.
  64. "PHP: hrtime - Manual". php.net.
  65. "PHP: Supported Versions". php.net.
  66. "PHP: todo:php80". wiki.php.net. Retrieved 2020-06-16.
  67. "PHP RFC: Explicit octal integer literal notation". wiki.php.net. Retrieved 2020-11-25.
  68. "PHP VERSION: Supported Versions". php.net.
  69. «PHP: rfc:readonly_classes». wiki.php.net. دریافت‌شده در ۲۰۲۳-۰۴-۲۸.
  70. «PHP: rfc:null-false-standalone-types». wiki.php.net. دریافت‌شده در ۲۰۲۳-۰۴-۲۸.
  71. «PHP: rfc:true-type». wiki.php.net. دریافت‌شده در ۲۰۲۳-۰۴-۲۸.
  72. «PHP: rfc:strtolower-ascii». wiki.php.net. دریافت‌شده در ۲۰۲۳-۰۴-۲۸.
  73. «PHP: rfc:dnf_types». wiki.php.net. دریافت‌شده در ۲۰۲۳-۰۴-۲۸.
  74. «PHP: rfc:constants_in_traits». wiki.php.net. دریافت‌شده در ۲۰۲۳-۰۴-۲۸.
  75. php.net VERSION: Supported Versions https://www.php.net/supported-versions.php VERSION: Supported Versions. {{cite web}}: Check |url= value (help); Missing or empty |title= (help)
  76. خطای یادکرد: خطای یادکرد:برچسب <ref>‎ غیرمجاز؛ متنی برای یادکردهای با نام release وارد نشده است. (صفحهٔ راهنما را مطالعه کنید.).
  77. "PHP: ElePHPant". 4 Oct 2014. Retrieved 4 Oct 2014.
  78. "Redirecting…". wwphp-fb.github.io.
  79. "تولد نماد پی‌اچ‌پی - خالق فیل پی‌اچ‌پی وینسنت پانتیر داستان واقعی را فاش می‌کند!". 7php.com. 2014-01-06.
  80. "PHP: ElePHPant". www.php.net.
  81. "راهنمای میدانی برای Elephpantها". afieldguidetoelephpants.net.
  82. PHP: PHP tags (به انگلیسی), PHP, retrieved September 24, 2013
  83. Your first PHP-enabled page (به انگلیسی), PHP Manual, retrieved October 08, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  84. Instruction separation (به انگلیسی), PHP Manual, retrieved October 08, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  85. PHP: Comments (به انگلیسی), PHP Manual, retrieved October 08, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  86. Alternative syntax for control structures (به انگلیسی), PHP Manual, retrieved October 08, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  87. Andrew Aksyonoff (March 27, 2007), Integers in PHP, running with scissors, and portability (به انگلیسی), retrieved October 09, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  88. PHP: Integers (به انگلیسی), PHP Manual, retrieved October 09, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  89. PHP: Floating point numbers (به انگلیسی), PHP Manual, retrieved October 09, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  90. PHP: Booleans (به انگلیسی), PHP Manual, retrieved October 09, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  91. PHP: NULL (به انگلیسی), PHP Manual, retrieved October 09, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  92. PHP: Reources (به انگلیسی), PHP Manual, retrieved October 09, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  93. PHP: Arrays (به انگلیسی), retrieved October 09, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  94. معرفی زبان برنامه‌نویسی PHP و کاربردهایش. «PHP چیست». programming.tosinso.com. دریافت‌شده در ۲۰۲۳-۰۴-۱۰.
  95. PHP: Strings (به انگلیسی), PHP Manual, retrieved October 09, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  96. PHP: SPL (به انگلیسی), PHP, retrieved October 09, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  97. Problems with PHP (به انگلیسی), ToyKeeper Network, retrieved October 22, 2013
  98. PHP: Process Control (به انگلیسی), PHP Manual, retrieved October 22, 2013
  99. ۹۹٫۰ ۹۹٫۱ ۹۹٫۲ PHP: Functions (به انگلیسی), PHP Manual, retrieved October 22, 2013
  100. PHP: Goto (به انگلیسی), PHP Manual, retrieved October 23, 2013
  101. PHP: If (به انگلیسی), w3schools
  102. ۱۰۲٫۰ ۱۰۲٫۱ Michael Tsai (July 15, 2004), PHP5 Object References (به انگلیسی), retrieved October 24, 2013
  103. PHP: Classes and Objects (به انگلیسی), PHP Manual, retrieved October 30, 2013
  104. PHP: Object Cloning (به انگلیسی), PHP Manual, retrieved October 30, 2013
  105. PHP: Visibility (به انگلیسی), PHP Manual, retrieved October 30, 2013
  106. Alejandro Gervasio (June 25, 2008), More on Private Methods with PHP5 Member Visibility (به انگلیسی), Dev Shed, retrieved October 30, 2013
  107. Visibility in PHP: Public, Private and Protected (به انگلیسی), retrieved October 30, 2013
  108. Scaling PHP with HipHop (به انگلیسی), FOSDEM 2013, retrieved November 06, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  109. Nick Lindridge, PHP Accelerator 2.1 (Page 3) (PDF) (به انگلیسی), archived from the original (PDF) on 14 May 2008, retrieved November 06, 2013 {{citation}}: Check date values in: |تاریخ بازبینی= (help)
  110. Vote: Integrating Zend Optimizer+ into the PHP distribution (به انگلیسی), retrieved November 11, 2013
  111. PHP: APC - Manual (به انگلیسی), PHP Manual, archived from the original on 15 November 2013, retrieved November 11, 2013
  112. GPL-Incompatible Free Software Licenses (به انگلیسی), GNU, retrieved September 22, 2013
  113. ۱۱۳٫۰ ۱۱۳٫۱ PHP: General Installation Consideration (به انگلیسی), PHP Website, retrieved November 28, 2013
  114. PHP-GTK2 Installation (به انگلیسی), archived from the original on 12 December 2013, retrieved December 1, 2013
  115. PHP-related vulnerabilities on the National Vulnerability Database (به انگلیسی), September 09, 2013, retrieved November 11, 2013 {{citation}}: Check date values in: |تاریخ= (help)
  116. Security and... Driving? (and Hiring) (به انگلیسی), January 24, 2006, retrieved November 11, 2013
  117. Open Enterprise Interview: Ivo Jansch (به انگلیسی), archived from the original on 11 November 2013, retrieved November 11, 2013
  118. Taint support for PHP (به انگلیسی), PHP Wiki, retrieved November 11, 2013
  119. Zend Weekly Summaries Issue #368 (به انگلیسی), Zend Devzone, archived from the original on 11 November 2013, retrieved November 11, 2013

پیوند به بیرون ویرایش