پیدا کردن مشکلات وردپرس و برطرف کردن آن‌ها، برای تضمین عملکرد بی‌نقص سایت ضروری است؛ در این مقاله، می‌خواهیم راجع‌به قابلیتی پیش‌فرض در وردپرس صحبت کنیم که برای این کار به کار می‌آید؛ قابلیتی با نام Debugging Mode.

اول کمی اطلاعات بیشتری از این قابلیت ارائه کنیم و بعد برویم سراغ آموزش فعال‌سازی و استفاده از آن.

منظور از حالت دیباگ در وردپرس چیست؟

حالت دیباگ در وردپرس یکی از قابلیت‌های پیش‌فرض این سیستم مدیریت محتوا است؛ قابلیتی که به دولوپرها اجازه می‌دهد پیام‌های خطا را برای عیب‌یابی لیست کنند.

برای فعال کردن این قابلیت می‌توانید سراغ متغیرهای مختلف PHP مثل WP_DEBUG و SCRIPT_DEBUG بروید.

به‌علاوه، امکان فعال‌سازی Debugging Mode با استفاده از افزونه‌های مخصوص هم وجود دارد.

لاگ‌های وردپرس چه هستند و چرا برای خطایابی مهم‌اند؟

لاگ‌های وردپرس یا error log، همان لیست خطاهایی هستند که توسط حالت دیباگ درست می‌شوند.

بعد از فعال کردن حالت دیباگ، تمام پیام‌های خطای سایت داخل یک لیست جمع‌آوری می‌شوند و در قالب یک فایل در اختیارتان قرار می‌گیرند؛ این لیست همان لاگ وردپرس است.

به بیان ساده‌تر، لاگ‌ وردپرس ابزاری است برای شناسایی کدها، پلاگین‌ها و قالب‌های مشکل‌دار.

یک قدم جلوتر برویم و ببینیم گزارش گرفتن از خطاهای وردپرس یا همان دریافت لاگ به چه صورتی است.

⭐ محتوای مرتبط: علت خطای صفحه سفید وردپرس + ۹ روش تضمینی برای رفع آن

نحوه گزارش‌گیری از خطاهای وردپرس

به دو روش می‌توانید این کار را انجام دهید؛ روش اول استفاده از پلاگین است و روش دوم به کدنویسی نیاز دارد.

روش اول: استفاده از افزونه برای فعال‌سازی دیباگ

حالت دیباگ در وردپرس به‌صورت پیش‌فرض غیرفعال است؛ یعنی این CMS در حالت عادی اجازۀ ثبت و لیست کردن پیام‌های خطا را نمی‌دهد! اگر مشکل خیلی حاد نیست و امکان ورود به داشبورد را دارید، می‌توانید از افزونۀ WP Debugging برای عیب‌یابی و لیست کردن خطاها استفاده کنید.

بعد از نصب و فعال‌سازی افزونه، به داشبورد وردپرس بروید و از منوی کناری، از قسمت ابزارها روی نام این افزونه کلیک کنید.

داشبوردی شبیه به این تصویر را می‌بینید:

داشبورد افزونه wp debugging

تیک کنار عبارت Set WP_DEBUG to true را بزنید تا حالت دیباگ وردپرس فعال شود. گزینۀ بعدی هم مشخص می‌کند که آیا خطاها در سمت فرانت‌اند (برای کاربران) نمایش داده شوند یا نه؟ آخری هم مربوط به نمایش یا عدم نمایش Fatal errors است.

روی دکمۀ آبی‌رنگ Save Changes کلیک کنید تا کار تمام شود.

نکته: افزونۀ WP Debugging قابلیت‌های دیگری هم دارد که ما در این مقاله به آن‌ها کاری نداریم.

روش دوم: فعال کردن دیباگ با کدنویسی

اگر دوست ندارید برای فعال کردن حالت دیباگ سراغ پلاگینی جداگانه بروید، چاره‌ای نمی‌ماند جز فعال‌سازی این قابلیت با کدنویسی:

۱. فعال کردن متغیر WP_DEBUG برای نمایش خطاهای PHP

می‌توانیم بگوییم این راه، پایه‌ای‌ترین و ساده‌ترین روش برای فعال‌سازی حالت دیباگ در وردپرس به شمار می‌رود. فعال‌سازی WP_DEBUG اجازه می‌دهد خطاهای احتمالی در کدهای PHP را در اجزای مختلف سایت، از قالب‌ها گرفته تا پلاگین‌ها، شناسایی کنید.

برای دستکاری این متغیر باید به فایل wp-cofing.php دسترسی داشته باشید؛ یا از طریق پروتکل‌ FTP، یا از طریق File Manager کنتر‌ل‌پنل هاست. همان‌طور که در تصویر زیر می‌بینید، باید روی این wp-config.php کلیک راست کرده و بعد از بین گزینه‌هایی که ظاهر می‌شوند، روی Edit کلیک کنید:

نحوه ادیت فایل wp-config

بعد از ورود به این فایل، دنبال خط زیر بگردید:

define( 'WP_DEBUG', false );

اگر با کلاینتی مثل FileZilla و با پروتکل FTP این کار را انجام می‌دهید، بعد از تغییر مقدار این متغیر از false به true، باید نسخۀ به‌روزرسانی‌شده را مجدداً روی هاست آپلود کنید.

ولی اگر با کنترل‌پنل‌هایی مثل cPanel و DirectAdmin کار را پیش می‌برید، فقط کافی است فایل را بعد از تغییر مقدار متغیر، ذخیره کنید.

از این به بعد، اگر مشکلی در کدهای PHP به وجود بیاید، آن را در سمت فرانت‌اند خواهید دید (یعنی بازدیدکنندگان سایت هم آن را می‌بینند)؛ البته اگر مقدار متغیر WP_DEBUG_DISPLAY برابر با true باشد! پیام به شکلی مشابه تصویر زیر نمایش داده می‌شود:

نمایش پیغام خطا در سمت فرانت اند

می‌توانید مقدار این متغیر را روی همان false بگذارید و در عوض، با اضافه کردن تکه کد زیر در انتهای فایل wp-config.php، وردپرس را وادار کنید تا فایلی با عنوان debug.log بسازد و تمام پیغام‌های خطا را در آن لیست و ذخیره کند:

define('WP_DEBUG_LOG', true);

دقت کنید این تکه کد باید دقیقاً بالای عبارت !That’s all, stop editing قرار بگیرد.

فایل debug.log که چند خط بالاتر کاربردش را توضیح دادیم، در دایرکتوری wp-content ساخته می‌شود. برای باز کردن این فایل، روی آن کلیک راست و بعد روی View کلیک کنید:

نحوه باز کردن فایل debug log

تصویر زیر نمونه‌ای است از محتویات داخل این فایل:

محتویات داخل debug log

نکته: اگر بعداً تصمیم گرفتید حالت دیباگ را غیرفعال کنید، حتماً مقدار متغیرهای WP_DEBUG_DISPLAY و WP_DEBUG_LOG را هم به false تغییر دهید تا منابع هاست بی‌جهت درگیر نباشند!

⭐ محتوای مرتبط: آموزش نحوه رفع خطای cURL28 یا Connection Timed Out

۲. فعال کردن SCRIPT_DEBUG برای لود فایل‌های اصلی CSS و JS به‌جای نسخه‌های فشرده

در حالت پیش‌فرض، وردپرس فایل‌های هسته‌ای و فشرده از جاوااسکریپت (JS) و CSS را اجرا می‌کند؛ اگرچه این رویکرد سرعت بارگذاری صفحات را بیشتر می‌کند، ولی با مخفی نگه داشتن خیلی از جزئیات، در فرایند عیب‌یابی اختلال به وجود می‌آورد.

برای رفع این مشکل، باید مقدار متغیر SCRIPT_DEBUG را تغییر دهید. این کار زمانی به کار می‌آید که ظاهر سایتتان را با این دو زبان برنامه‌نویسی طراحی کرده باشید!

روال کار تقریباً مشابه فعال‌سازی WP_DEBUG است؛ به این صورت که با روش دلخواهتان فایل wp-conifg.php را باز و بعد از پیدا کردن تکه کد زیر، مقدار آن را از false به true تغییر می‌دهید.

define( 'SCRIPT_DEBUG', false );

نکته: اگر احیاناً این خط را پیدا نکردید، عین چیزی که در خط قبلی می‌بینید را به آخرین بخش فایل wp-config.php، یعنی بالای عبارت !That’s all, stop editing اضافه کنید.

در نهایت فایل را با تغییراتش ذخیره کنید تا SCRIPT_DEBUG فعال شود.

حالا اگر سایت با مشکلات جدی مرتبط به JavaScript و CSS مواجه شود، پیغام‌های خطا داخل یک فایل جداگانه لیست می‌شوند.

پیشنهاد می‌کنیم بعد از عیب‌یابی و رفع مشکلات، شرایط را به حالت قبل برگردانده و SCRIPT_DEBUG را غیر فعال کنید؛ در غیر این صورت، عملکرد سایت به ‌شدت افت خواهد کرد.

۳. فعال کردن امکان ذخیره کردن خطاهای PHP در فایل لاگ

زبان برنامه‌نویسی PHP یک فانکشن پیش‌فرض دارد که به ()error-log معروف است. این قابلیت اجازه می‌دهد مشکلات مربوط به خطاهای این زبان را در یک لاگ ثبت کنید.

از آنجایی که این قابلیت در سمت سرور اجرا می‌شود، می‌تواند تمام اپلیکیشن‌های ساخته‌شده با زبان PHP در محیط هاست (مثلاً خود وردپرس و دیتابیسش) را دیباگ کند.

برای فعال‌سازی این قابلیت باید سراغ فایل php.ini بروید. می‌دانید که بیشتر کنترل‌پنل‌ها ساختار نسبتاً مشابهی دارند؛ پس بعد از ورود به داشبورد کنترل‌پنل، به بخش PHP options بروید و تیک کنار گزینۀ logErrors را بزنید. با این کار، سیستم شروع می‌کند به لیست کردن پیام‌های خطا.

اگر می‌خواهید خطاها را در قالب یک پیغام در سمت فرانت‌اند ببینید، باید گزینۀ displayErros را هم فعال کنید. بعد صفحه را به پایین اسکرول و روی دکمۀ Save کلیک کنید.

نکته: بهتر است displayErrors را غیرفعال نگه دارید تا بازدیدکنندگان متوجه خطاهای احتمالی سایت نشوند!

برای دسترسی به لیست خطاها یا همان لاگ وردپرس هم باید داخل روت سرور دنبال دایرکتوری log. بگردید.

⭐ محتوای مرتبط: چرا باید .htaccess دیفالت باشد؟ آموزش ساخت فایل htaccess پیش‌فرض در وردپرس

۴. فعال کردن گزارش‌گیری از خطاهای پایگاه داده وردپرس (wpdb)

برای این منظور باید مقدار متغیر show_errors متعلق به wpdb را تغییر دهید. انجام این کار، یعنی لیست کردن خطاهای SQL وب‌سایت، به رفع ایرادات مربوط به اتصال پایگاه داده و سینتکس‌ها کمک می‌کند.

برای فعال کردن این قابلیت، فایل class-wpdb.php را باز و class wpdb را پیدا کنید؛ بعد دنبال تکه کد زیر بگردید:

public $show_errors = false;

با تغییر false به true و ذخیرۀ فایل، گزارش‌گیری از خطاهای پایگاه داده فعال می‌شود.

در بخش بعدی، نحوۀ غیرفعال‌سازی این قابلیت را آموزش می‌دهیم.

چگونه حالت دیباگ وردپرس را غیرفعال کنیم؟

همان‌طور که گفتیم، ترجیحاً بهتر است حالت دیباگ وردپرس را همیشه فعال نگه ندارید و بعد از پیدا کردن مشکلات و رفع آن‌ها، عیب‌یابی را متوقف کنید؛ چون فعالیت دائمی دیباگ هم سرعت سایت را پایین می‌آورد، هم ممکن است باعث نشت اطلاعات حساس و محرمانه بشود.

اگر این حالت را با استفاده از افزونه فعال کرده‌اید، وارد داشبورد وردپرس شوید و بعد از ورود به بخش پلاگین‌ها، افزونۀ مخصوص این کار را نصب کرده بودید، غیر فعال و حتی حذف کنید.

اگر کار را با یکی از روش‌های کدنویسی پیش برده بودید، فقط کافی است شرایط را به حالت قبلی برگردانید؛ به‌طور مشخص، مقدار متغیر WP_DEBUG را دوباره روی false تنظیم کنید تا عیب‌یابی متوقف شود.

اگر موافق باشید، یک بار دیگر بینیم لاگ خطاها کجا ذخیره می‌شوند.

⭐ محتوای مرتبط: علت و نحوه رفع خطای Briefly Unavailable For Scheduled Maintenance. Check Back in a Minute در وردپرس

چطور به لاگ خطاهای وردپرس دسترسی پیدا کنیم؟

وقتی حالت دیباگ وردپرس فعال باشد، تمام خطاهای مرتبط با این CMS در WordPress error logs ثبت و ذخیره می‌شوند؛ یعنی لاگ در ابتدای کار خالی است و باید تلاش کنید تا مشکل دوباره رخ بدهد، تا پیام خطای آن در لاگ ذخیره شود!

مثلاً اگر بازدید از یک صفحۀ خاص مشکل‌ساز است، باید از آن صفحه دیدن کنید تا پیام خطا صادر شود.

بعد باید با یک کلاینت FTP یا SFTP مثل FileZilla به هاست متصل شوید؛ یا سراغ File Manager کنترل‌پنل بروید. در آنجا دنبال دایرکتوری wp-content بگردید. داخل آن فولدر، فایلی وجود دارد که نامش debug.log است. این فایل حاوی همۀ خطاهایی می‌شود که Debugging Mode آن‌ها را شناسایی و ثبت کرده است.

تا اینجا نحوۀ پیدا کردن مشکلات را بررسی می‌کردیم، حالا وقت آن است که با راهکارهای رفع این مشکلات آشنا شویم.

چطور خطاهای موجود در لاگ وردپرس را برطرف کنیم؟

بعد از باز کردن لاگ می‌بینید که تمام خطاها در آن ثبت شده‌اند. دقت کنید که زمان ثبت پیام‌ها بر اساس محدودۀ زمانی UTC است و نه ایران!

با اینکه شاید شما هم مثل خیلی‌های دیگر حتی یک خط از این پیام‌های خطا را متوجه نشوید، به‌هرحال، برای شروع فرایند عیب‌یابی و رفع مشکلات احتمالی باید از همین نقطه شروع کنید.

هر خطایی یک کد دارد و می‌توانید با جست‌وجو دربارۀ آن کد، به اطلاعات مفیدی دربارۀ راهکارهای رفع مشکل برسید. حتی می‌توانید روی کمک پشتیبانی هاستینگی که از آن سرویس می‌گیرید هم حساب باز کنید.

⭐ محتوای مرتبط: «یک خطای مهم در این وب سایت رخ داده است»؛ این خطا را چطور رفع کنیم؟

چطور با استفاده از لاگ‌ها، مشکلات عملکرد سایت را شناسایی و برطرف کنیم؟

لاگ‌های وردپرس می‌توانند انواع مختلفی دارند؛ اجازه دهید ۳ مثال را بررسی کنیم تا نشان دهیم چطور می‌شود با کندوکاو لاگ‌ها، مشکلات مربوط به عملکرد سایت را پیدا و برطرف کرد.

مثلاً permissions error را در نظر بگیرید؛ نوعی خطا که یک هشدار PHP را در لاگ ثبت می‌کند. چنین اتفاقی زمانی رخ می‌دهد که کاربری بدون داشتن مجوز لازم، به یک فایل دسترسی پیدا می‌کند.

چطور چنین چیزی ممکن است؟

شاید فایل از طریق پروتکل‌های FTP یا SFTP آپلود شده و فردی که این کار را انجام داده، حواسش به تعیین محدودیت برای دسترسی نبوده! برای رفع این مشکل، قبل از هر کاری باید موجودیت فایل اشاره‌شده در پیام خطا را تأیید کنید.

مثال اول را ببینید:

PHP Warning: The stream could not be opened for writing to the file "/path/to/yourblog/wp-content/themes/badperms/lib/css/theme.css" due to permission denied. This error originated in the file "/path/to/yourblog/wp-content/themes/WFTDAtv/lib/less/lessc.inc.php" on line 1418

مثال بعدی هم بیانگر همین مشکل است:

[Sat May 31 21:30:22 2023] [error] [client 127.0.0.1] PHP Warning: The stream could not be opened for writing to the file "/path/to/yourblog/wp-content/themes/yoo_phoenix_wp/cache/xml-80a72b04a693554d055946d5ad954588.php" due to permission denied. This error occurred in the file "/path/to/yourblog/wp-content/themes/yoo_regvis_wp/warp/helpers/xml.php" on line 34. Referring page: http://example.com/wp-admin/customize.php

در برخی موارد، چنین خطایی نشان می‌دهد که یک پلاگین یا قالب می‌خواهد کاری را انجام بدهد که اجازۀ انجام آن را ندارد! یا اینکه می‌خواهد به دایرکتوری یا فایلی دسترسی پیدا کند و مجاز به انجام این کار نیست. مثال سوم را ببینید:

PHP Warning: Failed to open the stream for writing to the file "/path/to/yourblog/wp-content/cache/autoptimize/autoptimize_f7d7e4c8e9a3146b6b514d7e7f9e2468.php" due to permission denied. This error originated in the file "/path/to/yourblog/wp-content/plugins/plugin_folder/plugin_file.php" on line 22

برویم برای جمع‌بندی مقاله.

عیب‌یابی و رفع مشکلات وردپرس با استفاده از حالت دیباگ

در این مقاله، راجع‌به حالت دیباگ وردپرس صحبت کردیم؛ قابلیتی پیش‌فرض در این سیستم مدیریت محتوا که گفتیم برای ساخت لاگ از پیام‌های خطا کاربرد دارد.

حالت دیباگ به‌صورت پیش‌فرض غیرفعال است! به همین خاطر، بخش عمدۀ بلاگ‌پست را به‌ راه‌و‌روش‌های فعال‌سازی این قابلیت اختصاص دادیم. طبیعتاً اگر اطلاعات زیادی از دنیای کدها ندارید، بهتر است از افزونۀ WP Debugging کمک بگیرید؛ ولی اگر دستکاری فایل‌های wp-config.php و ini.php را بلدید، شاید بهتر باشد افزونۀ اضافی روی سایتتان نصب نکنید و سراغ روش دوم، یعنی تغییر یکی دو خط از کدهای این فایل‌ها بروید.

به‌هرحال، ما اینجا هستیم تا کمکتان کنیم؛ پس هر سؤالی که در این رابطه دارید، زیر همین بلاگ‌پست آن را بنویسید.

No comment

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *