دی بلاگ

برچسب php

۱۰ تیر ۱۳۹۷

افزودن امکان انتخاب ورژن PHP به دایرکت ادمین

سلام دوستان

در این مطلب قصد داریم به شما آموزش بدیم که چطوری نسخه Apache و PHP را در Directadmin ارتقاء دهید و همچنین به شما آموزش خواهیم داد که چطوری امکان انتخاب ‌ورژن PHP را به دایرکت اضافه کنید.
(با توجه به تفاوت در ورژن های مختلف و احتمال به وجود آمدن مشکل لطفا موارد گفته شده در این مقاله را مستقیما بر روی سرور اصلی خود اجرا ننمایید و قبل از آن بر روی یک سرور تست اجرا کنید)
ابتدا ذکر این نکته ضروری هست که PHP 5.6 توسط CustomBuild 1.1 پشتیبانی نمی شود. پس اگر قصد ارتقاء دارید باید از CustomBuild 1.1 به بالا استفاده کنید.

برای ارتقاء در دایرکت ادمین باید از CustomBuild استفاده کنیم که در آدرس زیر قرار دارد:

/usr/local/directadmin/custombuild

پس بعد از اینکه با ssh به خط فرمان لینوکس خودتون وصل شدید ابتدا به آدرس بالا برید
cd /usr/local/directadmin/custombuild
خب حالا اولین کاری که میکنید با دستور زیر ورژن custombuild را پیدا کنید:

./build version

اگر ورژن آن پایین هست باید آن را ارتقاء دهید..

 

حالا اگر قصد دارید فقط نسخه php را ارتقاء دهید باید از دستورات زیر استفاده کنید:

./build update
./build set php5_ver 5.6
./build php n

اگر بعد از بالا بردن نسخه سرویس httpd استارت نشد و خطا داد احتمالا نیاز به ارتقاء نسخه آپاچی هم پیدا میکنید که با دستورات زیر میتونید ورژن آپاچی و php را ارتقاء دهید:

cd /usr/local/directadmin/custombuild
./build update
./build apache
./build php n
./build mod_ruid2
./build rewrite_confs

حالا اگر دوست دارید امکان انتخاب نسخه php را در تنظیمات دیرکت ادمین برای یوزرهاتون داشته باشید باید به کمک دستورات زیر هم ورژن ۷.۱ و هم ورژن ۵.۶ را کنار هم نصب کنید.
برای این کار از دستورات زیر استفاده کنید

cd /usr/local/directadmin/custombuild
./build set php1_mode php-fpm
./build set php2_mode php-fpm
./build set php1_release 7.1
./build set php2_release 5.6

با اجرای دستورات بالا فایل options.conf تغییراتی خواهد کرد و موارد زیر به این فایل اضافه خواهند شد.

php1_release=7.1
php1_mode=php-fpm
php2_release=5.6
php2_mode=php-fpm

خب حالا وقت کامپایل مجدد PHP هست و بعد از اون تنظیم مجدد.. برای این کارها دستورات زیر را اجرا کنید

./build php n
./build rewrite_confs

خب کار اینجا تمام هست و باید الان در دایرکت ادمین امکان انتخاب ورژن را برای یوزر داشته باشیدphp-version-selector-directadmin php-version-selector-directadmin2

 

نکته:
این نکته مربوط به نصب ماژول های PHP هست که به موارد بالا بسیار ربط داره برای همین بهتر بود قبل از مطالب بالا میاوردمش اما اینجا میارمش دیگه..
اگر میخواهید مازول های PHP را هم نصب کنید باید –with-module را به تنظیمات اضافه کنید.. کجا و چطوریش را الان توضیح میدم.

 

با دستور زیر میتونید آدرس فایل کانفیگ را بدست بیارید

cd /usr/local/directadmin/custombuild
./build used_configs | grep configure.php

اگر دو ورژن PHP داشته باشید احتمالا دوتا آدرس میبینید

PHP (default) configuration file: /usr/local/directadmin/custombuild/configure/ap2/configure.php56

حالا بهتره اول یک بکاپ از فایل تنظیمات بگیرید و بعد اون را ویرایش کنید و –with-module را به آخرش اضافه کنید

--with-module

دقت کنید که چون باید ادامه دستور قبل قرار بگیره به خط قبلش هم باید یک \ اضافه کنید.. نکته اصلی اینه که تمامی خطوط به جز خط آخر باید با \ تمام بشن..

بعد از اینکه فایل های تنظیمات را برای نسخه مورد نظرتون تغییر دادید حالا دوباره دستور زیر را اجرا کنید تا یکبار دیگه php با ماژولهاش نصب بشه

 

./build php n

 

اگر با خطای زیر روبرو شدید بدونید که توی \ گذاشتن انتهای خط ها اشتباه کردید

/usr/local/directadmin/custombuild/custom/ap2/configure.php56: line 32: --with-module: command not found

به همین خوشمزگی.

 

پی نوشت.. دقت کنید که اگر بعد از آپدیت php به نسخه ۵.۶ هنگام اجرای آپاچی با خطای زیر روبرو شدید باید آپاچی را هم ارتقاء بدید و بعدش فایل های کانفیگ را بازنویسی کنید

 

Invalid command 'Mutex', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.  

گاهی هم بعد از ارتقاء آپاچی از ورژن ۲.۲ به ۲.۴ ممکنه به

unixd_config

گیر بده که با ارتقاء همزمان آپاچی و ‌php و بازنویسی کانفیگ ها مشکل حل میشه..

۷ خرداد ۱۳۹۷

تبدیل آرایه و stdClass به یک کلاس دیگر در php

سلام دوستان

یکی از مشکلاتی که برنامه نویسان php در هنگام گرفتن داده های json با آن مواجه می شوند تبدیل خروجی دیکد شده به کلاس مورد نظرشان هست.

وقتی شما از تابع json_decode استفاده می کنید نتیجه خروجی آن اگر از نوع Object باشد یک شیء از کلاس stdClass هست در غیر اینصورت یک آرایه انجمنی خواهید داشت
حالا فرض کنید که این داده ها مربوط به یک کلاس سفارشی میباشد که توسط شما نوشته شده است، چگونه باید نتیجه دیکد شده را به آن کلاس تبدیل کرد؟

لازم به ذکر هست که در صورتی که از توابع serialize و unserialize در php استفاده کنید نوع کلاس ها حفظ شده و با چنین مشکلی روبرو نخواهید شد

در زیر دو متد بسیار کاربری معرفی خواهیم کرد که به کمک آنها به سادگی می توانید این تبدیل ها را انجام دهید

function arrayToObject(array $array, $className) {
 return unserialize(sprintf(
 'O:%d:"%s"%s',
 strlen($className),
 $className,
 strstr(serialize($array), ':')
 ));
}
function objectToObject($instance, $className) {
 return unserialize(sprintf(
 'O:%d:"%s"%s',
 strlen($className),
 $className,
 strstr(strstr(serialize($instance), '"'), ':')
 ));
}

کپی رایت © 2018 دی بلاگ

طراحی توسط Anders Norenبالا ↑