امسال ساعت رسمی کشور تغییری نداشت اما سرور های جهانی مطابق هر سال برای تغییر ساعت تنظیم شده بودند، مشکلات متعددی در خصوص این مسئله برای سرور های لینوکسی و ویندوزی که 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
این قطعه کد به صورت خودکار کنترل پنل را تشخیص داده و مطابق با نوع کنترل پنل تنظیمات را انجام می دهد.