نحوه تغییر منطقه زمانی
نحوه تغییر منطقه زمانی (Time Zone) در انواع سیستم عاملها
نحوه تغییر منطقه زمانی (Time Zone) در انواع سیستم عاملها
امسال ساعت رسمی کشور تغییری نداشت اما سرور های جهانی مطابق هر سال برای تغییر ساعت تنظیم شده بودند، مشکلات متعددی در خصوص این مسئله برای سرور های لینوکسی و ویندوزی که time zone آن ها به صورت خودکار برروی Asia/Tehran تنظیم بوده است، به وجود آورده است.
مشکلاتی که میتوانست زمان ثبت شده سفارشات سایت ها، زمانی که برای هر لاگ در سرور های ثبت می شده است، ساعت کلیه رخداد های ثبت شده در سرور و … را یک ساعت جلوتر نمایش دهد.
جهت اصلاح زمان سرور ها و غیرفعال سازی حالت تابستانه (Daylight Saving Time) برروی آن ها مطابق با سیستم عامل سرور و نرم افزار های آن راهکار هایی که به شرح زیر است فراهم شده است تا چالش های ساعت سرور هم رفع شده و از اختلال های احتمالی جلوگیری کند:
سیستم عاملهای Windows 10 , Windows Server 2011,2016,2019,2022
برروی سیستم عامل های ویندوزی تنها کافیست (Daylight Saving Time) را غیرفعال کنیم که جهت این امر می بایست cmd (command line) ویندوز را با استفاده از دکمه های ترکیبی window + r و تایپ cmd باز کرده و سپس دستور زیر را در آن وارد کنیم:
tzutil /s "Iran Standard Time_dstoff"
در صورتیکه از سیستم عامل های لینوکسی استفاده می کنید بسته به distribution نصب شده برروی سرور می توانید اصلاحات زمانی را انجام دهید.
اگر در سرور خود از php استفاده می کنید نیاز است ماژول timezonedb را با استفاده از pecl برای نسخه های php نصب شده برروی سرور خود نصب و فعال کنید و سپس در php.ini های نسخه ها timezone را برروی Asia/Tehran قرار دهید تا ساعت php نیز اصلاح شود.
دستورات لازم برای نصب Timezonedb برروی دایرکت ادمین:
/usr/local/phpXY/bin/pecl install timezonedb
نکته : در دستور بالا بجای XY نسخه php مدنظر را باید قرار داد.
به طور مثال در صورتی که مایل به نصب برای php نسخه 7.4 هستید دستور زیر را وارد کنید
/usr/local/php74/bin/pecl install timezonedb
جهت تست پس از انجام موارد می توانید از قطعه کد زیر در php استفاده کنید.
قطعه کد فوق را می بایست در یک فایل php ذخیره کرده و سپس با استفاده از php آن ها را اجرا کرد.
به طور مثال:
php /home/time.php
همچنین میتوان کد را درون یک فایل در مسیر public_html هاست قرار داد و سپس از طریق مرورگر آدرس domain.com/time.php را فراخوانی نمود تا کد اجرا شود.
با اجرای کد فوق زمان php نمایش داده خواهد شد.
باتوجه به اینکه برروی سیستم عامل های لینوکسی مختلف و کنترل پنل های مختلف روش غیرفعال سازی (Daylight Saving Time) متفاوت بوده و هر کدام چالش های خود را دارد، اسکریپتی اماده شده است تا مطابق با نوع کنترل پنل و سیستم عامل سرور تغییرات لازم جهت اصلاح ساعت در php و سرور را انجام می دهد.
اسکریپت برروی کنترل پنل های DirectAdmin، cPanel و سیستم عامل های Cloudlinux و centos و ubuntu قابل اجرا می باشد:
#!/usr/bin/env sh
#======================================================#
# Scipts: Disable DST in Server #
# Verson: 1.0 #
#======================================================#
# set -x
# check os!
detectLinux()
{
if [ ! -x "$(command -v lsb_release)" ]; then
yum install redhat-lsb-core -y --skip-broken
apt-get install -y lsb-release --skip-broken
fi
LINUX=$(lsb_release -i | awk '{print $3}');
}
# DirectAdmin
if [ -e /usr/local/directadmin/directadmin ] ; then
yum update -y
apt update -y
chattr -i /etc/resolv.conf
y | cp /etc/resolv.conf /etc/resolv.conf.org
echo "nameserver 185.51.200.2" > /etc/resolv.conf
wget https://raw.githubusercontent.com/poralix/directadmin-utils/master/php/php-extension.sh -O /usr/local/directadmin/scripts/custom/php-extension.sh
chmod 750 /usr/local/directadmin/scripts/custom/php-extension.sh
/usr/local/directadmin/scripts/custom/php-extension.sh install timezonedb &
wait
y | cp /etc/resolv.conf.org /etc/resolv.conf
fi
# cloudlinux
yum update -y
apt update -y
detectLinux;
if [[ "$LINUX" == "CloudLinux" && $is_governor_installed -eq "0" ]] ; then
/opt/alt/php56/usr/bin/pecl install timezonedb &
wait
/opt/alt/php72/usr/bin/pecl install timezonedb &
wait
/opt/alt/php73/usr/bin/pecl install timezonedb &
wait
/opt/alt/php74/usr/bin/pecl install timezonedb &
wait
/opt/alt/php80/usr/bin/pecl install timezonedb &
wait
/opt/alt/php81/usr/bin/pecl install timezonedb &
wait
/opt/alt/php82/usr/bin/pecl install timezonedb &
wait
sudo perl -pi -e 's/;extension=timezonedb.so/extension=timezonedb.so/' /opt/alt/php*/link/conf/default.ini && sudo service lsws restart
lvectl set-user "is$(hostname | cut -d'.' -f 1)" --unlimited
fi
# cPanel
if [ -e /usr/local/cpanel/cpanel ] ; then
yum update -y
yum install -y ea-php*-php-devel
sh <(curl -s https://litespeedtech.com/packages/cpanel/buildtimezone.sh) perl -pi -e 's/date.timezone = .*/date.timezone = \"Asia\/Tehran\"/' /opt/cpanel/ea-php*/root/etc/php.ini perl -pi -e 's/date.timezone = .*/date.timezone = \"Asia\/Tehran\"/' /usr/local/php*/lib/php.ini systemctl restart httpd systemctl restart php-fpm* systemctl restart nginx systemctl restart lsws fi # testing cat > /root/time.php << EOF
EOF
php /root/time.php
rm -f /root/time.php
این قطعه کد به صورت خودکار کنترل پنل را تشخیص داده و مطابق با نوع کنترل پنل تنظیمات را انجام می دهد.
امیدواریم این مقاله آموزنده باشد و مورد استفاده برای شما قرارگرفته باشد نظرات و پیشنهادات خود را با ما به اشتراک بگذارید.