منطقه زمانی یا 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
