ამოხსნილია „სათაურის ინფორმაციის დამატება - სათაურები უკვე გაგზავნილი“ პრობლემის გადაჭრა. როგორ მოვძებნოთ და გადავლახოთ BOM - უსიამოვნო შეცდომა WordPress-ში

ამ სტატიაში ჩვენ განვიხილავთ, თუ რაზეა საჭირო სათაურები, დეტალების გარეშე, თუ რომელი რაზეა პასუხისმგებელი. ყველაზე გავრცელებული სათაურების როლები აღწერილი იქნება მომდევნო სტატიებში.

ყველა სტატია სერიიდან:

  • რა არის Http სათაურები? ზოგადი თეორია.

HTTPნიშნავს ჰიპერტექსტის გადაცემის პროტოკოლს. პროტოკოლი არის წესების ნაკრები, რომლითაც სხვადასხვა მოწყობილობა ცვლის მონაცემებს. იგი შეიქმნა 1990-იან წლებში. ახლა ის გამოიყენება თითქმის ყველგან ინტერნეტში. ყველაფერი, რასაც ხედავთ თქვენი ბრაუზერის ფანჯარაში, მიღებულია ამ პროტოკოლით. http სათაურები ალბათ მთავარია მოწყობილობებს შორის კომუნიკაციაში. ისინი გადასცემენ ძირითად ინფორმაციას დამყარებული კავშირისა და ამ კავშირის საშუალებით გადაცემული ინფორმაციის შესახებ.
მოდით შევხედოთ ორ მოწყობილობას შორის კომუნიკაციის დიაგრამას. დაე, ეს მოწყობილობები იყოს თქვენი კომპიუტერი და ზოგიერთი სერვერი ინტერნეტში:

როგორც ხედავთ, ბრაუზერმა გაგზავნა http მოთხოვნა. შეიძლება ასე გამოიყურებოდეს:

მიიღეთ /სხვა-19 HTTP/1.1
მასპინძელი: www.scriptsite.ru
მომხმარებლის აგენტი: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
მიღება: ტექსტი/html, აპლიკაცია/xhtml+xml, აპლიკაცია/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
კავშირი: შენარჩუნება-ცოცხალი

ამ შემთხვევაში, პირველი ხაზი არის მოთხოვნის ხაზი, ყველა სხვა ხაზი არის http სათაურები, რომლებიც შეიცავს დამატებით ინფორმაციას მოთხოვნის შესახებ, კლიენტის შესახებ, რომელიც ითხოვს ამ ინფორმაციას და მრავალი სხვა რამის შესახებ.
ჩვენი მოთხოვნის საპასუხოდ, სერვერს შეუძლია გამოაგზავნოს შემდეგი სათაურები:

სერვერი: Apache/2.0.61 (Unix) mod_ssl/2.0.61 OpenSSL/0.9.8k mod_dp20/0.99.2 PHP/5.2.5 mod_python/3.3.1 Python/2.5.1 mod_ruby/1.2.6 Ruby/1. (2007-09-24)

X-Powered-By: PHP/5.2.5

Set-Cookie: PHPSESSID=ft47gokfee6amv3eda3k1p93s3; გზა =/

Cache-Control: შენახვა არ არის, ქეში არ არის, ხელახალი შემოწმება, შემდგომი შემოწმება=0, წინასწარი შემოწმება=0

პრაგმა: ქეშის გარეშე

Keep-Alive: დროის ამოწურვა=10, მაქს=1024

კავშირი: Keep-Alive

გადაცემის კოდირება: დაქუცმაცებული

შინაარსის ტიპი: ტექსტი/html

პირველი ხაზი არის სტატუსის ხაზი. დარჩენილი ხაზები არის სათაურები. დიაგრამამ აჩვენა, რომ გვერდის შინაარსიც დატვირთულია. მაგრამ ეს შინაარსი, როგორც წესი, არ არის ნაჩვენები სათაურის მაყურებლის დანამატებში. და გვერდის შინაარსი მხოლოდ განსაკუთრებული შემთხვევაა. პროტოკოლის მიხედვით, გვერდი სულაც არ უნდა იყოს გადაცემული. ამის ნაცვლად, შესაძლებელია სურათის, ხმის ფაილის და ვიდეოს გადაცემა. და ყველა მათგანს ექნება ძალიან განსხვავებული სათაურები.

როგორ ვნახოთ http სათაურები?

იმისათვის, რომ ნახოთ http სათაურები, მე გირჩევთ შემდეგი დანამატები Firefox ბრაუზერისთვის:

თუ იყენებთ Chrome ბრაუზერს, შეგიძლიათ ნახოთ ყველა ინფორმაცია პარამეტრების ღილაკზე დაწკაპუნებით - ინსტრუმენტები - დეველოპერის ხელსაწყოები. ქსელების ჩანართი.
ოპერის ბრაუზერის მომხმარებლებს ვერანაირ რჩევას ვერ მივცემ, რადგან ამ ბრაუზერთან არ ვმეგობრობ. მას შემდეგ, რაც დანამატები დაინსტალირდება და მუშაობს, სცადეთ გვერდის განახლება. თქვენ დაუყოვნებლივ დაინახავთ მოთხოვნებისა და პასუხების უზარმაზარ სიას, რომლითაც თქვენი ბრაუზერი დაუკავშირდა სერვერს.

Http სათაურები და მათზე წვდომა php-ში

თუ თქვენ ხართ PHP დეველოპერი, შეგიძლიათ წვდომა მოთხოვნის სათაურებზე getallheaders() ფუნქციის გამოყენებით. იმის გასაგებად, თუ როგორ მუშაობს, მოდით გავუშვათ შემდეგი კოდი:

და ჩვენ ვიღებთ სათაურის მასივის ამონაწერს.

მაგრამ უფრო ხშირად მათზე წვდომა ხდება გლობალური ცვლადის $_SERVER მეშვეობით. თითქმის ყველა http სათაურს აქვს მსგავსი ელემენტის სახელი ამ ცვლადში, რომელიც ჩამოყალიბებულია HTTP_header_name პრინციპის მიხედვით. ასე რომ, იგივე 'User_Agent'-ისთვის არის ცვლადი $_SERVER['HTTP_USER_AGENT'];

სათაურების მისაღებად, რომლებსაც სერვერი აპირებს მომხმარებლისთვის გაგზავნას, გამოიყენება headers_list() ფუნქცია. როგორც წესი, სერვერი ადგენს ყველა სკრიპტის ბოლოს გამოტოვებულ საჭირო სათაურებს. ამიტომ, ეს მასივი შეიცავს სათაურებს, რომლებიც სერვერმა შექმნა სკრიპტის შესრულებამდე (და ისინი არ შეიცვლება) ან მათ, რომლებიც ჩვენ ხელით დავაყენეთ. მათი ხელით დაყენება შესაძლებელია ფუნქციის სათაურის გამოყენებით ("header text");
მოდით გავუშვათ შემდეგი კოდი:

ჩვენ დავინახავთ სათაურების ამონაბეჭდს, რომელიც მზად არის გასაგზავნად ფუნქციის გამოძახების დროს:

პირველი სათაური დაყენებულია ავტომატურად და ის შეიცავს სერვერის სახელს, რომელზეც მუშაობს სკრიპტი. მეორე ჩვენ მიერ ხელით დააინსტალირეთ. თუ ბრაუზერს სჭირდებოდა "Fruit" სათაური, ის აიღებდა მას სერვერის http პასუხიდან და გამოიყენებდა. მაგრამ რადგან ჩვენს ბრაუზერს ეს არ სჭირდება, ის უბრალოდ უგულებელყოფს იმ ხაზს, რომელიც არ ესმის.

HTTP მოთხოვნის სტრუქტურა

ჩვენი მოთხოვნა ასე გამოიყურება:

მასში პირველი ხაზი, როგორც უკვე აღვნიშნეთ, არის შეკითხვის ხაზი. იგი შედგება სამი ნაწილისაგან:

  • მეთოდი(მეთოდი) - მიუთითებს რა ტიპის მოთხოვნა. ყველაზე გავრცელებული მეთოდები: GET, POST, HEAD. მათ შესახებ მომდევნო აბზაცში დაიწერება.
  • გზა(გზა) - ჩვეულებრივ ეს არის URL-ის ნაწილი, რომელიც მოდის დომენის შემდეგ. მაგალითად, თუ მისამართის ზოლში შეიყვანთ http://www.scriptsite.ru/about/, ბილიკის მნიშვნელობა იქნება /about/.
  • პროტოკოლი(პროტოკოლი) - გამოყენებული პროტოკოლი. როგორც წესი, შედგება "HTTP" და პროტოკოლის ვერსიისგან. როგორც წესი, თანამედროვე ბრაუზერები იყენებენ 1.1 ვერსიას

შემდეგ მოდის სათაურები "Name: value" ფორმატის სტრიქონების სახით.
სხვათა შორის, ქუქი-ფაილის მონაცემები ასევე გადაიცემა ამ მოთხოვნაში, როგორც ერთ-ერთი სათაური. ამ ხაზების უმეტესობა არჩევითია. მოთხოვნა შეიძლება შემცირდეს მხოლოდ ორ ხაზამდე:

მიიღეთ /სტატია/შოუ/4/ HTTP/1.1

მასპინძელი: scriptsite.ru

მოთხოვნის მეთოდები

მიიღეთ

მიღების მოთხოვნა, როგორც წესი, გამოიყენება დოკუმენტის მოთხოვნისა და ზოგიერთი პარამეტრის გადასაცემად.
ეს არის მთავარი მეთოდი, რომელიც გამოიყენება HTML გვერდების, სურათების, CSS და JavaScript ფაილების მისაღებად და ა.შ.
იმის გამო, რომ პარამეტრები შეიძლება იყოს ნებისმიერი, და სერვერს არ აქვს შეზღუდვები იმის შესახებ, თუ როგორ შეიძლება მათი დამუშავება, მონაცემთა მოთხოვნის მეთოდი ხშირად გამოიყენება ინფორმაციის გადასაცემად. მაგალითად, გვექნება ასეთი ფორმა

ამ შემთხვევაში, ეს პარამეტრები გამოჩნდება ბრაუზერის მისამართის ზოლში.

პოსტი

პოსტი არის მეთოდი, რომელიც გამოიყენება სერვერზე მონაცემების გასაგზავნად. მიუხედავად იმისა, რომ თქვენ შეგიძლიათ მონაცემების გაგზავნა სერვერზე GET მეთოდის გამოყენებით ბრაუზერის მისამართის ზოლის მეშვეობით, უმეტეს შემთხვევაში სასურველია გამოიყენოთ POST. GET-ის საშუალებით დიდი რაოდენობით მონაცემების გაგზავნა არაპრაქტიკულია. გარდა ამისა, GET-ს აქვს გარკვეული შეზღუდვები, რომლებიც არ იძლევა, მაგალითად, ამ სტატიის გამოქვეყნებას ჩემს ვებსაიტზე მხოლოდ ერთი ბრაუზერის ხაზით. POST მოთხოვნები ყველაზე ხშირად გამოიყენება ვებ ფორმების გასაგზავნად. მოდით შევცვალოთ ფორმა წინა მაგალითიდან, რათა მივცეთ მას POST მეთოდი

ადამიანები გამუდმებით მოდიან ჩემთან ამ შეცდომით და მეკითხებიან: სად არის შეცდომა?მთელი პერიოდის განმავლობაში მე მივიღე დაახლოებით რამდენიმე მსგავსი წერილი 500 , არანაკლებ. დროა დავასრულოთ "" შეცდომით. ამ სტატიაში მე ვისაუბრებ ამ შეცდომის მიზეზებზე, ასევე როგორ მოვაგვაროთ იგი.

თუ ამ შეცდომას რუსულად თარგმნით, მიიღებთ მსგავს რაღაცას: " სათაურის შეცვლა შეუძლებელია, რადგან ისინი უკვე გაგზავნილია"ეს რა არის" სათაურები"? მოდით გავარკვიოთ.

როდესაც სერვერი უბრუნებს პასუხს კლიენტს სხეულის გარდა (მაგალითად, HTML კოდიგვერდები), ასევე არის სათაურები. ისინი შეიცავს სერვერის პასუხის კოდს, ფუნთუშა, კოდირება და მრავალი სხვა სერვისის პარამეტრი. შეუძლია PHP სკრიპტისათაურის გაგზავნა? რა თქმა უნდა შეიძლება. ამისთვის არის ფუნქცია header ().

ეს ფუნქცია, მაგალითად, მუდმივად გამოიყენება, როდესაც. ეს ფუნქცია ასევე რეგულარულად გამოიყენება .

ასევე, სათაურები იცვლება გაგზავნისას ფუნთუშადა სესიის დაწყებისას (ფუნქცია session_start()).

და ახლა იმის შესახებ, თუ რატომ ჩნდება შეცდომა? სერვერი ყოველთვის აძლევს სათაურებს ჯერ სერვერს, შემდეგ კი სხეულს. თუ სერვერმა უკვე დააბრუნა სათაურები, მაშინ სხეული მიდის და შემდეგ ხვდება ზოგიერთს session_start(). თურმე უბედურ პროგრამისტს დაავიწყდა სათაურების გაგზავნა ტანის დაწყებამდე და ახლა უკვე წასულ მატარებელს უნდა დაეწიოს.

აქ არის კოდი შეცდომით "":



?>

რა თქმა უნდა, ასეთი სისულელე PHPარ აპატიებს. და ასე უნდა ეწერა:

session_start(); // დავიწყოთ სესია
?>

ეს სკრიპტი არ გამოიწვევს შეცდომებს, რადგან ჯერ იგზავნება ყველა სათაური და მხოლოდ ამის შემდეგ იქმნება სერვერის პასუხის სხეული.

კოდის კიდევ ერთი მაგალითი შეცდომით:

ექო "გამარჯობა!"; // დაბეჭდე რამე
session_start(); // დავიწყოთ სესია
?>

იგივეა, რატომღაც ჯერ სხეული (ან მისი ნაწილი) არის ნაჩვენები, შემდეგ კი გაიხსენეს, რომ მათ ასევე უნდა შეცვალონ სათაურები.

თავად იფიქრეთ, როგორ გადაწეროთ ეს კოდი სწორად.

კიდევ ერთი მაგალითი:




გასასვლელი;
?>

როდესაც ასეთი კოდის ავტორი ვერ ხერხდება, გაკვირვებულია ამ შეცდომით და ამბობს: „ძალიან უცნაური დამთხვევაა, როცა ოპერაცია წარმატებით სრულდება, ყველაფერი კარგადაა და როცა რაიმე შეცდომაა, მეუბნებიან, არ შეიძლება სათაურის ინფორმაციის შეცვლა - სათაურები. უკვე გაგზავნილი." სიტყვასიტყვით არა, მაგრამ ეს არის მთავარი.

პრობლემა იგივეა და მისი დაწერის სწორი გზაა:

$error = true; // იყო რაიმე შეცდომები?
თუ ($error) echo "მოხდა შეცდომა";
else header("მდებარეობა: ".$_SERVER["HTTP_REFERER"]); // გადამისამართება უკან
გასასვლელი;
?>

ასევე არის დახვეწილი შეცდომები:

header ("მდებარეობა: ".$_SERVER["HTTP_REFERER"]); // გადამისამართება უკან
გასასვლელი;
?>

შეცდომა ამ კოდში ხდება სივრცის გამო, რომელიც ადრეა . სივრცე ნორმალური ხასიათია და საპასუხო სხეულის ნაწილია. და როდესაც სერვერი ხედავს მას, ის ასკვნის, რომ აღარ იქნება სათაურები და დროა გამოვიტანოთ სხეული.

ასევე არის შემდეგი შეცდომები, რომლებიც იგივე ხასიათისაა. ვთქვათ, არის ფაილი a.html:

მოთხოვნა_ერთხელ "a.html";
header ("მდებარეობა: ".$_SERVER["HTTP_REFERER"]); // გადამისამართება უკან
გასასვლელი;
?>

და ადამიანს გულწრფელად უკვირს, საიდან გაჩნდა შეცდომა, თუ მან არაფერი გამოაქვეყნა? ამიტომ, თქვენ არ გჭირდებათ კონკრეტულად ყურება 1 ფაილი და ყველა ფაილი, რომელიც მასში შედის. და მათში, რომლებიც დაკავშირებულია დაკავშირებულებთან, თქვენ ასევე უნდა გამოიყურებოდეს ისე, რომ არ იყოს გამომავალი.

და ბოლო წერტილი, მაგრამ უფრო რთული. გამოდის, რომ ზოგჯერ ეს შეცდომა ხდება სწორი კოდითაც კი. მაშინ ეს არის ის ეს კოდირების საკითხია. დარწმუნდით, რომ ფაილის კოდირება არის " UTF-8 BOM-ის გარეშე"და ზუსტად" BOM-ის გარეშე"არა მხოლოდ" UTF-8„იმიტომ 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++ შესანიშნავად უმკლავდება ამ ამოცანას.

ამ ქმედებებისა და სერვერზე ფაილების განახლების შემდეგ შეტყობინება უნდა გაქრეს და საიტი ჩვეულებრივად იმუშავებს.

ამ შეცდომის გამოსწორება ადვილია.
ხშირად ერთი და იგივე შეტყობინება ჩნდება სესიების დასაწყისში, ოდნავ განსხვავებული ფორმულირებით:
გაფრთხილება: სესიის ქუქი-ფაილის გაგზავნა შეუძლებელია - სათაურები უკვე გაგზავნილია
გაფრთხილება: სესიის ქეშის შემზღუდველის გაგზავნა შეუძლებელია - სათაურები უკვე გაგზავნილია

ბაიტის ორდერის ნიშანი
ხანდახან ყველაფერს ამოწმებ და იქ არაფერია. რედაქტორის შეცვლა. იხილეთ თქვენი ფაილი სხვა პროგრამაში. მაგალითად, Windows Notepad, როდესაც იყენებთ Unicode კოდირებას, ამატებს ბაიტის რიგის ნიშნის სერვისის სიმბოლოს თქვენი ფაილის დასაწყისში, არავითარი ინფორმირების გარეშე. გახსენით სკრიპტი სხვა რედაქტორში და წაშალეთ ნებისმიერი ზედმეტი სიმბოლო. და შეცვალეთ Notepad სხვა რედაქტორზე.
ან შეინახეთ UTF-8 კოდირებით BOM-ის გარეშე

ფორუმზე მრავალი კითხვა მაიძულებს აქ გავაკეთო მნიშვნელოვანი შენიშვნა:
ეს შეცდომა არ ჩანს, რადგან „ზემოთ რაღაც წერია“ თქვენს სკრიპტში. და იქიდან გამომდინარე, რომ PHP აჩვენებს რაღაცას ბრაუზერში. ეს სულაც არ არის კოდი. ეს შეიძლება იყოს შეცდომის შეტყობინება. შეიძლება იყოს სივრცე ან HTML ტეგი. დიახ, დიახ. ყველაზე ნიჭიერებისთვის: ჩვენ ვსაუბრობთ ბრაუზერში გაგზავნილ ნებისმიერ პერსონაჟზე და არა მხოლოდ მათზე, რომლებსაც ბრაუზერი უჩვენებს გამოუცდელ მომხმარებელს. HTML გვერდებს აქვთ საწყისი ტექსტი. და სწორედ ეს არის PHP სკრიპტის მუშაობის შედეგი და არა ლამაზი ასოები ნახატებით, როგორც ძალიან დიდი ნაწილი ფიქრობს.

HTTP სათაურის და HTTP სათაურის ველების გაგება

HTTP სათაურებიმიაწოდეთ სასიცოცხლო ინფორმაცია, რომელიც საჭიროა HTTP ტრანზაქციის მეშვეობით გაგზავნისთვის http პროტოკოლი.

ზოგადი HTTP სათაურის ფორმატი შეიცავს ორწერტილით გამოყოფილ სახელს - მნიშვნელობის წყვილებს სათაურის ველში. სახელი-მნიშვნელობის წყვილის თითოეული მთავრდება კარის დაბრუნების (CR) და ხაზის მიწოდების (LF) სიმბოლოების თანმიმდევრობით. თითოეული სათაურის ბოლოს ცარიელი ველები მიუთითებს სათაურის დასასრულს.

სათაურის საერთო ფორმატი, რომელსაც მოჰყვება აპლიკაციები, ასე გამოიყურება:

HTTP სათაურების ტიპები

არსებობს ოთხი ტიპის HTTP შეტყობინების სათაურები. ისინი არიან:

  • გენერალური სათაური
  • მოთხოვნის სათაური
  • პასუხის სათაური
  • ერთეულის სათაური

გენერალური სათაური

ზოგადი სათაურის ველებს აქვთ საერთო გამოყენებადობა მოთხოვნისა და პასუხების შეტყობინებებში. სათაურის ველები ვრცელდება მხოლოდ გადაცემულ შეტყობინებაზე და არ ვრცელდება გადაცემულ ერთეულზე.

ზოგადი სათაურის სტრუქტურა ასე გამოიყურება:

ქეშ-კონტროლიველი განსაზღვრავს დირექტივებს, რომლებიც უნდა დაიცვას ყველა ქეშირების მექანიზმმა მოთხოვნისა და პასუხის სისტემაზე.

კავშირიველი საშუალებას აძლევს გამგზავნს, დააკონკრეტოს კავშირისთვის საჭირო ვარიანტები. კავშირის სათაურს აქვს შემდეგი ფორმატი:

თარიღიველი წარმოადგენს თარიღსა და დროს შეტყობინების დაწყებისას. HTTP-ში მითითებული თარიღის ფორმატი ასე გამოიყურება:

პრაგმაველი ეხმარება შეიცავდეს იმპლემენტაციის სპეციფიკურ დირექტივას, რომელიც გამოიყენება ნებისმიერი მიმღებისთვის მოთხოვნისა და რეაგირების სისტემაზე.

თრეილერიველის მნიშვნელობა განსაზღვრავს, არის თუ არა სათაურის ველების ნაკრები შეტყობინების თრეილერში კოდირებული ნაწილის გადაცემის კოდირებით.

გადაცემა-კოდირებაველი მიუთითებს, არის თუ არა რაიმე ტიპის ტრანსფორმაცია გამოყენებული შეტყობინების სხეულზე.

განახლებაველი საშუალებას აძლევს კლიენტებს მიუთითონ დამატებითი მხარდაჭერილი საკომუნიკაციო პროტოკოლები. ის ასევე საშუალებას აძლევს სერვერს შეცვალოს პროტოკოლები დამატებითი პროტოკოლებით.

მეშვეობითველი არის სავალდებულო ველები, რომლებსაც იყენებენ პროქსიები და კარიბჭეები, რომლებიც მიუთითებენ შუალედურ პროტოკოლებზე. ის ასევე მიუთითებს მოთხოვნის მიმღებს მომხმარებლის აგენტსა და სერვერს შორის და პასუხს სერვერსა და კლიენტს შორის.

გაფრთხილებაველი შეიცავს დამატებით ინფორმაციას შეტყობინებების სტატუსზე და შეტყობინებების ტრანსფორმაციების შესახებ, რომლებიც არ არის ასახული შეტყობინებაში.

გამაფრთხილებელი სათაურები ჩვეულებრივ იგზავნება პასუხებით.

მოთხოვნის სათაურის ველი საშუალებას აძლევს კლიენტებს დამატებით გადასცენ მოთხოვნის ინფორმაცია და კლიენტის ინფორმაცია სერვერს.

მოთხოვნის სათაურის სტრუქტურა ასე გამოიყურება:

მიღებაველი განსაზღვრავს მედიის ტიპებს, რომლებიც მისაღებია პასუხისთვის.

"*" გამოიყენება მედიის ტიპების დიაპაზონში დასაჯგუფებლად

"*/*" მიუთითებს მედიის ყველა ტიპზე

"type/*" მიუთითებს ტიპის ყველა ქვეტიპს

Accept-Charsetველი მიუთითებს მისაღები სიმბოლოების კომპლექტს. ის აძლევს კლიენტებს შესაძლებლობას გაიგონ სპეციალური დანიშნულების სიმბოლოების ნაკრები, რათა სერვერს მიაწოდოს სიგნალი, რომ წარმოადგინოს დოკუმენტი ამ სიმბოლოების ნაკრებებში.

მიღება-დაშიფვრაველი მსგავსია Accept-ის, ზღუდავს პასუხის მისაღები შინაარსის კოდირებას.

Accept-Languageველი მსგავსია Accept-ის, ზღუდავს ბუნებრივი ენების სასურველ კომპლექტს.

ავტორიზაციაველი განკუთვნილია მომხმარებლის აგენტებისთვის, რომელთაც სურთ სერვერთან ავთენტიფიკაცია.

მოელოდეველი მიუთითებს კლიენტის მიერ მოთხოვნილ სერვერის ქცევებზე.

დანველი შეიცავს მომხმარებლის ელფოსტის მისამართს, რომელიც აკონტროლებს მომთხოვნი მომხმარებლის აგენტს.

მასპინძელიველში მითითებულია ინტერნეტ ჰოსტი და მოთხოვნილი რესურსის პორტის ნომერი მომხმარებლის URI-დან.

თუ-მატჩიველი გამოიყენება პირობითი მეთოდების შესაქმნელად.

თუ-მოდიფიცირებული-მას შემდეგველი გამოიყენება პირობითი მეთოდის შესაქმნელად. თუ მოთხოვნილი ვარიანტი არ შეიცვლება მითითებულ დროში, ერთეული არ დაბრუნდება სერვერიდან.

თუ-არა-შემთხვევაველი საშუალებას იძლევა ქეში ინფორმაციის ეფექტური განახლება მინიმალური ტრანზაქციის ზედნადებით.

თუ-დიაპაზონიველი საშუალებას აძლევს კლიენტებს მიიღონ დაკარგული ერთეულის ნაწილი ან სხვაგვარად, კლიენტებს შეუძლიათ მოითხოვონ მთელი ახალი ერთეულის გაგზავნა.

თუ-უმოდიფიცირებული-მას შემდეგველი საშუალებას აძლევს სერვერს შეასრულოს მოთხოვნილი ოპერაცია, თუ ის არ შეცვლილა ამ ველში მითითებული დროის შემდეგ.

მაქს ფორვარდებიველი უზრუნველყოფს მექანიზმებს TRACE და OPTIONS მეთოდებით, რათა შეზღუდოს მოთხოვნის გადამისამართების პროქსი ან კარიბჭე.

პროქსის ავტორიზაციაველი საშუალებას აძლევს კლიენტს ამოიცნოს უსაფრთხო პროქსი.

დიაპაზონიველი განსაზღვრავს HTTP ერთეულებს HTTP შეტყობინებებში, რომლებიც წარმოდგენილია ბაიტების თანმიმდევრობით. HTTP მოძიების მოთხოვნა ითხოვს ერთეულის ერთ ან მეტ ქვე დიაპაზონს GET მეთოდების გამოყენებით.

რეფერენტიველი საშუალებას აძლევს კლიენტებს მიუთითონ რესურსის მისამართი URI, საიდანაც მოიძებნება Request-URI.

თ.ე.ველი მიუთითებს გაფართოების გადაცემის კოდირებაზე, რომელსაც შეუძლია მიიღოს პასუხში. გარდა ამისა, ის მიუთითებს, მიიღებს თუ არა თრეილერის ველებს ნაწილაკების გადაცემის კოდირებაში.

მომხმარებელი-აგენტიველი შეიცავს ინფორმაციას მომთხოვნი მომხმარებლის აგენტის შესახებ.

HTTP პასუხის სათაური

პასუხის სათაურის ველი საშუალებას აძლევს სერვერს გადასცეს დამატებითი ინფორმაცია პასუხების მეშვეობით, გარდა მარტივი Status-Line პასუხისა.

პასუხის სათაურის სტრუქტურა ასე გამოიყურება:

მიღება-დიაპაზონებიველი საშუალებას აძლევს სერვერებს მიუთითონ რესურსების დიაპაზონის მოთხოვნების მიღება.

ასაკიველი მიუთითებს გამომგზავნზე სერვერის პასუხის გაცემის დღიდან.

ETagველი უზრუნველყოფს მოთხოვნისთვის ერთეულის ტეგის მიმდინარე მნიშვნელობას.

მდებარეობაველი გადამისამართებს მიმღებებს Request-URI-ის გარდა სხვა ადგილებში, რათა დასრულდეს ახალი რესურსის იდენტიფიკაცია.

პროქსი-ავთენტიფიკაციაველი არის სავალდებულო ჩართვა პროქსის ავთენტიფიკაციის პასუხისთვის.

ხელახლა ცდა-შემდეგველი გამოიყენება პასუხად, როდესაც სერვისი მიუწვდომელია, რათა მიუთითებდეს იმ პერიოდის ხანგრძლივობის შესახებ, რომლის განმავლობაშიც სერვისი მიუწვდომელი დარჩება კლიენტისთვის.

სერვერიველი შეიცავს ინფორმაციას პროგრამული უზრუნველყოფის შესახებ, რომელსაც სერვერი იყენებს მოთხოვნების დასამუშავებლად.

ცვალებადიველი მიუთითებს მოთხოვნის ველს, რომელიც განსაზღვრავს, არის თუ არა ქეში უფლება გამოიყენოს მოთხოვნის პასუხი პასუხის ხელახალი გადამოწმების გარეშე.

WWW-ავთენტიფიკაციაველი გამოიყენება, როდესაც საპასუხო შეტყობინება არაავტორიზებულია.

ერთეულის სათაურის ველები განსაზღვრავს მეტ ინფორმაციას ერთეულის ორგანოს ან მოთხოვნილი რესურსის შესახებ. ერთეულის სათაურის ფორმატი ასე გამოიყურება:

დაშვებაველების სია მეთოდების ნაკრები, რომელსაც მხარს უჭერს Request-URI იდენტიფიცირებული რესურსები.

შიგთავსის კოდირებაველი გამოიყენება როგორც მედიის ტიპის მოდიფიკატორი.

შინაარსი-ენაველი აღწერს ბუნებრივ ენას ერთეულის კლიენტებისთვის.

შინაარსი-სიგრძეველი მიუთითებს ათწილადი რიცხვით წარმოდგენილი ერთეულის ზომაზე.

შინაარსი - მდებარეობაველი უზრუნველყოფს რესურსის მდებარეობას ერთეულისთვის, როდესაც ის ხელმისაწვდომია მოთხოვნილი-URI-ის გარდა სხვა მდებარეობიდან.

შინაარსი-MD5ველი უზრუნველყოფს შეტყობინების მთლიანობის შემოწმებას (MIC) MD5 დაიჯესტის გამოყენებით ერთეულზე.

შინაარსი-დიაპაზონიველი განსაზღვრავს, სად უნდა იყოს გამოყენებული სრული ერთეულის ნაწილი.

შინაარსი-ტიპიველი მიუთითებს, ეგზავნება თუ არა ერთეულის ორგანოს მედიის ტიპი მიმღებს, თუ GET მეთოდი გამოიყენება მოთხოვნების გასაგზავნად.

იწურებაველი შეიცავს თარიღს/დროს, რომლის შემდეგაც პასუხი ძველდება.

ბოლო შეცვლილიაველში მითითებულია ვარიანტის ბოლო მოდიფიკაციის თარიღი და დრო.

თანმიმდევრობა, რომლითაც ველის სახელი გამოჩნდება სათაურში მიღებისას, უმნიშვნელოა. ჩვეულებრივ, ზოგადი სათაურები მოთავსებულია პირველ რიგში, შემდეგ მოთხოვნის ან პასუხის სათაური ბოლოში ერთეულის სათაურით.

შენიშვნა საავტორო უფლებების შესახებ: გთხოვთ, არ დააკოპიროთ ან თარგმნოთ ეს სტატია საიტის წინასწარი წერილობითი ნებართვის გარეშე

HTTP Debugger არის პროქსის გარეშე HTTP ანალიზატორი დეველოპერებისთვის, რომელიც უზრუნველყოფს HTTP სათაურების, ქუქიების, POST პარამეტრების, HTTP შინაარსისა და CORS სათაურების აღბეჭდვისა და ანალიზის შესაძლებლობას ნებისმიერი ბრაუზერის ან დესკტოპის აპლიკაციიდან.



. ოლეგ შეინის კომპიუტერული კლუბი.

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: