ویرگول
ورودثبت نام
امیرحسین امانی
امیرحسین امانیسلام به همه رفقا من قصد دارم تجربیات چند سال گذشتم رو در خدمت شما بزارم #با_هم_پیشرفت_کنیم
امیرحسین امانی
امیرحسین امانی
خواندن ۱۰ دقیقه·۵ ماه پیش

تغییرات و بروزرسانی‌های PHP 8.2 (بسیار حیاتی)

اصلی‌ترین هدف انتشار جدیدترین نسخه php 8.2 آسان‌تر نمودن کار توسعه‌دهندگان وب می‌باشد. PHP 8.2 بر اساس ورژن‌های PHP 8.0 و PHP 8.1 ساخته شده است. در واقع بسیاری از تغییرات ایجاد شده در php 8.2، نه تنها فرآیند برنامه نویسی را ساده‌تر بلکه برخی از توابع قدیمی را نیز منسوخ نموده است. معمولا توصیه می‌کنیم برای به حداکثر رساندن و افزایش امنیت سایت و سازگاری و عادت به نحو جدید، به ورژن پی‌اچ‌پی ۸.۲ ارتقا دهید. 

چرا باید نسخه‌ی پی‌اچ‌پی خود را به نسخه جدید php 8.2 بروزرسانی کرد؟

نسخه‌ی php فعلی و مورد استفاده بر روی وبسایت از اهمیت بسیاری برخوردار است. در واقع، قدیمی یا بروز بودن نسخه‌ی پی‌اچ‌پی بصورت مستقیم بر روی عملکرد وبسایت موثر است که معمولا اغلب دولوپرها از عملکردهای بد و نقاط ضعف ورژن‌های بسیاری قدیمی و منسوخ شده اطلاع دارند و به دنبال رفع آن هستند. در ادامه به بررسی دلایل اصلی بروزرسانی از php 8 به php 8.2 می‌پردازیم.

 

1- افزایش سرعت سایت

از آنجایی که زبان برنامه‌نویسی php زبان سمت سرور است، تاثیر بسزا و مستقیمی بر روی سرعت و عملکرد سایت دارد.  نسخه‌های قدیمی پی‌اچ‌پی مانند php 7 تا php 7.4 و همچنین نسخه‌های قدیمی‌تر پی‌اچ‌پی باعث کاهش سرعت سایت می‌شوند. جالب است بدانید، طبق بررسی‌های انجام‌شده، نصب نسخه‌های قدیمی پی‌اچ‌پی بر روی سایت وردپرسی، سرعت سایت را بین ۱۰ تا ۴۰۰ درصد (بسته به میزان قدیمی و منسوخ بودن آن) کاهش می‌دهد.

2- بهینه‌سازی سئو سایت

هر چه در بروز کردن و بهینه‌سازی سرور و زبان برنامه‌نویسی سمت سرور منظم باشیم، سایت خود را از دریافت رتبه‌ی پایین در گوگل و سایر موتورهای جستجوگر نجات داده‌اید.  عدم نصب جدیدترین نسخه php بر روی سایت، اختلالاتی را در سایت به وجود آورده که در نتیجه سئو‌ی سایت ما را نیز به خطر می‌اندازد. پس با انتشار php 8.2  بهتر است هر چه سریع‌تر نسبت به بروزرسانی نسخه‌ی پی‌اچ‌پی سایت خود اقدام نمایید.

 

3- برطرف کردن باگ‌های نسخه‌ی قبلی پی‌اچ‌پی

به این نکته توجه داشته باشید، با انتشار هر نسخه‌ی جدید PHP، یک سری بروزرسانی‌ها و تغییرات جزئی یا اساسی بر روی آن نسخه انجام می‌شود تا در این صورت، مشکلات و باگ‌های نسخه‌ی قبلی برطرف شود. در واقع، توسعه‌دهندگان زبان برنامه نویسی پی‌اچ‌پی، با بررسی نسخه‌ی اخیرا منتشر شده، عملکرد آن را بر روی وبسایت‌ها مورد بررسی و ارزیابی قرار داده و سعی بر برطرف کردن نقاط ضعف آن می‌کنند.

4- افزایش امنیت سایت

حفظ و افزایش امنیت سایت بستگی زیادی به نسخه‌ی پی‌اچ‌پی مورد استفاده دارد. هر چه جدیدترین نسخه‌ی PHP را بر روی سایت خود نصب کنید، شاهد افزایش امنیت سایت خود خواهید بود. طبق روندی که طی سال‌های اخیر، در انتشار نسخه‌‌های پی‌اچ‌پی شاهد بودیم، پس از انتشار هر نسخه، پشتیبانی امنیتی بابت حفظ امنیت نسخه‌ی منتشر شده از طرف توسعه دهندگان زبان پی‌اچ‌پی ارائه می‌شود. همچنین یک سری فایل‌های پچ (Patch) امنیتی در طی دوره‌ی آن نسخه از PHP به صورت مجزا منتشر می‌شود که لازم است نسبت به نصب آن‌ها اقدام کرد. 

5- جلوگیری از هک شدن سایت

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

توجه داشته باشید که امنیت یک پروسه مداوم و همیشگی است. پس اگر قصد حفظ امنیت و جلوگیری از نفوذ هکرها به سایتتان را دارید؛ بهتر است که php 8 را به php 8.2 ارتقا دهید.

 

6- پشتیبانی از اسکریپت‌ها و پلاگین‌های بروز

اکثر وبسایت‌ها برای عملکرد بهتر و چندمنظوره نیاز به اجرای اسکریپت یا نصب پلاگین‌های متعددی دارند. در صورتی که از سایت وردپرسی برای کسب و کار آنلاین خود استفاده می‌کنید، حتما تاکنون پلاگین‌هایی رو بر روی وردپرس خود نصب کرده‌اید. برای اجرای بهتر اسکریپت‌های مورد نظر و پلاگین‌های نصب شده بخصوص پلاگین‌های بروز بر روی سیستم مدیریت محتوا (CMS) خود، لازم است از نسخه‌ی اخیر PHP 8.2 استفاده کرده تا این پلاگین‌ها و اسکریپت‌ها بهترین عملکرد را بر روی سایت داشته باشند.

کلاس‌های فقط قابل خواندن – Readonly classes

کلاس Read-only که در نسخه ۸.۱ معرفی شد، در نسخه ۸.۲ بروز و استفاده آن ساده‌تر شد.

 

شکل استفاده از کلاس readonly در نسخه پی‌اچ‌پی قبل از ۸.۲

class BlogData { public readonly string $title; public readonly Status $status; public function __construct(string $title, Status $status) { $this->title = $title; $this->status = $status; } }

 

نحوه استفاده از کلاس readonly در نسخه پی‌اچ‌پی ۸.۲

readonly class BlogData { public string $title; public Status $status; public function __construct(string $title, Status $status) { $this->title = $title; $this->status = $status; } }

 

همانطور که در بالا مشخص است کل کلاس را می‌توانید به سادگی readonly کنید اما در نظر داشته باشید که موارد زیر قابل readonly شدن نیستند:

  • Enums – چون این فیچر PHP اصلا قابلیت دریافت پراپرتی را ندارد.

  • Traits

  • Interfaces

 

افزودن امکان استفاده از Allow true, null, and false به عنوان Standalone Types

در PHP 8 امکان استفاده از Union Types ارائه شد. در نسخه ۸.۲ می‌توانید آن را به صورت‌های مختلف یعنی Null یا False استفاده کنید. با افزودن این قابلیت، زبان پی‌اچ‌پی به زبانی با قابلیت تفسیری جامع‌تر تبدیل شده و می‌توانید به صورت دقیق از تایپ‌های return و parameter و property استفاده کنید. در ادامه نحوه استفاده به عنوان نمونه آورده شده است:

 

قبل از تایپ‌ها در نسخه قبل از PHP 8.2

class Falsy { public function almostFalse(): bool { /* … / } public function almostTrue(): bool { /* … / } public function almostNull(): string|null { /* … / } }

 

نحوه استفاده از تایپ‌های Null و False و True به صورت مجزا و تنهایی در PHP 8.2

class Falsy { public function alwaysFalse(): false { /* … / } public function alwaysTrue(): true { /* … / } public function alwaysNull(): null { /* … / } }

 

 

اضافه شدن قابلیت SensitiveParameter Value

در نسخه PHP 8.2 اتریبیوت جدیدی به نام SensitiveParameter معرفی شد. این قابلیت بسیار ارزشمند و مهم آنجایی به کار می‌آید که سایت یا اپلیکیشن با مشکل مواجه شده است و ناخواسته لاگ فعال است یا لاگ را فعال می‌کنید و اطلاعات حساس و محرمانه نمایش و یا در ارور لاگ ذخیره می‌شوند. با این قابلیت دیگر اطلاعات حساس کدهای PHP نمایش داده نمی‌شوند. نحوه استفاده از آن به این صورت است:

function passwords( $publicpassword, #[\SensitiveParameter] $secretpassword ) { throw new \Exception(‘Error’); } passwords(‘publicpassword’, ‘secretpassword’);

 

معرفی تابع mysqli_execute_query و روش کوئری mysqli::execute_query برای دیتابیس بسیار معروف MySQL

در ورژن PHP 8.2 روش بسیار ساده‌ای برای مدیریت کوئری‌های دارای پارامتر mysqli معرفی شد. با استفاده از تابع mysqli_execute_query($sql, $params) و روش mysqli::execute_query به راحتی می‌‌توانید کوئری‌ها را توسط همین یک تابع به صورت prepare, bound, and execute اجرا کنید. زمانی که کوئری را با موفقیت اجرا کردید، آبجکت mysqli_result را دریافت کنید. برای مثال:

execute_query(‘SELECT * FROM user WHERE name LIKE ? AND type_id IN (?, ?)’, [$name, $type1, $type2]) as $row) { print_r($row); }

 

امکان استفاده از ثابت‌ها در صفات مختلف – Constants in Traits

تا قبل از نسخه ۸.۲ پی‌اچ‌پی امکان استفاده مجدد از کدها با تعریف methods و properties وجود داشت. حال امکان استفاده از constants in traits نیز فراهم شده است. مثال:

trait Foo { public const FLAG_1 = 1; protected const FLAG_2 = 2; private const FLAG_3 = 2; public function doFoo(int $flags): void { if ($flags & self::FLAG_1) { echo ‘Got flag 1’; } if ($flags & self::FLAG_2) { echo ‘Got flag 2’; } if ($flags & self::FLAG_3) { echo ‘Got flag 3’; } } }

 

معرفی تایپ‌های دی‌ان‌اف جدید – New Disjunctive Normal Form (DNF) Types

در نسخه PHP 8.2 انواع DNF جدید معرفی شده است. DNSهای جدید روش‌های استاندارد و بهینه جدیدی برای استفاده از boolean expressions معرفی می‌کنند. خیلی دقیق و ساده بخواهیم بگوییم تفکیک حروف‌های ربط معرفی شده است – OR و AND های تفکیک شده! یک مثال استاندارد برای استفاده:

// Accepts an object that implements both A and B, // OR an object that implements D. (A&B)|D // Accepts an object that implements C, // OR a child of X that also implements D, // OR null. C|(X&D)|null // Accepts an object that implements all three of A, B, and D, // OR an int, // OR null. (A&B&D)|int|null

 

یک مثال استفاده در PHP نسخه‌ی قدیمی‌تر از ۸.۲

trait Foo { public const FLAG_1 = 1; protected const FLAG_2 = 2; private const FLAG_3 = 2; public function doFoo(int $flags): void { if ($flags & self::FLAG_1) { echo ‘Got flag 1’; } if ($flags & self::FLAG_2) { echo ‘Got flag 2’; } if ($flags & self::FLAG_3) { echo ‘Got flag 3’; } } }

 

یک مثال استفاده در ورژن PHP 8.2

class Foo { public function bar((A&B)|null $entity) { return $entity; } }

 

در نسخه پی‌اچ‌پی ۸.۲ استفاده از dynamic variables در کلاس‌ها منقضی شده است. به جای آن یک AllowDynamicProperties معرفی شده است. مثال:

class Foo {} $foo = new Foo; // Deprecated: Creation of dynamic property Foo::$bar is deprecated $foo->bar = 1; // No deprecation warning: Dynamic property already exists. $foo->bar = 2;

 

نحوه بروزرسانی به PHP 8.2

جهت نصب نسخه PHP 8.2 در سیستم عامل اوبونتو ۱۸ و ۲۰ و ۲۲ از کامندهای زیر استفاده کنید:

sudo dpkg -l | grep php | tee packages.txt
sudo add-apt-repository ppa:ondrej/php # Press enter when prompted.
sudo apt update
sudo apt install php8.2,php8.2-cli,php-8.2{bz2,curl,mbstring,intl}
sudo apt install php8.2-fpm

یا

# sudo apt install libapache2-mod-php8.2
sudo a2enconf php8.2-fpm
# When upgrading from older PHP version:
sudo a2disconf php8.1-fpm
## Remove old packages
sudo apt purge php8.1*

 

با استفاده از دستور زیر می‌توانید لیست اکستنشن‌های ارائه شده برای PHP 8.2 را دریافت و در فایلی به نام packages.txt ذخیره و مشاهده کنید:

dpkg -l | grep php | tee packages.txt

 

در مرحله بعد ریپازیتوری ppa:ondrej/php را به اوبونتو خود اضافه کنید تا اکستنشن‌های اصلی و همیشه بروز PHP را بتوانید دریافت کنید:

sudo add-apt-repository ppa:ondrej/php sudo apt update

 

در نهایت با دستور زیر می‌توانید نسخه PHP 8.2 و PHP Extension های اصلی را نصب کنید:

sudo apt install php8.2 php8.2-cli php8.2{curl,bz2,zip,fpm,mysql,common,xml,bcmath,gd,mbstring,intl}

 

نسخه‌های مختلف در مسیر مشابه /usr/bin/php8.2 مانند /usr/bin/php8.0 ذخیره شده‌اند. با وارد نمودن دستور فوق می‌توانید نسخه PHP را به شرح زیر انتخاب کنید:

There are 2 choices for the alternative php (providing /usr/bin/php).
Selection    Path             Priority   Status
————————————————————
* 0            /usr/bin/php8.2   ۸۲        auto mode
1            /usr/bin/php8.1   ۸۱        manual mode
2            /usr/bin/php8.2   ۸۲        manual mode

 

و یا همچنین می‌توانید با وارد نمودن دستور مسیر نسخه PHP را تعریف کنید:

  • update-alternatives –set php /usr/bin/php8.1

 

موارد منسوخ‌شده در پی‌اچ‌پی ۸.۲

در ادامه به بررسی مواردی می‌پردازیم که در نسخه جدید php یعنی PHP 8.2 منسوخ شده و در پروژه‌ها قابل استفاده نیستند.

انقضای توابع utf8_encode و utf8_decode()

دو تابع utf8_encode() و utf8_decode() به منظور تبدیل و جابجایی بین استانداردهای کدنویسی ISO-8859 و UTF-8 استفاده می‌شوند. به دلیل عدم ارسال پیام‌های اخطار به موقع و محدودیت پشتیبانی این توابع از encoding یا رمزگذاری، در نسخه‌ی پی‌اچ‌پی ۸.۲ این توابع منسوخ شده است اما مجددا در نسخه‌ی PHP 9.0 آن‌ها را خواهیم داشت. با منسوخ شدن این توابع در نسخه‌ی فعلی، افراد به عنوان توابع جایگزین می‌توانند از اکستنشن‌های iconv یا intl برای جابجایی بین استانداردهای رمزگذاری استفاده کنند.

 

Mbstring: Base64, Uuencode, QPrint, and HTML Entity Encodings

اکستنشن MBstring به منظور جابجایی بین کاراکترهای مختلف استانداردهای رمزگذاری از جمله UTF-8/16/32 و ISO-8859-1 کاربرد دارد. این اکستنشن از Base64، Quoted-Printable، Uuencode و المان‌های HTML پشتیبانی می‌کند.
در نظر داشته باشید که این فرمت‌ها، اطلاعات فرآیند بایت‌های خام را بجای بایت‌های متعدد فرمت می‌کند. از این رو، به دلیل اهمیت پایین آن‌ها در رمزگذاری و رمزگشایی این فرمت‌ها، منسوخ شده است. از این رو، در نسخه‌ی جدید پی‌اچ‌پی ۸.۲ این اکستنشن‌های mbstring با لیبل‌های زیر منسوخ شده‌اند:

BASE64 UUENCODE HTML-ENTITIES html (alias of HTML-ENTITIES) Quoted-Printable qprint (alias of Quoted-Printable)

 

Partially-Supported Callables

در پی‌اچ‌پی ۸.۲ فراخوان‌های نیمه پشتیبانی‌شده که با الگوی $callable() سازگاری ندارند، منسوخ شده اند. لیست فراخوان‌های منسوخ‌شده را در ادامه مشاهده کنید:

$callable = “self::method”; $callable = “parent::method”; $callable = “static::method”; $callable = [“self”, “method”]; $callable = [“parent”, “method”]; $callable = [“static”, “method”]; $callable = [“MyClass”, “MyParentClass::myMethod”]; $callable = [new MyClass(), “MyOtherClass::myMethod”];

 

به منظور عدم دریافت پیام منسوخ‌شده، کاربران می‌توانند تمام کیوردها را به صورت خانواده، تکی و استاتیک به نام کلاس‌های متناظر خود تغییر دهند.

 

${var} String Interpolation

پی‌اچ‌پی به کاربران اجازه می‌دهد تا مقادیر متغیر در یک زنجیره‌ی واقعی را با گیومه جایگزین کند. همانند مثال‌های زیر:

“$myname” – directly embedding variables. “{$myname}” – braces outside the variable. “${myname}” – braces after the dollar sign. ” ${expr}” – variable variables equivalent to using (string) ${expr}

 

با توجه به بروزرسانی‌های انجام شده در جدیدترین نسخه‌ی php 8.4 دلایل بسیار و پر اهمیتی برای بروزرسانی به این نسخه‌ی جدید از پی‌اچ‌‌پی وجود دارد. از افزایش امنیت و سرعت سایت گرفته تا اکستنشن‌ها و توابع منسوخ شده در PHP 8.2 از مواردی‌ست که تغییر نسخه‌ی قدیمی به PHP 8.2 را به یکی از مهم‌ترین اقدامات تبدیل می‌کند.

امنیت سایتphpزبان phpپی اچ پی
۲
۱
امیرحسین امانی
امیرحسین امانی
سلام به همه رفقا من قصد دارم تجربیات چند سال گذشتم رو در خدمت شما بزارم #با_هم_پیشرفت_کنیم
شاید از این پست‌ها خوشتان بیاید