محتوای آموزشی وبلاگ نتآرام
اگر PHP هشدار timezone میدهد، باید منطقهٔ زمانی مورد استفادهٔ برنامه را مشخص کنیم. منطقهٔ زمانی میگوید یک لحظهٔ واحد را با ساعت کدام ناحیه نمایش بدهیم؛ این کار با عوض کردن ساعت واقعی سرور فرق دارد.
نمونهٔ ساده: ساعت نوشتهها چند ساعت فرق دارد
در تنظیم PHP مربوط به سایت، مقدار
date.timezone = Asia/Tehran نمونهٔ انتخاب منطقهٔ زمانی تهران است. اگر خود برنامه تنظیم جدا دارد، مانند بخش تنظیمات عمومی وردپرس، آن بخش را هم ببینید. PHP خط فرمان میتواند فایل تنظیم جدا داشته باشد؛ بنابراین تغییر تنظیم SSH لزوماً تاریخ سایت را اصلاح نمیکند.بعد یک نوشتهٔ آزمایشی با زمان مشخص بسازید و زمان نمایش آن را ببینید. اگر هشدار برطرف شد ولی ساعت نوشته هنوز متفاوت است، تنظیم زمان در خود برنامه یا روش ذخیرهٔ تاریخ را بررسی کنید. برای جبران اختلاف نمایش، ساعت سرور را با یک تاریخ ثابت قدیمی تنظیم نکنید.


ابتدا محیط خطا را بشناسید
اگر خطا هنگام باز شدن سایت است، تنظیم PHP وب را بررسی کنید. دستور php --ini در SSH فقط فایلهای PHP همان محیط CLI را نشان میدهد و ممکن است به نسخهای دیگر مربوط باشد. cron، پنل و وب میتوانند هرکدام تنظیم جدا داشته باشند. محل خطا و نسخهٔ فعال را یادداشت کنید تا فایل نامربوط را ویرایش نکنید.
در هاست اشتراکی، از گزینهٔ تنظیمات PHP که میزبان ارائه کرده استفاده کنید. لازم نیست برای رفع هشدار یک سایت به تنظیم سراسری سرور دست بزنید. اگر مدیر سرور هستید، نام سرویس PHP-FPM یا handler واقعی دامنه را پیدا کنید و روش اعمال تنظیم آن را مطابق نصب خود انجام دهید.
انتخاب نام معتبر منطقهٔ زمانی
برای نمایش زمان ایران، Asia/Tehran یک نام منطقهٔ زمانی است. عددی مانند +03:30 فقط یک offset است و با شناسهٔ منطقهٔ زمانی و قواعد آن یکسان نیست. برنامهای که زمانها را در UTC ذخیره میکند، میتواند هنگام نمایش به منطقهٔ دلخواه تبدیل کند؛ بدون شناخت مدل داده، ساعتهای ذخیرهشده را گروهی تغییر ندهید.
در تنظیم مؤثر PHP، مقدار زیر نمونهٔ انتخاب منطقهٔ ایران است:
کد / دستورdate.timezone = "Asia/Tehran"
اگر تنظیم در سطح خود برنامه لازم است، تابع date_default_timezone_set نیز مسیر رسمی تعیین منطقهٔ زمانی است. در برنامهای که چارچوب یا وردپرس تنظیم زمان خودش را دارد، ابتدا همان روش را بررسی کنید تا دو تنظیم متناقض ایجاد نشود.
اعمال و بررسی نتیجه
پس از ذخیره، همان صفحه یا همان cron را دوباره اجرا کنید. بسته به handler، ممکن است reload سرویس مؤثر یا روش اعمال ارائهشده در پنل لازم باشد. ریاستارت Nginx بهتنهایی الزاماً تنظیم PHP-FPM را تازه نمیکند و دستور قدیمی httpd نیز روی همهٔ نصبها وجود ندارد.
برای تشخیص، نام فایل تنظیم بارگذاریشده و مقدار timezone را بهصورت موقت و با دسترسی محدود بررسی کنید. خروجی کامل phpinfo را در مسیر عمومی رها نکنید. پس از پایان، فایل آزمایشی را حذف کنید و یک زمان تازه را با منطقهٔ مشخص بخوانید.
اگر هنوز نتیجه اشتباه است
نام منطقه، تنظیمهای تکمیلی و مقداری را که خود برنامه در زمان اجرا میگذارد بررسی کنید. اگر وب درست است و cron اشتباه، تنظیم و باینری اجرای cron را جدا ببینید. اختلاف نمایش چند ساعت با عقب بودن ساعت واقعی سیستم تفاوت دارد. تنظیم timezone برای یک برنامه، جای همگامسازی ساعت سرور با NTP را نمیگیرد.
فرمانهای نمونهٔ این آموزش
فرمانهای زیر مربوط به مراحل توضیحدادهشدهاند. پیش از اجرا، نام حساب و مسیر نمونه را با اطلاعات خودتان جایگزین کنید. فرمانهای مدیریتی را مدیر سرور اجرا میکند.
کد / دستورphp --ini
php -r 'echo date_default_timezone_get(), PHP_EOL;'
منابع و ادامهٔ مطالعه
مقاله قبلی
مقاله بعدی
دیدگاهها (۰)
دیدگاههای تاییدشده و پاسخهای تیم نتآرام
