پیاچپی (PHP) یک زبان برنامهنویسیِ شیءگرا و برای سرور است که برای طراحی وب توسعه یافتهاست؛ اما میتوان از آن به عنوان یک زبان عمومی نیز استفادهکرد. تا ژانویهٔ سال ۲۰۱۳ میلادی، پیاچپی روی ۲۴۴ میلیون وبگاه و ۲٫۱ میلیون سرور وب نصب شدهاست.[۷] این زبان در سال ۱۹۹۵ میلادی توسط راسموس لِردورف (به انگلیسی: Rasmus Lerdorf) ساختهشد و در حال حاضر توسعهٔ آن بر عهدهٔ گروه پیاچپی است.[۸] در ابتدا، پیاچپی از عبارت صفحهٔ خانگی شخصی (به انگلیسی: Personal Home Page) گرفته شدهبود. اما اکنون این کلمه مخففِ بازگشتی PHP: Hypertext Preprocessor به معنی پیاچپی: پیشپردازندهی ابرمتن است
کدهای پیاچپی توسط یک سرور وب که نرمافزار پیاچپی روی آن نصب باشد، تفسیر میشود. دستورهای این زبان میتوانند به صورت مستقیم در درون کدهای اچتیامال قرار بگیرند. زبان پیاچپی از نسخهٔ ۴٫۳ به بعد قابلیت پشتیبانی از واسط خط فرمان را نیز به امکانات خود اضافه کرد. این قابلیت میتواند برای ایجاد نرمافزارهای غیر وبی یا نرمافزارهایی با واسط گرافیکی کاربر مورد استفاده قرار بگیرد.
پیاچپی یک نرمافزار آزاد است که تحت مجوز پیاچپی انتشار یافتهاست. این مجوز به دلیل قرار دادن محدودیت روی استفاده از عنوان پیاچپی، با مجوز همگانی گنو (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 به معنای برو به پیاچپی ۵ دیگر از پیاچپی نسخهٔ ۴ استفاده نمیکنند. این جنبش توسط بسیاری از توسعهدهندگان پیاچپی پشتیبانی شد تا بتوانند به گسترش استفاده از نسخهٔ ۵ پیاچپی کمک کنند.
مفسرهای زبان پیاچپی برای هر دو معماری ۳۲بیتی و ۶۴بیتی موجود است. تنها استثنا سیستمعامل ویندوز است که فقط نسخههای ۳۲بیتی برای آن منتشر میشود. اما مدتی است که نسخههای ۶۴بیتی ویندوزی نیز به صورت امتحانی روی وبگاه پیاچپی منتشر میشوند و استفاده از نسخههای امتحانی ۶۴بیتی ویندوز برای سرورهای بزرگ توصیه نمیشود.
در ابتدا، زبان پیاچپی به صورت یک زبان مفسری پیادهسازی شد و امروزه نیز این پیادهسازی پرکاربردترین نسخهٔ مورد استفاده است. تعدادی مترجم نیز برای این زبان ایجاد شدهاست که این زبان را از مفسرها دور میکند. مترجمها در زمان اجرا، قابلیت آنالیز ایستا (Static Analysis) و رابطهٔ بهینه با زبانهای دیگر نسبت به مفسرها برتری دارند.
از مترجمهای مطرح زبان پیاچپی میتوان به فالانگر اشاره کرد که کد پیاچپی را به بایتکد زبان میانی مشترک (CIL) تبدیل میکند، و هیپهاپ که به صورت منبعباز توسط فیسبوک توسعه داده میشود. مترجم هیپهاپ با تبدیل کد پیاچپی به کد زبان سی++ میتواند سربار سرور را تا ۶ برابر کاهش دهد.
از روشهای دیگری که برای بهبود زمان اجرا اسفاده میشود، میتوان از بهینهسازی کد نام برد. این عمل با کاهش حجم کد، حذف و ادغام قسمتهای تکراری و تغییرات متفاوت دیگر صورت میگیرد. قابلیت بهینهسازی کد در زبان پیاچپی نیز موجود بوده و برنامهها و افزونههایی، مانند eAccelerator برای این منظور توسعه داده میشو.
برای کاهش سربار ترجمه در زبان پیاچپی میتوان از حافظه نهان برای کدهای عملیاتی (Opcode Caching) نیز استفاده کرد. در این روش، دستورهای ترجمهشده، در حافظهٔ مشترک (Shared Memory) قرار میگیرد تا از ترجمهٔ مجدد آنها جلوگیری شود. از نسخهٔ ۵٫۵ به بعد افزونه Zend Opcache که از این روش برای افزایش کارایی استفاده میکند، به صورت پیشفرض به زبان پیاچپی افزوده شد. از نمونههای دیگر حافظهٔ نهان برای کدهای عملیاتی میتوان به Alternative PHP Cache (APC) اشاره کرد.
پیاچپی یک نرمافزار آزاد است که با پروانه پیاچپی منتشر میشود. این پروانه علاوه بر قوانین موجود در نرمافزارهای آزاد اعلام میدارد که:
وجود این محدودیت در پروانهٔ این زبان آن را با پروانه عمومی همگانی گنو (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 در زبان پیاچپی استفاده کرد. این افزونه در نسخهٔ منتشر شده موجود نیست و باید به این زبان افزودهشود. برای استفاده از این افزونه، نسخهٔ پیاچپی باید بالاتر از ۵٫۱ باشد. رایجترین روش برای نصب این افزونه، ترجمهٔ کد آن میباشد.
۲۹٪ از مشکلات امنیتی که در ماه سپتامبر سال ۲۰۱۳ میلادی توسط پایگاه داده امنیتی ملی (National Vulnerability Database) منتشر شد، با زبان پیاچپی مرتبط است. این مسائل اکثراً به دلیل نبود استفاده از روشهای مناسب توسط برنامهنویسان ایجاد میشود. و این در حالیاست که مشکلات تکنیکی که در خود زبان پیاچپی وجود دارند، بسیار کم هستند. (۲۳ مشکل در سال ۲۰۰۸، کمتر از ۱٪ مشکلات) با توجه به اینکه برنامهنویسها اشتباهات بسیاری میکنند، بارها پیشنهاد شدهاست که قابلیتهایی برای تشخیص خطاهای امنیتی در زبان پیاچپی گنجانده شود تا این خطاها را به برنامهنویس گزارش بدهد. با اینکه چنین ابزاری برای زبان پیاچپی در حال توسعه است، اما این پیشنهادها تاکنون رد شده و این ابزارها به زبان افزوده نشدهاند.
تست برنامههای کاربردی و نرمافزارهای توسعه داده شده با PHP از جهتهای مختلف حایز اهمیت هستند. با توجه به استفاده فراگیر PHP در برنامههای کاربردی وب (Web Applications) تست کارایی (Performance Testing)از اهمیت دوچندانی برخوردار است. همچنین ابزارهای بازبینی و مرور کد نیز کمک فراوانی به توسعه دهندگان میکند که بتوانیم بسیاری از اشکالات را در سطح کد و قبل از تست برطرف نماییم.
گاهی ممکن است به دلایل مختلف در یک برنامه php مشکلاتی ایجاد شود، در حالت عادی یافتن خطا در بین هزاران خط کد ممکن است بسیار سخت باشد