نحوه تغییر منطقه زمانی (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
echo "The time is " . date("h:i:sa P") . "\n";
?>

قطعه کد فوق را می بایست در یک فایل 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
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
<?php echo "The time is " . date("h:i:sa P") . "\n"; ?>
EOF
php  /root/time.php
rm -f /root/time.php

این قطعه کد به صورت خودکار کنترل پنل را تشخیص داده و مطابق با نوع کنترل پنل تنظیمات را انجام می دهد.

4.5/5 - (52 امتیاز)

مایلید هر دو هفته یک ایمیل مفید دریافت کنید؟

ما را در شبکه‌های اجتماعی دنبال کنید

همچنین شاید دوست داشته باشید!

وردپرس چگونه اطلاعات را ذخیره می کند؟

0
ساختار دیتابیس وردپرس یکی از موارد حیاتی در توسعه وبسایت‌ها و برنامه‌های مبتنی بر این سیستم مدیریت محتوا است. دیتابیس وردپرس اطلاعات مربوط به مطالب،…

نظرات کاربران

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
شما برای ادامه باید با شرایط موافقت کنید

فهرست