یکی از مشکلات و هشدارهایی (warning) که خیلی ها در php با آن مواجه هستند Warning معروف زیر است :
Warning: Cannot modify header information – headers already sent by (output started at /…………….) in ……….php on line ….
این مشکل اکثرا زمانی رخ می دهد که یک فایل PHP با یونیکد UTF-8 دارای کارکتر های BOM باشد. اما BOM چیست و آیا در یک ویرایشگر ساده قابل نمایش است؟ جهت حل مشکل Cannot modify header information چه کاری باید انجام داد؟
BOM یا Byte Order Mark ترکیبی است از چند نویسهی ویژه که قرارگیری آن در ابتدای یک فایل متنی، نوع کدگذاری نویسههای موجود در آن فایل را مشخص میکند. BOM بخشی از متن فایل به حساب نمیآید و وجود آن تنها برای رفع ابهام از نوع و شیوهی کدگذاری نویسههای یک فایلی متنی ضروری است.
با توجه به اینکه سیستم UTF-8 برای رفع مشکل سازگاری یونیکد با سیستم ASCII توسعه یافته است، در بیشتر مواقع از درج BOM مخصوص به UTF-8 در ابتدای فایلها خودداری میشود. زیرا این علامت میتواند باعث ایجاد سردرگمی برای ویرایشگرها و کامپایلرهایی شود که آن را نمیشناسند.
عبارتهای UTF-8 Without BOM، UTF-8 w/o BOM یا به طور ضمنی UTF-8 که در ویرایشگرهای متنی به نمایش درمیآیند، نشاندهندهی عدم وجود BOM در ابتدای فایل UTF-8 هستند. (منبع)
برای حل مشکل فوق در فایل های UTF-8 باید BOM را حذف کرد؛که در اینجا دو روش پیشنهاد می شود؛
اگر تعداد فایل هایی که این خطا را می دهند محدود و کم است می توانید نرم افزار Notepad++ را دانلود نمایید:
http://notepad-plus-plus.org/download/v6.7.html
سپس فایل PHP را به وسیله این ویرایشگر ویرایش کنید و از منو Encoding گزینه encode in utf-8 without out bom را انتخاب نمایید و فایل را ذخیره نمایید؛ بدین صورت کارکتر های BOM حذف شده و مشکل برطرف خواهد شد.
اما زمانی ممکن است تعداد فایل های شما بسیار زیاد باشد و ویرایش تک تک فایل ها وقت گیر باشد؛ به همین دلیل اسکریپتی را معرفی می کنیم که با یک کلیک تمامی فایل های داخل هاست را بررسی می کند و در صورت وجود BOM آن را حذف می نماید.
این اسکریپت ساده و کم حجم توسط Emrah Gunduz ساخته شده است bom.php نام دارد؛
منبع: سنترال هاستینگ
درود بر شما ..برای من هم همین مشکل توی کد پی اچ پی (از مدیریت محتوا استفاده نمی کردم)..مشکل من بودن یک فاصله بعد از اتمام کد پی اچ پی در فایل کانفیگ سایتم بود که با حذف کردن این فاصله مشکل رفع شد…بعد از این کد ?> که انتهای دستور پی اچ پی هست نباید هیچ فاصله و چیز اینتری باشه
بسیار ممنونم از راهنمایی شما
خدا خیرت بدهت
سلام
مرسی واقعا
خیلی کمک کرد.
با سلام
من تمام فایل ها رو به نحوی که گفته بودین سیو کردم اما باز مشکلم حل نشد و دستور زیر رو که گذاشتم برای ریدایرکت ارور فوق رو نشون میده
header(“Location: https://naabzist.com/index.php?cat=75“, true, 301);
exit();