منطقه زمانی یا time zone مربوط به تفاوت ساعت شهرها و کشورها با ساعت مبدا (گرینوویچ) است. کشور ما هم سالانه در ساعت رسمی خود همگام با تایم زون تغییراتی اعمال می‌کرد. اما امسال ساعت رسمی کشور تغییری نداشت. شاید این عدم تغییر برای بسیاری از افراد جامعه مشکلی ایجاد نکرد اما از آ‌ن‌جایی که سرورهای جهانی مطابق معمول برای تغییر ساعت تنظیم شده بودند؛ سرورهای لینوکسی و ویندوزی که time zone آن‌ها روی Asia/Tehran ثبت شده بود با مشکلات عدیده‌ای مواجه شدند.

در واقع در این سرورها؛ تمام رخدادهای ثبت شده یک ساعت جلوتر نمایش داده می‌شد. اگر شما هم از کاربرانی هستید که از این به هم ریختگی زمانی در سرور های لینوکسی و ویندوزی به سطوح آمده‌اید، باید برای غیرفعال سازی حالت تابستانه (Daylight Saving Time) مطابق با سیستم عامل سرور و نرم افزارهای آن اقدام کنید. برای آموزش این مبحث همراه ما باشید.

تغییر Time zone در windows 10 و windows server 2011-2022

خوشبختانه تغییر منطقه زمانی در سیستم‌عامل‌های ویندوزی بسیار آسان و کافی است Daylight Saving Time  را در آن‌ها غیرفعال کنیم. برای این کار با فشردن همزمان کلیدهای Win + R خط فرمان ویندوز را فعال کنید و کلمه cmd را نوشته و آن را بازکنیم. حالا دستور زیر را در این خط فرمان وارد می‌کنیم:

tzutil /s "Iran Standard Time_dstoff"

اما اگر از OS های لینوکسی استفاده می کنید بسته به distribution نصب شده برروی سرور می‌توانید این  اصلاحات را انجام دهید.

اگر در سرور خود از php استفاده می‌کنید نیاز است ماژول timezonedb را برای نسخه‌های php نصب شده برروی سرور خود نصب و فعال کنید و سپس در php.ini های نسخه ها time zone را برروی Asia/Tehran قرار دهید تا این ساعت نیز اصلاح شود.

نصب Timezonedb در دایرکت ادمین

اگر از کنترل پنل دایرکت ادمین استفاده می‌کنید از دستور زیر کمک بگیرید:

/usr/local/phpXY/bin/pecl install timezonedb

توجه: [box type=”shadow” align=”” class=”” width=””]در دستور بالا به جای XY نسخه مورد استفاده php را قرار دهید.[/box]

غیرفعال سازی Daylight Saving Time در انواع سیستم عامل‌ها

غیرفعال سازی حالت تابستانه در سیستم‌عامل‌های مختلف متفاوت است و چالش‌های گوناگونی را پیش روی کاربران قرار می‌دهد. توصیه می‌کنیم از اسکریپت زیر جهت تغییر این حالت استفاده کنید؛ چرا که برروی کنترل پنل های DirectAdmin، cPanel و سیستم عامل های Cloud Linux و centos و ubuntu قابل اجرا می‌باشد.

جالب است بدانید: این قطعه کد به صورت خودکار control panel را تشخیص داده و مطابق با نوع آن تنظیمات را انجام می‌دهد.

#!/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