نحوه پیدا کردن و غلبه بر BOM یک اشتباه بد در وردپرس است. رفع اشکال: نمی توان اطلاعات هدر را تغییر داد - سرصفحه هایی که قبلاً توسط توضیحات یک مشکل خاص ارسال شده است

امروز تصمیم گرفتیم در مورد معنای پیام صحبت کنیم "هشدار: نمی توان اطلاعات سرصفحه را تغییر داد - سرصفحه ها قبلا توسط (خروجی در /home/... شروع شده است."، که به جای محتوای اصلی آن در صفحه سایت ظاهر شد.
همانطور که مشخص شد، شبکه به اندازه کافی در مورد این موضوع نوشته است، اما هیچ دستورالعمل کلی در مورد معنای همه آن و چگونگی خلاص شدن از آن وجود ندارد.
ما تصمیم گرفتیم چند قطره به دریای وسیع اطلاعات در مورد این موضوع اضافه کنیم، زیرا شخصاً با این مشکل روبرو بودیم.

چند وقت پیش ما انتقال چندین سایت مشتری از یک هاست به هاست دیگر را انجام دادیم.
همه چیز خوب پیش رفت، سایت ها در دسترس بودند، اما وقتی می خواهید به ادمین بروید. پنل پس از وارد کردن لاگین و رمز عبور به جای کنترل پنل یک صفحه سفید ظاهر می شود.
در سایت های دیگر بررسی شد - همین مورد.
به منظور کشف دلایل ممکن، نمایش خطا را فعال کرده ایم.
برای انجام این کار، باید فایل htaccess. واقع در ریشه سایت را از طریق FTP ویرایش کنید و خط را به آن اضافه کنید:

php_flag display_errors روشن است

پس از آن، هنگام ورود به پنل مدیریت، چندین پیام مانند "هشدار: نمی توان اطلاعات هدر را تغییر داد - هدرهایی که قبلاً توسط (خروجی از /home/.../functions.php:1552 شروع شده است) ارسال شده است در /home/.../ ظاهر شد. public_html /wp-login.php در خط 362" و غیره.

در نتیجه جستجو، اطلاعاتی یافت شد که این پیام به اطلاع می رساند که اطلاعات هدر قابل تغییر نیست، زیرا سرصفحه ها (اطلاعات مربوط به آنها) قبلاً ارسال شده اند و در داخل پرانتزها مشخص شده است که در کدام خطوط در کدام پرونده ها قرار دارد. انجام شده.


عناوین (سرصفحه ها) اطلاعات سرویس سروری است که سایت در آن قرار دارد. قبل از اینکه مرورگر محتوای سایت را نمایش دهد، هدرهایی را از سرور دریافت می کند که داده های مختلفی را نشان می دهد: فعال بودن ذخیره صفحه، کدگذاری آن، نوع محتوای صفحه و موارد دیگر. در سیستم های مدیریت محتوای سایت، سرفصل ها توسط توابعی که در آن قرار دارند تشکیل می شوند فایل های مختلفسیستم های.
شرط اجباریهدرها باید قبل از محتوای اصلی (محتوای) صفحه ارسال شوند.


اگر محتوای سایت قبل از هدرها منتقل شود، وضعیتی پیش می آید که با پیام "هشدار: نمی توان اطلاعات هدر را تغییر داد - سرصفحه هایی که قبلاً ارسال شده اند" به ما هشدار داده می شود.

در چه شرایطی ممکن است این اتفاق بیفتد؟ همانطور که قبلا ذکر شد، در CMS مدرن، هدرها نتیجه یک یا چند تابع هستند. تابع خود یک قطعه کد است که بین اولیه قرار دارد و نهایی ?> برچسب ها

هر چیزی خارج از این تگ ها محتوای صفحه در نظر گرفته می شود.
بنابراین، اگر در ابتدای صفحه توابعی وجود داشته باشد که منجر به هدرهای ارسال شده شود و پیام "هشدار: نمی توان اطلاعات هدر را تغییر داد ..." دریافت کرد، معلوم می شود که برخی از اطلاعات مربوط به محتوای صفحه هستند. ارسال شده از سرور قبل از هدرها

این اطلاعات چیست و چگونه می توان آن را پیدا کرد. اغلب این فضاها و خطوط خالی هستند.

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

شما باید فایل های نشان داده شده در پیام های "هشدار: نمی توان اطلاعات هدر را تغییر داد ..." را دانلود کنید. کامپیوتر محلی، آن را در یک ویرایشگر کد باز کنید (من از NotePad++ استفاده می کنم) و خطوط و فاصله های خالی را به دقت بررسی کنید:

در عین حال، یک ویژگی مهم وجود دارد که می تواند زمان جستجوی راه حل را به میزان قابل توجهی افزایش دهد.
ممکن است فایل حاوی خطوط و فضاهای خالی نباشد، اما اگر در رمزگذاری UTF-8 ذخیره شده باشد، ممکن است یک کاراکتر خارجی در همان ابتدای سند توسط ویرایشگری که فایل در آن ایجاد شده است درج شود. این کاراکتر یک شناسه UTF-8 برابر با یک فضای با عرض صفر است که ممکن است اصلاً در ویرایشگر نمایش داده نشود، اما در سرور به عنوان محتوای اصلی درک شده و قبل از سرفصل ها نمایش داده می شود.

برای خلاص شدن از شر این شناسه، باید فایل های دانلود شده را دوباره در قالب ذخیره کنید UTF-8 بدون BOM(UTF-8 بدون BOM).

NotePad++ این کار را به خوبی انجام می دهد.

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

در این مقاله به بررسی دلایل اصلی و راه‌حل‌های خطای «هدرها چون قبلا ارسال شده‌اند نمی‌توانند تغییر کنند» می‌پردازیم. ("نمی‌توان اطلاعات سرصفحه را تغییر داد - سرصفحه‌ها قبلاً ارسال شده‌اند").

این خطا به چه معناست؟

برای درک دلایل خطا، ابتدا باید بفهمید که این "هدر" چیست.

بیایید وارد تئوری نشویم. بیایید بگوییم که قبل از اینکه هر کاربری یک صفحه وب را باز کند، همان "هدر" برای او ارسال می شود که حاوی رمزگذاری، زبان سایت، داده های سرور و سایر اطلاعات سرویس است. همچنین ارزش این را دارد که به طور جداگانه اضافه شود که کوکی ها و جلسه نیز در هدر ارسال می شوند.

چه دستوراتی باعث این خطا می شود؟

اشتباه "نمی توان اطلاعات سرصفحه را تغییر داد - سرصفحه ها قبلا ارسال شده اند"می تواند دستورات PHP مانند header، setcookie و سایر موارد مربوط به کار کوکی ها یا جلسات را فراخوانی کند.

علل و راه حل های خطا.

بیشترین اشتباه رایجاز بی تجربگی می آید ما قبلاً متوجه شده ایم که هدرها قبل از بارگیری خود صفحه ارسال می شوند.

اما برنامه نویسان، به ویژه مبتدیان، به سادگی این را فراموش می کنند یا حتی نمی دانند. و ابتدا سعی می کنند چیزی را در صفحه نمایش دهند - اغلب با کمک دستور echo ، و سپس کوکی ها را تنظیم می کنند ، هدرها را ارسال می کنند و غیره. که منجر به این خطا می شود.

در اینجا یک مثال از کد است که منجر به چنین خطایی می شود:

و این هم گزینه صحیح:

یعنی اولا قبل از ارسال سرصفحه ها نمی توانید چیزی را نمایش دهید!

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

پیگیری این امر می‌تواند بسیار دشوار باشد، زیرا برای مثال، یک دفترچه یادداشت ویندوز می‌تواند ابتدا یک علامت سفارش بایت اضافه کند، بدون اینکه به ما هشدار دهد و حتی این نماد را نشان دهد. در این مورد، ارزش دارد که سند را با سایر ویرایشگران باز کنید و بررسی کنید.

در اینجا نمونه ای از هدرهای نادرست آورده شده است:

یعنی ثانیاً قبل

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

در اینجا نمونه ای از این کدهای نادرست آورده شده است:

ارسال شده توسط پنجشنبه, 05/04/2017 - 12:55

شرح یک مشکل خاص

پس از کلیک بر روی دکمه، یک خطا نمایش داده می شود:

هشدار: نمی توان اطلاعات هدر را تغییر داد - هدرهایی که قبلاً توسط (خروجی در C:\OpenServer\domains\testsite\WEB\5_phpRedirect.php:10 شروع شده است) در C:\OpenServer\domains\testsite\WEB\5_phpRedirect.php در خط 12 ارسال شده است.

کد مشابه کد موجود در این تاپیک است:

وب تجربی

یک اسکریپت را برای دانلود انتخاب کنید

کنترل کننده اسکریپت:

چه زمانی اتفاق می افتد

نوع خطا (هشدار):

هشدار: نمی توان اطلاعات سرصفحه را تغییر داد - سرصفحه ها قبلاً ارسال شده اند

اگر قبلاً کاری را انجام داده باشید که نیاز به تنظیم سرصفحه های مرورگر داشته باشد و اکنون بخواهید آنها را با موارد جدید بازنویسی کنید. به عنوان مثال، اگر قبلاً متن را نمایش داده اید، php سرصفحه ها (به ویژه هدر) را نمایش می دهد. محل- نشان می دهد که آیا باید در صفحه درخواستی باقی بمانید یا اینکه آیا باید به صفحه دیگری بروید و از قبل به درخواست پاسخی دریافت کنید) تا به مرورگر مشتری (در پاسخ خود) نشان دهد که چگونه رفتار کند.

ریشه مشکل

به احتمال زیاد، مشکل در مورد شما این است که شما قبلاً محتوا می دهید (تگ های html که در فایل با اسکریپت مخلوط شده اند) قبل ازدستورات:

echo header ($redirect);

به یاد داشته باشید که تابع header() تنها در صورتی می تواند فراخوانی شود که کلاینت باشد هنوز هیچ داده ای ارسال نشده است. یعنی اول در خروجی بیاید، قبل از فراخوانی هیچ تگ HTML، خط خالی و غیره وجود نداشته باشد. بسیار معمول است که هنگام خواندن کد با توابع فایل مانند include یا require دچار اشکال می‌شوید، در این کد فضاها یا خطوط خالی وجود دارد که قبل از فراخوانی header() چاپ می‌شوند. همین مشکلات در هنگام استفاده از یک فایل PHP/HTML ممکن است رخ دهد.

یعنی لازم است که کنترل کننده اسکریپت را از html ذخیره کنید - در واقع ، در واقع ، خودش چیزی را خروجی نمی کند ، بلکه به سادگی آن را به آدرس دیگری منتقل می کند - این اولین است.

header($redirect);

echo header ($redirect);

آزمایش کنید

از آنجایی که echo() در واقع به می نویسد بدنه پاسخ http، و نه در هدرها، و هدر void را برمی گرداند (یعنی مقادیر را برمی گرداند)، همانطور که در بالا ذکر شد، پس استفاده از echo() فایده ای ندارد، اما
با این حال، من پیشنهاد می کنم یک آزمایش انجام دهید:

  1. html را حذف کنید
  2. اکو را حذف نکنید

از آنجایی که شما در واقع header() را قبل از echo() فراخوانی می کنید (از آنجایی که header() یک آرگومان برای echo() است) و بنابراین برمی گردانید -- در همان زمان بررسی کنید که آیا تابع null برمی گرداند -- آیا به عنوان یک رشته خالی تفسیر می شود. یا (به جای آن) اکو حتی شروع به کار نخواهد کرد زیرا تغییر مسیر قبلاً رخ داده است.

بیایید دوباره دلیل را مرور کنیم

آن ها قبل از فراخوانی header() هیچ محتوایی نباید نمایش داده شود(آنچه در توضیحات تابع نوشته شده است: http://php.net/manual/ru/function.header...)

  • 1) نه با اکو
  • 2) نه به کمک ریختن معمول متن html در مرورگر.

در مورد ما، ظاهراً اکو بر چیزی تأثیر نمی گذارد، اما html در هندلر واقعاً تأثیر می گذارد.

موضوع حل شد

به توصیه شما حذف شد تگ های HTML. اکنون تغییر مسیر به درستی انجام می شود، اسکریپت handler به شکل زیر است:

عملکرد اکو واقعاً روی کار تأثیر نمی گذارد، یعنی. شما می توانید آن را مانند S. Holzner ترک کنید:

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

  • برای ارسال نظرات وارد شوید

اما شما می توانید آن را عملی کنید

اما می توانید کنترل کننده قبلی را نیز به کار ببرید

تغییر مسیر کاربر

اگر گزینه را در فایل php.ini تنظیم کنید

خروجی_بافر = 4096

  • برای ارسال نظرات وارد شوید

ارسال مجدد هدرها ممنوع است، پروتکل HTTP اینطور کار نمی کند! اما آن وقت چه باید کرد؟ اگر پس از خروجی در صفحه، شما نیز نیاز به شروع جلسه و قرار دادن کوکی دارید؟ - در مورد بافر خروجی به یاد داشته باشید.

یعنی وقتی یک اندازه بافر غیر صفر تنظیم می شود، تا زمانی که پر شود، باز هم امکان دستکاری هدرها وجود دارد. با اندازه بافر صفر، پس از خروجی محتوا، بلافاصله آن را برمی گرداند قبل ازارسال هدرهای پاسخ HTTP به مشتری.

و معلوم می شود که ما می خواهیم هدرهایی را که قبلاً روی شبکه "پرواز کرده اند" به مشتری تغییر دهیم (به این معنی که دیگر امکان رفع آنها وجود ندارد - به ویژه هدر" محل، که نشان می دهد که آیا باید در صفحه درخواستی باقی بمانیم یا درخواست دیگری داشته باشیم - پاسخ اسکریپت "redirector" (در مورد ما این یک کنترل کننده فرم است) فقط می گوید که ما باید صفحه دیگری را درخواست کنیم)، که php در مورد آن به ما هشدار می دهد. .

ولی:البته حل مشکل از این طریق (نه خیلی درست، دقیق تر) غیرممکن است.

_____________
matfak vgu و بقیه کلاسیک ها =)

  • برای ارسال نظرات وارد شوید

آشنایی با هدرهای HTTP و فیلدهای هدر HTTP

هدرهای HTTPارائه اطلاعات حیاتی مورد نیاز برای ارسال تراکنش HTTP از طریق پروتکل http.

قالب کلی هدر HTTP شامل جفت‌های نام - مقدار جدا شده با دو نقطه در فیلد سرصفحه است. هر یک از جفت نام-مقدار با یک توالی کاراکتر بازگشتی (CR) و یک خط تغذیه (LF) خاتمه می یابد. فیلدهای خالی در انتهای هر هدر نشان دهنده انتهای سرصفحه است.

فرمت هدر رایج که توسط برنامه ها دنبال می شود به صورت زیر است:

انواع هدر HTTP

چهار نوع هدر پیام HTTP وجود دارد. آن ها هستند:

  • سربرگ عمومی
  • سربرگ درخواست
  • هدر پاسخ
  • سرصفحه موجودیت

سربرگ عمومی

فیلدهای General Header کاربرد مشترکی در پیام های درخواست و پاسخ دارند. فیلدهای سرصفحه فقط برای پیام ارسال شده اعمال می شود و در موجودیت منتقل شده اعمال نمی شود.

ساختار یک هدر کلی به این صورت است:

کنترل کشفیلد دستورالعمل هایی را مشخص می کند که باید توسط هر مکانیزم ذخیره سازی در یک سیستم درخواست و پاسخ دنبال شود.

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

تاریخفیلد تاریخ و زمان شروع پیام را نشان می دهد. قالب تاریخ مشخص شده در HTTP به این صورت است:

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

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

رمزگذاری انتقالفیلد نشان می دهد که آیا هر نوع تغییری در بدنه پیام اعمال شده است یا خیر.

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

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

هشدارفیلد حاوی اطلاعات اضافی در مورد وضعیت پیام و تبدیل پیام است که در پیام منعکس نمی شود.

هدرهای هشدار معمولاً همراه با پاسخ ارسال می شوند.

فیلد هدر درخواست به مشتریان اجازه می دهد تا اطلاعات درخواست و اطلاعات مشتری را به سرور ارسال کنند.

ساختار هدر درخواست به این صورت است:

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

"*" برای گروه بندی انواع رسانه در محدوده استفاده می شود

"*/*" همه انواع رسانه را نشان می دهد

"type/*" همه زیرشاخه‌های یک نوع را نشان می‌دهد

Charset را بپذیریدفیلد مجموعه کاراکترهای قابل قبول پاسخ را نشان می دهد. این باعث می شود مشتریان قادر به درک مجموعه های کاراکتر با هدف خاص باشند تا به سرور سیگنال دهند تا سند را در این مجموعه کاراکترها نشان دهد.

رمزگذاری را بپذیریدفیلد مشابه Accept است، کدگذاری محتوای قابل قبول پاسخ را محدود می کند.

پذیرش-زبانفیلد مشابه Accept است، مجموعه ترجیحی زبان‌های طبیعی را محدود می‌کند.

مجوزفیلد برای عوامل کاربری است که می خواهند خود را با سرور احراز هویت کنند.

انتظارفیلد رفتارهای سرور مورد نیاز مشتری را نشان می دهد.

از جانبفیلد حاوی آدرس ایمیل کاربری است که عامل کاربر درخواست کننده را کنترل می کند.

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

اگر مطابقت داشته باشدفیلد برای ساخت روش های شرطی استفاده می شود.

If-Modified-Sinceفیلد برای ایجاد یک روش شرطی استفاده می شود. اگر نوع درخواستی در مدت زمان مشخص شده اصلاح نشود، موجودیت از سرور بازگردانده نخواهد شد.

اگر-هیچ-تطابقفیلد به روز رسانی کارآمد اطلاعات کش را با حداقل سربار تراکنش امکان پذیر می کند.

اگر محدودهفیلد به مشتریان امکان می دهد بخشی از موجودیت گمشده را دریافت کنند یا در غیر این صورت، مشتریان می توانند درخواست ارسال کل موجودیت جدید را داشته باشند.

If-Unmodified-Sinceفیلد به سرور اجازه می دهد تا عملیات درخواستی را در صورتی که از زمان مشخص شده در این فیلد تغییر نکرده است، انجام دهد.

ماکس فورواردفیلد مکانیزم هایی را با روش های TRACE و OPTIONS برای محدود کردن پراکسی ها یا دروازه های ارسال درخواست ارائه می دهد.

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

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

ارجاع دهندهفیلد به مشتریان اجازه می دهد تا آدرس URI منبعی را که Request-URI از آن یافت می شود، مشخص کنند.

TEفیلد نشان‌دهنده کدگذاری انتقال پسوند است که می‌تواند در پاسخ بپذیرد. علاوه بر این، نشان می دهد که آیا فیلدهای تریلر را در کدگذاری انتقال تکه می پذیرد یا خیر.

عامل کاربرفیلد حاوی اطلاعاتی در مورد عامل کاربر درخواست کننده است.

سربرگ پاسخ HTTP

فیلد سرصفحه پاسخ به سرور اجازه می دهد تا اطلاعات اضافی را از طریق پاسخ ها به غیر از پاسخ ساده Status-Line ارسال کند.

ساختار هدر پاسخ به این صورت است:

محدوده ها را بپذیریدفیلد سرورها را قادر می سازد تا پذیرش درخواست های محدوده منابع را نشان دهند.

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

ETagفیلد مقدار فعلی تگ نهاد را برای یک درخواست ارائه می دهد.

محلفیلد گیرندگان را به مکان‌هایی غیر از Request-URI هدایت می‌کند تا شناسایی کامل یک منبع جدید را انجام دهد.

پروکسی احراز هویتفیلد یک شامل اجباری برای پاسخ احراز هویت پروکسی است.

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

سرورفیلد حاوی اطلاعاتی در مورد نرم افزاری است که سرور برای رسیدگی به درخواست ها استفاده می کند.

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

WWW-Authenticateفیلد زمانی استفاده می شود که پیام پاسخ غیرمجاز باشد.

فیلدهای هدر موجودیت، فرااطلاعات مربوط به نهاد-بدنه یا منبع درخواستی را تعریف می کنند. قالب entity-header به نظر می رسد:

اجازهلیست فیلد مجموعه ای از روش های پشتیبانی شده توسط منابع شناسایی شده Request-URI.

رمزگذاری محتوافیلد به عنوان یک اصلاح کننده نوع رسانه استفاده می شود.

محتوا-زبانفیلد زبان طبیعی را برای مشتریان یک نهاد توصیف می کند.

طول محتوافیلد اندازه یک موجودیت را نشان می دهد که با عدد اعشاری نشان داده شده است.

مکان محتوافیلد زمانی که یک موجودیت از مکانی غیر از Requested-URI قابل دسترسی باشد، مکان منبع را فراهم می کند.

محتوا-MD5فیلد بررسی یکپارچگی پیام (MIC) را با استفاده از خلاصه MD5 در بدنه موجودیت ارائه می دهد.

محدوده محتوافیلد مشخص می کند که قسمتی از بدنه موجودیت کامل باید در کجا اعمال شود.

نوع محتوافیلد نشان می دهد که آیا نوع رسانه بدنه موجودیت برای گیرنده ارسال می شود یا از روش GET برای ارسال درخواست ها استفاده می شود.

منقضی می شودفیلد تاریخ/زمانی را ارائه می دهد که پس از آن پاسخ بیات می شود.

آخرین تغییرفیلد تاریخ و زمان آخرین تغییر نوع را نشان می دهد.

ترتیب ظاهر شدن نام فیلد در هدر هنگام دریافت ناچیز است. معمولاً سرصفحه‌های عمومی ابتدا قرار می‌گیرند و به دنبال آن سرصفحه درخواست یا پاسخ با هدر نهاد در انتها قرار می‌گیرد.

اطلاعیه حق چاپ: لطفاً این مقاله را بدون اجازه کتبی قبلی از سایت کپی یا ترجمه نکنید

HTTP Debugger یک تحلیلگر HTTP بدون پروکسی برای توسعه دهندگان است که توانایی ضبط و تجزیه و تحلیل هدرهای HTTP، کوکی ها، پارامترهای POST، محتوای HTTP و هدرهای CORS را از هر مرورگر یا برنامه دسکتاپ فراهم می کند. رابط کاربری عالی و استفاده بسیار آسان. نه پروکسی، نه مشکل شبکه!

یک بار، وقتی به وبلاگم رفتم، با تعجب متوجه یک خطای نامفهوم شدم، چیزی شبیه به:

هشدار: نمی‌توان اطلاعات سرصفحه را تغییر داد - سرصفحه‌ها قبلاً ارسال شده‌اند (خروجی در /xxxxxxxx/wp-config.php:1 شروع شده است)

و هیچ راهی برای دسترسی به ادمین وجود ندارد. من بلافاصله رفتم تا بررسی کنم که مشکل فایل wp-config.php چیست. همه چیز سر جای خود بود، پسوردهای پایگاه داده درست بودند. من فکر کردم دوباره هک شده است)) اما باز هم هیچ نشانه ای از خرابکاری در FTP وجود نداشت. عجیب ترین چیز (این در نهایت من را کاملاً گیج کرد) این بود که فقط لینک سایت بدون www کار نمی کرد یا برعکس (دقیقاً یادم نیست). من شروع به ضربه زدن به هاست کردم ، به تنظیمات پنل مدیریت دامنه نگاه کردم - به طور کلی خیلی چیزها.

اما معلوم شد که خیلی راحت تر است - یک BOM در ابتدای فایل پیکربندی وجود دارد- نشانگر (امضا) برای فایل های UTF-8. به همین دلیل خطای فوق پرتاب شد. برای اینکه این اتفاق برای شما نیفتد، ابتدا باید از ویرایشگرهای کد استفاده کنید که یا اصلا این امضا را قرار ندهند یا قبل از ذخیره فایل مشخص کنند که آیا به آن نیاز است یا خیر.

در برخی از ویرایشگرهای متن، می توانید چک باکس های "شامل امضای یونیکد (BOM)"، "Add Byte Order Mark" یا موارد مشابه را در تنظیمات پیدا کنید. در غیر این صورت، بدون اینکه بتوانید یک گزینه غیر ضروری را در یک برنامه خاص غیرفعال کنید، استفاده از آن توصیه نمی شود. در انجمن های تخصصی می توانید لیستی از موارد خوب را پیدا کنید ویرایشگرهای متن، این هست - Notepad2، PSPad، UnicEdit، Notepad++. در مورد دومی، ابزاری نسبتاً قدرتمند، مطالب زیادی نوشته شده است. من به طور تصادفی یک ویرایشگر جایگزین در رایانه خود در دسترس داشتم - آکلپاد- من از آن برای کارهای مشابه استفاده می کنم.

لازم به ذکر است که در اینجا یک نکته دیگر وجود دارد - یک خطا با BOM می تواند نه تنها در فایل wp-config.php باشد. علاوه بر این، با غیرفعال بودن گزینه نمایش اخطارها، به هیچ وجه نخواهید دید که مشکل به کجا رسیده است. در چنین مواردی (خوب، و همه موارد دیگر)، من استفاده از یک ساده را توصیه می کنم اسکریپت برای یافتن فایل ها با BOM. باید از یوری بلوتیتسکی برای توسعه تشکر کرد.

استفاده از اسکریپت بسیار ساده است.

  1. فایل مورد نظر
  2. آن را بریزید سرور FTPبه دایرکتوری ریشه اگر وردپرس در ریشه سایت (بلکه مثلاً در پوشه وبلاگ) نصب نشده باشد، باید اسکریپت را در دایرکتوری که وردپرس در آن قرار دارد قرار داده و از آن اجرا شود.
  3. راه اندازی بسیار ساده است - در نوار آدرس مرورگر پیوند http://your.site/find_bom.php را تایپ کنید

در نتیجه، لیستی از فایل های معیوب را دریافت کنید. به هر حال، برای سرعت، اسکریپت فقط دایرکتوری هایی را بررسی می کند که کاربران معمولاً فایل ها را در آن آپلود می کنند - ریشه، /wp-content/themes و /wp-content/plugins.

اساساً همین است. حل یک مشکل ساده چقدر سخت بود. امیدوارم تجربه من کمی به شما کمک کرده باشد و اکنون وقتی اخطار مربوطه ظاهر می شود، می دانید که چه کاری باید انجام دهید :) اگر نمی توانید یک یا آن فایل را از BOM تعمیر کنید، می توانید به سادگی یک فایل جدید را از توزیع وردپرس آپلود کنید.

P.S. برای تازه دامادها سایت مناسب برگزاری ضیافت و حل تمام مسائل مربوط به عروسی است.