رفع خطای Cannot modify header information در وردپرس
یکی از خطا های مرسوم وردپرس که احتمالا تا امروز با آن مواجه شده اید، خطای Cannot modify header information است. البته این خطا محدود به وردپرس نبوده و ممکن است در شرایط مختلفی و در اسکریپت های متفاوت اتفاق بیفتد. در آموزش امروز مسترکد به نحوه ی عیب یابی و رفع خطای Cannot modify header information خواهد پرداخت. در نظر داشته باشید که گرچه در عنوان این آموزش عبارت “در وردپرس” را درج کرده ایم، اما این آموزش عملا در هر موقعیت دیگری و برای هر اسکریپت دیگری که چنین خطایی در آن اتفاق افتاده، قابل استفاده بوده و میتواند در محل های مختلفی که به خطای مشابهی برخورد کرده اید، به شما در رفع خطا کمک کند. بنابراین با ما همراه شوید.
دلیل اتفاق افتادن خطای Cannot modify header information
ما به این خطا، عنوان خطای Cannot modify header information را نسبت داده ایم اما اشاره به این نکته لازم است که اولا این یک خطا نبوده و یک هشدار است (warning) و دوما شکل نسبتا کامل تر خطای اتفاق افتاده به شکل زیر خواهد بود :
Warning: Cannot modify header information – headers already sent by (output started at…
خطای فوق معمولا به یکی از دلایل زیر اتفاق می افتد :
- وجود مقدار زیادی فاصله پیش از تگ آغازین php، یا پس از تگ پایانی php یا در میان این دو (<?php ?>)
- وجود مقدار زیادی فاصله یا خطوط خالی در بالا، پایین یا بخش خاصی از یک فایل
- مشکل در اینکودینگ فایل
- وجود بلاک های متعدد کد در فایل
رفع خطای Cannot modify header information
برای بررسی و رفع هر یک از حالت های فوق، لازم است که ابتدا بدانیم که مشکل در چه فایلی ایجاد شده تا بتوانیم عملیات رفع خطا را به شکل صحیح و از محل صحیح آغاز کنیم. خوشبختانه خود خطای Cannot modify header information اطلاعات دقیقی در مورد محل ایجاد مشکل در اختیار ما قرار میدهد. بنابراین بهترین کار، استفاده از اطلاعاتی است که توسط این خطا به شما اعلام میشود. خطای Cannot modify header information معمولا سینتکس کلی زیر را دارد :
Warning: Cannot modify header information – headers already sent by (output started at /path/to/broken-file.php:#) in /path/to/affected-file.php on line #
همانطور که مشاهده میکنید در این خطا دو فایل و دو خط کد به شما معرفی میشوند. در خطای درج شده بالا منظور از broken-file.php فایلی است که مشکل اصلی در آن اتفاق افتاده و منظور از affected-file.php فایلی است که از این مشکل تحت تاثیر قرار گرفته است. همچنین دو علامت نامبرساین یا # خط کدی را نشان میدهند که مشکل در آنجا ایجاد شده و یا در حوالی آن باید به دنبال مشکل بگردید. همانطور که گفتیم، خطای بالا یک حالت کلی از خطای cannot modify header information است. حالا که میدانید هر بخش از این خطا چه چیزی را به شما میگوید، بهتر است کار را با یک نمونه خطای واقعی که در آن فایل های دچار مشکل شده نیز کاملا مشخص هستند دنبال کنیم. به خطای زیر توجه کنید :
Warning: Cannot modify header information – headers already sent by (output started at /home/user/public_html/wp-content/themes/yourtheme/some-functions.php:1) in /home/user/public_html/wp-includes/pluggable.php on line 765
همانطور که مشاهده میکنید در خطای بالا، محل اتفاق افتادن خطا کاملا مشخص است. در بخش اول خطا به فایل some-function.php که در فولدر قالب فعلی سایت شما قرار گرفته اشاره شده و به ما اعلام شده که در خط اول این فایل باید به دنبال مشکل گشته و آن را برطرف کنیم.
توجه داشته باشید که فایل فوق و محل اتفاق افتادن این خطا، فقط به عنوان مثال در اینجا درج شده و خطایی که در سایت شما اتفاق می افتد در فایلی دیگر و در محلی دیگر خواهد بود. اما حالا شما قادر هستید که خطا را به درستی خوانده و محل اتفاق افتادن مشکل را پیدا کنید.
حالا که میدانید چطور فایل معیوب را بیابید، بیایید با هم به سراغ رفع این خطا برویم. برای رفع این مشکل، دو روش پیش رو داریم که در ادامه به شرح آنها خواهیم پرداخت.
قبل از انجام هر کار دیگری …
در مرحله ی اول، طبق معمول همیشه، ایجاد یک بکاپ کامل از سایت فراموش نشود!
و اما قبل از اینکه به سراغ روش های رفع این مشکل برویم باید به یک نکته ی بسیار مهم اشاره کنیم. پیش از اینکه هر کار دیگری انجام بدهید، اطمینان حاصل کنید که encoding فایلی که دچار مشکل شده، حتما روی UTF-8 تنظیم شده باشد. داشتن اینکودینگ های دیگری مثل ANSII یا UTF-8-BOM دقیقا جزو مواردی است که میتواند شما را دچار مشکل کند. بنابراین ابتدا فایل را در یک ویرایشگر متنی مثل Notepad++ بررسی کنید که از استفاده از اینکودینگ UTF-8 اطمینان حاصل کنید. در صورتی که اینکودینگ فایل صحیح نیست، آن را با اینکودینگ UTF-8 ذخیره کرده
روش اول رفع خطای Cannot modify header information
روش اول رفع این خطا، ممکن است مناسب هر کسی نباشد. در این روش تصمیم داریم به سراغ فایلی که دچار مشکل شده برویم، در فایل به دنبال محل بروز مشکل بگردیم. برای انجام این کار لازم است که ابتدا فایل مورد نظر را برای ویرایش باز کنید. میتوانید این کار را به طور مستقیم از طریق کنترل پنل یا SSH انجام داده و یا فایل را بر روی کامپیوتر خود دانلود کرده و با استفاده از یک ویرایشگر متنی این کار را انجام دهید. (ما استفاده از Notepad++ یا Atom را به شما توصیه میکنیم)
پس از اینکه فایل را برای ویرایش باز کردید، در ابتدا و انتهای فایل به دنبال فاصله ها و خطوط خالی گشته و آنها را پاک کنید. (برای حذف فاصله ها از دکمه backspace یا delete استفاده کنید) اطمینان حاصل کنید که قبل از تگ شروع php و پس از تگ پایان php نیز فاصله یا خط خالی وجود نداشته باشد. (خطوط خالی بیش از حد بین این دو تگ نیز ممکن است مشکل ساز شوند)
اگر فایل شما دارای تگ پایانی php نیست باز هم از عدم وجود فاصله یا خط اضافه پس از آخرین کارکتر فایل، اطمینان حاصل کنید.
در پایان فایل را ذخیره کرده و مجددا به هاست خود انتقال دهید تا جایگزین فایل اصلی شود.
روش دوم رفع خطای Cannot modify header information
روش دوم، از روش اول بسیار ساده تر است. اگر خطای مورد نظر در فایل مربوط به یکی از افزونه های شما اتفاق افتاده، میتوانید افزونه را غیر فعال و حذف کرده و آن را مجددا از یک پکیج تازه نصب کنید.
اگر مایل به انجام این کار نیستید و یا فایلی که دچار مشکل شده از فایل های هسته ی وردپرس است، شما میتوانید یک نسخه از فایل را مجددا روی هاست خود آپلود کرده و جایگزین نسخه ای که دچار مشکل شده نمایید.
مشکل هنوز پا برجاست؟
در اینجا دو حالت وجود دارد. اگر عملیاتی که انجام دادید، فایل محل اتفاق افتادن خطا را تغییر داده است، بنابراین کار شما موثر بوده. در اینجا باید عملیات رفع مشکل را برای فایل جدیدی که در خطا اعلام شده نیز تکرار کنید تا جایی که خطا به طور کامل برطرف شود و اثری از آن باقی نماند.
اما در حالت دوم، اگر تغییراتی که شما اعمال کردید، هیچ نوع تاثیری در خطای اتفاق افتاده نداشته و هیچ نوع تغییری در خطا مشاهده نمیشود، بهتر است موارد زیر را نیز بررسی کنید :
- گاهی این خطا به علت وجود بلاک های متعدد php در یک فایل اتفاق می افتد. مثلا همین چند وقت پیش در سایت یکی از کاربران که اتفاقا آلوده هم بود، مشاهده کردیم که یک بلاک کد مخرب به بالای فایل اصلی افزونه سئوی yoast تزریق شده که منجر به اتفاق افتادن همین خطایی شده بود که در این آموزش در رابطه با آن صحبت کردیم. حذف این بلاک کد، به سادگی مشکل کاربر را برطرف کرد و سایت به حالت عادی بازگشت. بنابراین اطمینان حاصل کنید که فایل شما دارای چنین شرایطی نباشد.
- اگر خودتان فایل را ویرایش کرده و فاصله ها و خطوط اضافی را از آن پاک کرده اید، مجددا نگاهی به فایل بیاندازید و اطمینان حاصل کنید که به طور اتفاقی، کارکتر اضافه ای وارد فایل نکرده باشید.
- اطمینان حاصل کنید که برای ویرایش فایل حتما از یک ویرایشگر متنی مناسب استفاه کرده باشید. استفاده از ابزارهای ویرایشی مانند مایکروسافت ورد برای انجام چنین کاری مناسب نبوده و به فایل شما کارکتر های ناخواسته اضافه میکند که منجر به بروز مشکل خواهد شد.
یک توصیه امنیتی در پایان …
در پایان این آموزش، برای شما یک توصیه ی کوچک اما مهم داریم. همانطور که مشاهده کردید، این خطا میواند اطلاعات حساسی را در مورد محل قرارگیری فایل ها در وردپرس شما در اختیار کاربران سایت بگذارد. این اطلاعات اگر به دست افراد سودجو و خرابکار بیفتند، میتوانند برای سایت شما خطر امنیتی ایجاد کنند. به همین جهت، قبلا هم به شما توصیه کرده بودیم که نمایش خطا و هشدار ها را در سایت خود غیر فعال کرده و کاری کنید که آنها در محلی مناسب ذخیره شده و در اختیار شما قرار بگیرند. برای جلوگیری از نمایش خطا ها به صورت عمومی در سایت و ذخیره ی آنها در لاگ میتوانید این آموزش را مطالعه کنید.
عالیست
یک دنیا ممنون
سلام
ممنون از راهنمایی خوبتون . من الان این مشکل واسه سایتم رخ داده و احتمال میدم برای پلاگین yoast باشه . اصلا نمیتونم وارد پنل مدیریت سایت بشم که پلاگین رو حذف کنم باید چکار کنم؟
سلام
بعید میدونم مشکلتون ارتباطی به این افزونه داشته باشه …
ولی به هر حال کافیه به فایل منیجر هاستتون مراجعه کنید، به فولدر افزونه های وردپرس برید اسم فولدر افزونه ی مورد نظر و تغییر بدید تا غیر فعال بشه.
پس میتونه مشکلش چی باشه ؟
توضیح دادیم توی آموزش دیگه 🙂 باید ببینید خطاتون داره میگه چه فایلی مشکل ایجاد کرده …
سلام
من یه اسکریپت نوشتم و این اررور رو میده در صورتی که روی لوکال هیچ اروری نمیده این اولین باره به این مشکل برخوردم، تمام مواردی که گفتین هم رعایت کردم اما درست نشد.
ممنون میشم کمکم کنید 🙂
سلام
اگر همه ی موارد رو کاملا چک کردید فقط یک نکته ی دیگه به ذهن من میرسه. اونم اینه که در فایل های php تون، کلا تگ php رو نبندید. البته طبعا این مسئله در مورد فایل هایی که در اونها php در ترکیب با html استفاده شده صادق نیست. اما میتونید روی فایلی که روش خطا دارید تست کنید، باید جواب بگیرید.
عالیییییی بود . ممنون
با سلام
از پست بسیار مفید و به ویژه آموزش گام به گام و مشروح شما برای رفع خطاء بسیار سپاسگزارم.
روی قالب که در لوکال هاست کار کرده بودم، چنین مشکلی وجود نداشت اما وقتی در هاست نصب کردم با این مشکل مواجهه شدم که با راه اول آموزش شما مشکل برطرف شد.