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