در این خطا، مشکل همیشه تنظیم کوکی مرورگر نیست. اگر PHP پیش از ارسال header، متن یا اخطاری تولید کند، وردپرس ممکن است نتواند cookie ورود را درست بفرستد. ابتدا میان «مرورگر cookie را رد میکند» و «سرور قبل از header خروجی داده» تفاوت بگذارید؛ راهحل این دو یکسان نیست.
آزمون سریع بدون تغییر سایت
- در مرورگر جدا و روی دامنه و HTTPS صحیح ورود را امتحان کنید.
- redirect بین www و بدون www یا HTTP و HTTPS را بررسی کنید.
- زمان شروع خطا و آخرین تغییر فایل یا افزونه را ثبت کنید.
- اگر فقط یک مرورگر مشکل دارد، سیاست cookie و افزونه مرورگر را بررسی کنید؛ اگر همه درگیرند، مسیر سرور جدیتر است.
لاگ را غیرعمومی بخوانید
روی کپی آزمایشی، دیباگ را طبق راهنمای وردپرس فعال کنید و نمایش خطا به بازدیدکننده را خاموش نگه دارید. ثابتهای WP_DEBUG را تکراری تعریف نکنید و لاگ را در مسیر محافظتشده نگه دارید. پیام headers already sent اغلب نام فایل و خط آغاز خروجی را نشان میدهد؛ همان نقطه سرنخ است، نه لزوماً جایی که setcookie شکست خورده است.
مواردی که باید در فایل بررسی شوند
- BOM پیش از تگ آغاز PHP و ذخیرهسازی نامناسب encoding.
- فاصله یا متن خارج از PHP در فایلهایی مانند wp-config.php یا functions.php.
- echo، var_dump یا print_r باقیمانده از دیباگ.
- warning یا notice افزونه که به صفحه فرستاده میشود.
- کد تزریقشده یا فایل دستکاریشده در صورت وجود نشانه نفوذ.
اصلاح محدود و قابل برگشت
از فایل بکاپ بگیرید و فقط خروجی ناخواسته را حذف کنید. فایل خالص PHP معمولاً به تگ پایانی نیاز ندارد و حذف تگ پایانی میتواند از فاصله انتهایی ناخواسته جلوگیری کند؛ اما فایل ترکیبی HTML را با همین قاعده عمومی خراب نکنید. قبل از بارگذاری، syntax را با PHP سازگار بررسی کنید. در افزونه، نسخه اصلاحشده رسمی یا رفع علت در کد اختصاصی بهتر از دستکاری دائمی فایل فروشنده است.
چه کارهایی علت را پنهان میکند؟
افزودن ob_start بهصورت سراسری، خاموشکردن همه گزارش خطا یا پاککردن تصادفی cookieها بدون یافتن منبع، ممکن است فقط نشانه را جابهجا کند. پس از اصلاح، ورود تازه، خروج، بازنشانی رمز و ارسال header را کنترل کنید. دیباگ عمومی و فایل آزمایشی را جمع و لاگ خطای تازه را بررسی کنید.
مطالعه مرتبط
منابع و مستندات
بازبینی محتوا و منابع: ۲۶ مهر ۱۴۰۵.