رفع خطای Cannot modify header information در وردپرس و php
یکی از خطاهای متداول که در هنگام برنامهنویسی php یا طراحی قالب و افزونه برای وردپرس رخ میدهد خطایی است که معمولا با متنی مشابه زیر در ظاهر سایت مشاهده میشود:
1 2 |
Warning: Cannot modify header information - headers already sent by (output started at /dir1/file1.php:12) in /dir2/file2.php on line 44 |
علت رخداد خطا چیست ؟
در پروتکل HTTP که وبسایتها برای انتقال اطلاعات از آن استفاده میکنند قوانینی وجود دارد. اطلاعات سایت شامل دو بخش کلی است، بخش Header و بخش Body یا محتوا. در بخش Header برخی اطلاعات کلی در مورد سایت پیش از ارسال محتوای اصلی به مرورگر ارسال میشود.
اطلاعات Header یا سرآمد معمولا شامل Cookieها، تنظیمات Cache، تنظیمات امنیتی، و برخی تنظیمات دیگر هستند.
با توجه به اینکه لازم است اطلاعات Header قبل از محتوای اصلی سایت، ارسال شوند، اگر ارسال محتوای اصلی را شروع کنیم و بعد قصد داشته باشیم تا اطلاعات Header را تغییر دهیم، با خطای فوق مواجه خواهیم شد.
این خطا چه زمانی اتفاق میافتد ؟
تغییر اطلاعات Header به ویژه در وردپرس، کاری معمول است. برخی دستورات php شامل دستورات زیر که در وردپرس هم استفاده میشوند، اطلاعات Header را تغییر میدهند و به همین دلیل لازم است مطمئن شویم که در طراحی قالب یا افزونهها، پیش از زمانی که مجاز است، اطلاعاتی به مرورگر ارسال نکنیم.
- header
- session_start
- setcookie
در بیشتر مواقع، ارسال اطلاعات به خروجی به صورت ناخواسته صورت میگیرد. برای مثال ممکن است در فایل functions.php قالب وردپرس، پیش از باز کردن تگ php، فاصله یا حروفی قرار گرفته باشند یا ممکن است پس از بسته شدن تگ php در این فایل، فاصله یا حروفی موجود باشند.
یک علت متداول دیگر، باز کردن فایل با ویرایشگرهای غیر تخصصی مانند notepad است. این گونه ویرایشگرها، ممکن است فایلهای UTF8 را به همراه کدهای در ابتدای فایل ذخیره کنند. این کدها هرچند قابل مشاهده نیستند ولی وجود دارند و باعث رخداد مشکل فوق خواهند شد.
چگونه مشکل را حل کنیم ؟
اگر دقت کنید، پیام خطایی که توسط php به نمایش در میآید، حاوی اطلاعاتی کمکی در خصوص روش حل مشکل است. دو نام فایل در این پیام خطا قابل مشاهده است. فایل اول محلی است که خطا را ایجاد کرده است و میبایست آن را باز کنید و محتوایی که در این بخش ایجاد میشود را حذف کنید و فایل دوم محلی است که یکی از دستورات مرتبط با header فراخوانی شدهاند و مشکل ایجاد شده است.
اگر خطای ایجاد شده به دلیل ویرایش فایل php با ویرایشگرهای غیرتخصصی باشد، میتوانید فایل مورد نظر را با یک ویرایشگر برنامهنویسی مانند Notepad++ باز کنید و از منوی Encoding گزینهی Convert to UTF-8 را انتخاب نمایید. اگر نوع کدگذاری فایل در این برنامه شامل پسوند BOM باشد، خطای فوق رخ میدهد.
همان طور که در بخش قبل گفته شد، یکی از علتهای رخداد مشکل، وجود کاراکترهایی بعد از تگ php در انتهای فایل است. در این گونه مواقع بهترین راه حل این است که آخرین کد مربوط به بسته شدن تگ php در فایل را به طور کامل حذف کنید. در این صورت، مفسر php به صورت خودکار تگ php را خواهد بست و از این جهت دیگر خطایی برای شما به وجود نخواهد آمد. برای مثال یک فایل functions.php به شکل زیر میتواند باشد:
1 2 3 4 |
<?php // wordpress codes // ... // ... |
همان طور که مشاهده میکنید، در این فایل تگ php باز شده و بسته نشده است.
ممنون از راهنمای موثرشما.