موضوع مقاله: پی‌اچ‌پی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # پی‌اچ‌پی | مقدمه: پی‌اچ‌پی (PHP) یک زبان برنامه‌نویسیِ شیءگرا و چند منظوره است که برای طیف گسترده‌ای از کاربردها استفاده می‌شود. | ## بخش 1: پی‌اچ‌پی | پی‌اچ‌پی ابتدا برای طراحی وب و اجرا بر روی سرورها توسعه یافته‌شد؛ اما امروزه می‌توان از آن به عنوان یک زبان عمومی نیز استفاده‌کرد. در صورتی که پی‌اچ‌پی سمت سرور مورد استفاده قرار گیرد، کد‌های نوشته‌شده صرفاً بر روی آن سرور اجرا می‌شود و برای کاربر (سمت کلاینت) قابل مشاهده نخواهد بود. در ژانویهٔ سال ۲۰۱۳ میلادی، پی‌اچ‌پی روی ۲۴۴ میلیون وبگاه و ۲٫۱ میلیون سرور وب نصب شده‌است. این زبان در سال ۱۹۹۵ میلادی توسط راسموس لِردورف ساخته‌شد و در حال حاضر توسعهٔ آن بر عهدهٔ گروه پی‌اچ‌پی است. کدهای پی‌اچ‌پی توسط نرم‌افزار پی‌اچ‌پی تفسیر می‌شود، و در صورتی که بر روی یک سرور وب اجرا شده باشد خروجی برنامه از طریق وب‌سرور در دسترس کاربر قرار می‌گیرد. دستورهای این زبان می‌توانند به صورت مستقیم در درون کدهای اچ‌تی‌ام‌ال قرار بگیرند، یا از پی‌اچ‌پی به‌عنوان وب‌سرویس ارائه دهنده API و بدون خروجی دادن اچ‌تی‌ام‌ال استفاده شود. زبان پی‌اچ‌پی از نسخهٔ ۴٫۳ به بعد قابلیت پشتیبانی از واسط خط فرمان را نیز به امکانات خود اضافه کرد. این قابلیت می‌تواند برای ایجاد نرم‌افزارهای غیر وبی مانند اسکریپت‌های خط فرمان یا نرم‌افزارهایی با واسط گرافیکی کاربر مورد استفاده قرار بگیرد. این مجوز به دلیل قرار دادن محدودیت روی استفاده از عنوان پی‌اچ‌پی، با مجوز همگانی گنو (GPL) سازگار نیست. همچنین قابلیت نصب آن به صورت یک شل جداگانه روی تقریباً تمامی سیستم‌های عامل و پلت‌فرم‌ها (یا سکوها) وجود دارد. همچنین در پلتفرم ویندوز، به نرم‌افزار WAMP به‌عنوان یک مجموعه که در آن پی‌اچ‌پی را جای داده است نام برد. پی‌اچ‌پی به‌طور معمول از مفسر رسمی خود استفاده می‌کند، با این حال پروژه‌های دیگری مانند PeachPie امکان تفسیر و کامپایل کد را دارند. از معروف‌ترین نرم‌افزار‌های توسعه داده شده با پی‌اچ‌پی نیز می‌توان به وردپرس اشاره کرد. تاریخچه توسعهٔ پی‌اچ‌پی از سال ۱۹۹۴ و زمانی آغاز شد که لندورک شروف تعدادی اسکریپت به زبان سی نوشت تا صفحهٔ خانگی خود را مدیریت کند. این اسکریپت‌ها که به صورت رابط دروازهٔ مشترک نوشته شده‌بودند، مسئول انجام عملیات‌های ساده‌ای مانند نشان دادن رزومهٔ راسموس و بررسی آمارهای بازدید از وبگاه او بودند. با گسترش اسکریپت‌ها و افزودن توانایی تعامل با فرم‌های وب و ارتباط با پایگاه‌های داده، نام صفحهٔ خانگی شخصی/مفسر فرم یا PHP/FI برای آن‌ها انتخاب شد. در ابتدا، لردورف برای یافتن خطاهای این اسکریپت‌ها و بهبود آن‌ها، در ۸ جون سال ۱۹۹۵ میلادی اسکریپت‌ها را با نام ابزارهای صفحهٔ خانگی شخصی نسخهٔ ۱٫۰ تحت مجوز عمومی گنو روی گروه خبری یوزنت منتشر کرد. متغیرها به سبک زبان پرل بودند، مدیریت فرم‌ها وجود داشت و می‌شد کدها را در درون زبان اچ‌تی‌ام‌ال قرار داد. قواعد پی‌اچ‌پی نیز از زبان پرل پیروی می‌کردند، اما ساده‌تر، محدودتر و ناپایدارتر بودند. با شکل‌گیری یک گروه برنامه‌نویسی و بعد از انجام تست‌های فراوان روی نسخهٔ بتا و بازنویسی موتور تجزیه‌کننده، سرانجام PHP/pk نسخهٔ ۲٫۰ در نوامبر سال ۱۹۹۷ میلادی منتشر گردید. اندی گاتسمن و زیو سوراسکی با بازنویسی موتور تجزیه‌کننده در سال ۱۹۹۷ میلادی پایه و اساس نسخهٔ ۳ پی‌اچ‌پی را بنیان نهادند. این دو نفر با همراهی لردورف با تغییر نام پی‌اچ‌پی به پی‌اچ‌پی: پیش‌پردازندهٔ ابرمتن که یک مخفف بازگشتی است، در ماه جون ۱۹۹۸ میلادی رسماً پی‌اچ‌پی نسخهٔ ۳٫۰ را منتشر کردند. بعد از این اتفاق گاتسمن و سوراسکی شروع به نوشتن هستهٔ جدیدی برای زبان پی‌اچ‌پی کردند که منجر به به وجود آمدن موتور زِند در سال ۱۹۹۹ میلادی شد. در تاریخ ۲۲ مه سال ۲۰۰۰ میلادی، پی‌اچ‌پی نسخهٔ ۴ که از موتور زند نسخهٔ ۱٫۰ استفاده می‌کرد، منتشر شد. هم‌اکنون پشتیبانی این نسخه به پایان رسیده‌است و هیچ به‌روزرسانی برای آن منتشر نمی‌شود. در ۱۳ ژوئیه سال ۲۰۰۴ میلادی، نسخهٔ ۵ پی‌اچ‌پی که از موتور زند نسخهٔ ۲ بهره می‌برد، منتشر شد. در سال ۲۰۰۸ با پایان یافتن پشتیبانی از تمامی نسخه‌های قدیمی‌تر پی‌اچ‌پی، نسخهٔ ۵ تنها نسخهٔ در حال گسترش محسوب می‌شد. با توجه به تغییرات عمدهٔ موجود در این نسخه از جمله پشتیبانی کامل از یونیکد، قرار بود این نسخه به عنوان نسخهٔ ۶ پی‌اچ‌پی منتشر گردد. این امر باعث شد تا در مارس سال ۲۰۱۰ میلادی، این نسخه به بخش در حال توسعه منتقل شد و دیگر به آن نسخهٔ ۶ گفته نمی‌شود. توابعی که قرار است در نسخهٔ ۶ حذف شوند، از نسخهٔ ۵٫۳ به صورت توصیه‌نشده درآمده‌اند و استفاده از آن‌ها باعث بروز هشدار در نرم‌افزار خواهد شد. تعداد بسیار زیادی از پروژه‌های بزرگ و متن‌باز که از زبان پی‌اچ‌پی استفاده می‌کنند، از سال ۲۰۰۸ با به وجود آمدن جنبش ابتکاری GoPHP5 به معنای برو به پی‌اچ‌پی ۵ دیگر از پی‌اچ‌پی نسخهٔ ۴ استفاده نمی‌کنند. این جنبش توسط بسیاری از توسعه‌دهندگان پی‌اچ‌پی پشتیبانی شد تا بتوانند به گسترش استفاده از نسخهٔ ۵ پی‌اچ‌پی کمک کنند. مفسرهای زبان پی‌اچ‌پی برای معماری‌های بسیاری از جمله ARM و Intel و همچنین سطوح ۳۲بیتی و ۶۴بیتی موجود است. در نسخه‌های جدید سیستم‌عامل ویندوز برای دستگاه‌های مدرن، استفاده از نسخه‌های ۶۴بیتی برای آن توصیه می‌شود. نسخه‌های باینری (کامپایل شده) از پی‌اچ‌پی بر روی وبگاه رسمی پی‌اچ‌پی منتشر می‌شوند و استفاده از نسخه‌های ۶۴بیتی برای سرورهای بزرگ توصیه می‌شود. | ## بخش 2: پی‌اچ‌پی | همچنین پی‌اچ‌پی امکان نصب و استفاده در کامپیوترهای عادی و حتی دستگاه‌های embedded مانند رزپری پای را دارد. برای استفاده از پی‌اچ‌پی در سیستم عامل اندروید، می‌توان از نرم‌افزار Termux استفاده نمود. این اولین نسخه‌ای است که در واقع می‌تواند به‌عنوان PHP شناخته شود، یک زبان مستقل با ویژگی‌های بسیاری که تا به امروز دوام آورده‌است. با این تغییر اطلاعاتی که از طریق شبکه ارسال می‌شدند، دیگر به‌طور مستقیم در محدودهٔ متغیرهای فوقِ سراسری قرار نمی‌گرفتند. مدل PDO به عنوان یک رابط پایدار برای برقراری ارتباط با بانک‌های اطلاعاتی معرفی شد. بر اساس این برنامه، هر ماه یک انتشار جزئی و هر سال یک انتشار اصلی اتفاق خواهد افتاد. تا ۲ سال تمامی به‌روزرسانی‌ها و سال سوم تنها به‌روزرسانی‌های امنیتی برای هر نسخه منتشر می‌شود. تمامی نوشته‌هایی که در خارج از جداکننده‌های پی‌اچ‌پی قرار بگیرند، توسط مفسر تفسیر نشده و به عنوان خروجی ارسال خواهند شد. ازآن‌جاکه این جداکننده‌های توسط تنظیمات پی‌اچ‌پی فعال‌سازی نمی‌شود، استفاده از این جداکننده‌ها توصیه نمی‌شود. هدف تمامی این جداکننده‌ها این است که کد پی‌اچ‌پی را از قسمت غیر-پی‌اج‌پی مانند اچ‌تی‌ام‌ال جدا کند. نام متغیرها در زبان پی‌اچ‌پی حتماً باید با نماد دلار آغاز شود و نیازی به مشخص کردن نوع آن‌ها نیست. خطوط جدید و فاصله‌ها نادیده گرفته شده (به جز فاصله‌هایی که در درون رشته‌ها قرار داشته باشند) و تمامی دستورهای این زبان با علامت سمی‌کولن (;) پایان می‌یابند. از علامت‌های /* */ برای کامنت‌های چندخطی و از علامت‌های // یا # برای کامنت‌های یک خطی استفاده می‌شود. اما برای تمام ساختارهای کنترلی قواعد نوع دومی نیز وجود دارد که می‌توان از آن‌ها مانند ساختار اصلی بهره برد. انواع داده زبان پی‌اچ‌پی داده‌های عددیِ صحیح را بر اساس نوع پلت‌فرم ذخیره می‌کند. در سیستم‌های ۳۲بیتی و ۶۴بیتی به ترتیب اعداد صحیح به‌صورت ۳۲ و ۶۴بیتی ذخیره می‌شوند. اعداد بدون علامت در عملکردی که مانند هیچ‌کدام از زبان‌ها برنامه‌نویسی دیگر نیست، در موقعیت‌هایی به اعداد علامت‌دار تبدیل می‌شود. اعداد صحیح می‌توانند با مبنای ده (به صورت مثبت یا منفی یا مثبت)، در مبنای ۱۶، در مبنای ۸ یا در مبنای ۲ مقدار دهی شود. پی‌اچ‌پی مانند زبان‌های جاوا و سی++ به‌صورت پیش‌فرض داده‌های بولی (صحیح و غلط) را در خود تعریف کرده‌است. بر اساس قوانین تبدیل متغیرها در این زبان، تمامی متغیرهای غیر صفر به صحیح و تمامی متغیرها با مقدار صفر به غلط تبدیل می‌شوند. این نوع متغیرها توسط خانوادهٔ خاصی از توابع که از معمولاً در یک افزونه قرار دارند، ایجاد شده و تنها توسط همین خانواده از توابع قابل استفاده است. آرایه‌ها می‌توانند اعضایی از تمامی انواع داده‌ای را در خود داشته‌باشند که پی‌اچ‌پی از آن‌ها پشتیبانی می‌کند. آرایه‌ها در واقع جداول درهم‌سازی هستند که می‌توانند برای هر عضو خود یک کلید داشته‌باشند. در صورتی که کلیدی برای عضو مشخص نگردد، مانند آرایه‌های معمولی، به‌صورت خودکار از اعداد به‌عنوان کلید استفاده می‌گردد. پی‌اچ‌پی تاکنون توابعی برای پشتیبانی از رشته‌های اجرایی (Thread) ارائه نکرده‌است، اما از سیستم‌های چندپردازنده پازیکس (POSIX) پشتیبانی می‌کند. تعریف توابع می‌تواند در درون بلاک‌های شرطی قرار بگیرند تا در شرایط خاص تعریف شود. متغیرهایی که با دستور new ساخته می‌شود، در صورتی که آرگومان نداشته‌باشد، از این قاعده مستثنی هست. پی‌اچ‌پی قابلیت تعریف توابع بدون نام را ندارد، اما می‌توان با قرار دادن نامِ یک تابع در متغیر تابع را به‌صورت غیرمستقیم فراخوانی کرد. این نوع تابع یک شیء دست اول است به این معنی که می‌توان آن را در یک متغیر نگاه داشت و می‌توان به‌عنوان ورودی آن را به توابع دیگر داد و استفاده‌های دیگری از آن کرد. اشیاء قابلیت برنامه‌نویسی شیءگرایی به‌صورت ابتدایی در نسخهٔ ۳ به زبان پی‌اچ‌پی افزوده و در نسخهٔ ۴ بهتر شد. این قابلیت که در نسخهٔ ۵ کاملاً بازنویسی شده‌بود، با افزایش قابلیت‌ها و بهبود عمل‌کرد در درون زبان قرار گرفت. بنابراین، باید در هر بار مقداردهی یا ارسال شیء به یک تابع، کل محتویات شیء در یک فضای حافظه جدید کپی شود، اما در نسخهٔ ۵ نحوهٔ مدیریت اشیا تغییر کرد. علاوه‌بر این موارد، پی‌اچ‌پی ۵ قابلیت استفاده از اینترفس‌ها (Interface) را نیز معرفی و از پیاده‌سازی چندین اینترفیس در یک کلاس پشتیبانی کرد. در این میان، اینترفیس‌های خاصی برای برقرار کردن رابطه با ساختارهای زبان به وجود آمدند؛ مثلاً، با کلاس‌هایی که اینترفیس ArrayAccess را پیاده‌سازی کنند، می‌توان مانند آرایه‌ها برخورد کرد. اگر شخص برنامه‌نویس با استفاده از کلمهٔ کلیدی clone سعی کند که یک شیء را کپی کند، موتور زند ابتدا بررسی می‌کند که متد __clone در درون کلاس تعریف شده‌است یا خیر. | ## بخش 3: پی‌اچ‌پی | در صورتی که تعریف نشده‌باشد، متد پیش‌فرض __clone فراخوانی می‌شود که تمامی خصوصیات کلاس را کپی می‌کند. اما اگر این متد در کلاس وجود داشته‌باشد، مسئولیت کپی کردن و مقداردهی در کلاس کپی‌شده بر عهدهٔ این متد خواهد بود. در پی‌اچ‌پی، اشیائی از یک نوع می‌توانند به متدها و خاصیت‌های خصوصی (private) یکدیگر دسترسی داشته‌باشند. تعدادی مترجم نیز برای این زبان ایجاد شده‌است که این زبان را از مفسرها دور می‌کند. از مترجم‌های مطرح زبان پی‌اچ‌پی می‌توان به فالانگر اشاره کرد که کد پی‌اچ‌پی را به بایت‌کد زبان میانی مشترک (CIL) تبدیل می‌کند، و هیپ‌هاپ که به صورت منبع‌باز توسط فیس‌بوک توسعه داده می‌شود. مترجم هیپ‌هاپ با تبدیل کد پی‌اچ‌پی به کد زبان سی++ می‌تواند سربار سرور را تا ۶ برابر کاهش دهد. از روش‌های دیگری که برای بهبود زمان اجرا اسفاده می‌شود، می‌توان از بهینه‌سازی کد نام برد. این عمل با کاهش حجم کد، حذف و ادغام قسمت‌های تکراری و تغییرات متفاوت دیگر صورت می‌گیرد. پروانه انتشار پی‌اچ‌پی یک نرم‌افزار آزاد است که با پروانه پی‌اچ‌پی منتشر می‌شود. این پروانه علاوه بر قوانین موجود در نرم‌افزارهای آزاد اعلام می‌دارد که: تمامی محصولاتی که بر پایهٔ پی‌اچ‌پی گسترش می‌یابند، نباید بدون اجازهٔ قبلی از group@php.net از نام "PHP" برای نام‌گذاری استفاده کنند. وجود این محدودیت در پروانهٔ این زبان آن را با پروانه عمومی همگانی گنو (GPL) ناسازگار می‌کند. توسعه و جامعیت پی اچ پی شامل کتابخانه‌های منبع باز و آزاد مختلفی در منبع توزیع خود می‌شود، یا از آن‌ها در برنامه‌های دودویی پی اچ پی استفاده می‌کند. بسیاری از توابعی که برنامه نویسان زبان C با آن‌ها آشنایی دارند، مانند آن‌هایی که در خانواده stdio قرار دارند، در برنامه‌های استاندارد پی اچ پی قابل دسترسی هستند. پی اچ پی به توسعه دهندگان این اجازه را می‌دهد تا با نوشتن افزونه‌هایی به زبان C، به زبان پی اچ پی کارایی لازم را ببخشند. افزونه‌های پی اچ پی می‌توانند به صورت ایستا در داخل پی اچ پی کامپایل شوند یا به صورت پویا در زمان اجرا بارگزاری شوند. افزونه‌های بی شماری نوشته شده‌اند تا از ویندوز اِی پی آی، فرایند مدیریت در سیستم عامل‌های شبه یونیکس، رشته‌های چند بایتی (یونیکد)، cURL و چند قالب فشرده سازی محبوب پشتیبانی کنند. دیگر ویژگی‌های پی اچ پی که توسط افزونه‌ها در دسترس قرار گرفتند، شامل مجتمع سازی با IRC، تولید پویای تصاویر و محتوای ادوبی فلش، اشیاء داده پی اچ پی (PDO) که به عنوان یک لایه ظاهری برای دسترسی به پایگاه داده به کار می‌رود، و حتی ترکیب صدا می‌شود. بخشی از توابع هسته زبان، مانند آن‌هایی که با رشته‌ها و آرایه‌ها سروکار دارند، نیز به عنوان افزونه پیاده‌سازی شده‌اند. پروژه کتابخانه جامع افزونه‌های پی اچ پی (PECL) مخزنی برای افزونه‌های به زبان پی اچ پی است. چند پروژه دیگر مانند زفیر (Zephir)، برای افزونه‌های پی اچ پی این توانایی را فراهم می‌کنند تا به یک زبان سطح بالا نوشته شده و به افزونه‌های داخلی پی اچ پی کامپایل شوند. چنین رویکردی، به جای نوشتن افزونه‌های پی اچ پی به زبان C به صورت مستقیم، توسعه افزونه‌ها را تسهیل کرده و زمان لازم برای برنامه‌نویسی و تست را کاهش می‌دهد. در دسامبر سال ۲۰۱۸ میلادی، گروه پی اچ پی شامل ۱۰ نفر بود: سیِز سی آرِنتزِن، استیگ باکِن، شِین کاراوِئو، اندی گاتمَنز، راسموس لردورف، سم رابی، ساشا شومان، زیو سوراسکی، جیم وینستِد و آندرِی زِمینِوسکی. فناوری زِند بر اساس آزمون پی اچ پی ۵٫۵ یک گواهی نامه پی اچ پی برای برنامه نویسان صادر می‌کند تا به عنوان توسعه دهندگان مجاز شناخته شوند. نصب و تنظیمات به‌طور کلی، دو روش اصلی برای نصب زبان پی‌اچ‌پی بر روی سرورهای وب است. برای مثال، سرورهای آپاچی، مایکروسافت آی‌آی‌اس و آی‌پلنت (iPlanet) از این روش استفاده می‌کنند. در این حالت باید سرور را تنظیم کرد تا تمامی درخواست‌های مربوط به زبان پی‌اچ‌پی را با فایل‌های CGI اجرا کند. برای نوشتن برنامه‌های دارای رابط گرافیکی نیز می‌توان از افزونهٔ PHP-GTK در زبان پی‌اچ‌پی استفاده کرد. هنگامی که از زبان پی‌اچ‌پی در محیط‌های ابری استفاده می‌شود، کیت‌های توسعه نرم‌افزار (SDK) خاصی برای استفاده از امکانات محیط نیز همراه با آن منتشر می‌گردد. این مسائل اکثراً به دلیل نبود استفاده از روش‌های مناسب توسط برنامه‌نویسان ایجاد می‌شود. و این در حالی‌است که مشکلات تکنیکی که در خود زبان پی‌اچ‌پی وجود دارند، بسیار کم هستند. (۲۳ مشکل در سال ۲۰۰۸، کمتر از ۱٪ مشکلات) با توجه به این‌که برنامه‌نویس‌ها اشتباهات بسیاری می‌کنند، بارها پیشنهاد شده‌است که قابلیت‌هایی برای تشخیص خطاهای امنیتی در زبان پی‌اچ‌پی گنجانده شود تا این خطاها را به برنامه‌نویس گزارش بدهد. با اینکه چنین ابزاری برای زبان پی‌اچ‌پی در حال توسعه است، اما این پیشنهادها تاکنون رد شده و این ابزارها به زبان افزوده نشده‌اند. تست PHP تست برنامه‌های کاربردی و نرم‌افزارهای توسعه داده شده با PHP از جهت‌های مختلف حایز اهمیت هستند. همچنین ابزارهای بازبینی و مرور کد نیز کمک فراوانی به توسعه دهندگان می‌کند که بتوانیم بسیاری از اشکالات را در سطح کد و قبل از تست برطرف نماییم. | ## جمع‌بندی | اشکال زدایی php گاهی ممکن است به دلایل مختلف در یک برنامه php مشکلاتی ایجاد شود، در حالت عادی یافتن خطا در بین هزاران خط کد ممکن است بسیار سخت باشد در php می‌توان با فعال کردن حالت اشکال زدایی با استفاده از توابع مربوط به آن، خطا در برنامه را به راحتی پیدا کرد.