Malzeme Listesinin nasıl bulunacağı ve bunlarla nasıl mücadele edileceği, WordPress'te kötü bir hatadır. Http başlıkları nelerdir. Genel teori Çirkin bilgi başlıkları

  • 29.06.2020

Bugün mesajın ne anlama geldiği hakkında konuşmaya karar verdik. "Uyarı: Başlık bilgisi değiştirilemiyor - tarafından gönderilen başlıklar (çıktı / home / ..." konumunda başlatıldı ana içeriği yerine site sayfasında görünen.
Görünüşe göre, ağ bu konuda yeterince yazdı, ancak tüm bunların ne anlama geldiği ve ondan nasıl kurtulacağına dair genel bir talimat yok.
Bu sorunla bizzat karşılaştığımız için bu konuyla ilgili devasa bilgi denizine birkaç damla eklemeye karar verdik.

Bir süre önce, birkaç müşteri sitesinin bir barındırmadan diğerine transferini gerçekleştirdik.
Her şey yolunda gitti, siteler müsaitti ama yöneticiye gitmeye çalıştığımda. panel, kullanıcı adı ve şifreyi girdikten sonra kontrol paneli yerine beyaz bir sayfa çıktı.
Diğer sitelerde kontrol edildi - aynı şey.
Olası nedenleri bulmak için hataların görüntülenmesini açtık.
Bunu yapmak için, sitenin kökünde bulunan .htaccess dosyasını düzenlemek için FTP kullanmanız ve buna satırı eklemeniz gerekir:

Php_flag display_errors açık

Bundan sonra, yönetici paneline girerken, “Uyarı: Başlık bilgisi değiştirilemiyor - başlıklar /home/.../functions.php:1552'de zaten gönderilmiş (çıkış başlatıldı /home/.../functions.php:1552) gibi birkaç mesaj belirdi. public_html /wp-login.php 362 satırında ", vb.

Aramalar sonucunda, bu mesajın başlık bilgilerinin (onlarla ilgili bilgiler) daha önce gönderildiği için başlık bilgilerinin değiştirilemeyeceğini bildirdiği bilgisi bulundu ve daha sonra parantez içinde hangi satırlarda hangi dosyalarda taşındığı belirtildi. dışarı.


Başlıklar (Başlıklar) Sitenin bulunduğu sunucunun hizmet bilgisidir. Tarayıcı sitenin içeriğini görüntülemeden önce, sunucudan çeşitli verilerin belirtildiği başlıklar alır: sayfa önbelleğe almanın etkin olup olmadığı, kodlaması, sayfa içerik türü ve diğerleri. Bir sitenin içerik yönetim sistemlerinde başlıklar, sistemin çeşitli dosyalarında yer alan işlevlerle oluşturulur.
Gerekli koşul- Başlıklar, sayfanın ana içeriğinden (içeriğinden) önce gönderilmelidir.


Sitenin içeriği başlıklardan önce iletilirse, "Uyarı: Başlık bilgileri değiştirilemiyor - başlıklar zaten tarafından gönderildi ..." mesajıyla uyarıldığımız bir durum ortaya çıkar.

Bu hangi durumlarda ortaya çıkabilir? Daha önce de belirtildiği gibi, modern CMS'de başlıklar bir veya daha fazla işlevin sonucudur. İşlevin kendisi, ilk işlev arasına alınmış bir kod parçasıdır. ve son ?> etiketler.

Bu etiketlerin dışındaki her şey sayfa içeriği olarak kabul edilir.
Bu nedenle, sayfanın başında gönderilen başlıklarla sonuçlanan işlevler varsa ve "Uyarı: Başlık bilgisi değiştirilemiyor ..." mesajını alırsak, sayfanın içeriğiyle ilgili bazı bilgilerin olduğu ortaya çıkıyor. başlıklardan önce sunucudan gönderilir ...

Bu bilgi nedir ve nasıl bulunur. Çoğu zaman bunlar boşluklar ve boş satırlardır.

Bir boşluk veya boş bir satır, sayfanın ana içeriğinde karakter olarak yorumlanır, bu nedenle ana içeriğin bir kısmının başlıklardan önce olduğu ve önce tarayıcıya gönderildiği ortaya çıkar.

"Uyarı: Başlık bilgisi değiştirilemiyor ..." mesajlarında belirtilen dosyaları yerel bilgisayarınıza indirmeniz, bunları bir kod düzenleyicide açmanız (NotePad ++ kullanıyorum) ve boş satır ve boşlukları dikkatlice kontrol etmeniz gerekir:

Ancak, bir çözüm bulma süresini önemli ölçüde artırabilecek önemli bir özellik vardır.
Dosya boş satırlar ve boşluklar içermeyebilir, ancak UTF-8 kodlamasında kaydedilmişse, dosyanın oluşturulduğu düzenleyici tarafından belgenin en başına yabancı bir karakter eklenebilir. Bu karakter, düzenleyicide hiç görüntülenmeyebilecek, ancak sunucuda ana içerik olarak algılanacak ve başlıklardan önce görüntülenecek olan sıfır genişlikli boşluğa eşit bir UTF-8 tanımlayıcısıdır.

Bu tanımlayıcıdan kurtulmak için indirilen dosyaları formatta yeniden kaydetmeniz gerekir. BOM'suz UTF-8(BOM olmadan UTF-8).

NotePad ++ bu görevle mükemmel bir iş çıkarır.

Bu işlemlerden ve sunucudaki dosyaların güncellenmesinden sonra mesaj kaybolmalı ve site her zamanki gibi çalışacaktır.

Bu hata ile sürekli benimle iletişime geçip soruyorlar: " Hata nerede?". Her zaman bir yerden böyle mektuplar aldım. 500 , Az değil. "" Hatasıyla bitirmenin zamanı geldi. Bu yazımda sizlere bu hatanın nedenlerini ve nasıl çözüleceğini anlatacağım.

Bu hatayı Rusça'ya çevirirseniz, aşağıdakine benzer bir şey alırsınız: " Zaten gönderilmiş oldukları için başlık değiştirilemiyor". Bu ne." manşetler"? Hadi çözelim.

Sunucu, gövdenin yanı sıra istemciye bir yanıt döndürdüğünde (örneğin, HTML Kodu sayfalar), başlıklar da vardır. Sunucu yanıt kodunu içerirler, kurabiye, kodlama ve diğer birçok hizmet parametresi. Yapabilmek PHP betiği başlık gönder? Elbette olabilir. Bunun için bir fonksiyon var başlık ().

Bu işlev, örneğin, ne zaman sürekli kullanılır. Ayrıca, bu işlev ne zaman düzenli olarak kullanılır.

Ayrıca başlıklar gönderildiğinde değiştirilir kurabiye ve oturumun başında (işlev oturum_başlangıç ​​()).

Ve şimdi hatanın neden hala oluştuğu hakkında? Sunucu her zaman önce üstbilgileri sunucuya sonra da gövdeye gönderir. Sunucu zaten üstbilgileri döndürdüyse, gövde gitti ve ardından bazı sorunlarla karşılaşır. oturum_başlangıç ​​()... Müstakbel programcının gövde başlamadan önce başlıkları göndermeyi unuttuğu ve şimdi zaten ayrılmış olan trene yetişmek istediği ortaya çıktı.

İşte "" hatası olan kod:



?>

Tabii ki, böyle saçmalık PHP affetmez. Ve şöyle yazmak zorunda kaldım:

oturum_başlangıç(); // Oturumu başlatalım
?>

Bu komut dosyası artık herhangi bir hataya neden olmaz, çünkü önce tüm başlıklar gönderilir ve ancak o zaman sunucu yanıtının gövdesi oluşturulur.

Başka bir hata kodu örneği:

yankı "Merhaba!"; // Bir şey çıktısı
oturum_başlangıç(); // Oturumu başlatalım
?>

Aynı şey, nedense, önce gövde (veya bir parçası) görüntülenir ve ardından başlıkları da değiştirmemiz gerektiğini hatırladık.

Bu kodu nasıl yeniden yazacağınızı kendiniz düşünün.

Başka bir örnek:




çıkış;
?>

Böyle bir kodun yazarı başarısız olduğunda, bu hataya şaşırır ve şöyle der: "Bu çok garip bir tesadüf, işlem başarılı olduğunda her şey yolunda ve bir hata olduğunda, bana Üstbilgi bilgilerini değiştirilemiyor - başlıklar zaten gönderildi." Kelimenin tam anlamıyla değil, ama mesele bu.

Sorun aynı ve şöyle yazmak doğru:

$ hata = doğru; // Herhangi bir hata var mı?
if ($ error) echo "Bir hata oluştu";
else başlığı ("Konum:". $ _ SERVER ["HTTP_REFERER"]); // Geri yönlendir
çıkış;
?>

İnce hatalar da var:

başlık ("Konum:". $ _ SUNUCU ["HTTP_REFERER"]); // Geri yönlendir
çıkış;
?>

Bu koddaki hata boşluk nedeniyle oluşuyor hangisi daha önce mevcut ... Boşluk normal bir karakterdir ve yanıt gövdesinin bir parçasıdır. Ve sunucu bunu gördüğünde, daha fazla başlık olmayacağı ve gövdeyi gösterme zamanının geldiği sonucuna varır.

Aynı nitelikte aşağıdaki hatalar da vardır. Diyelim ki bir dosya var a.html:

require_once "a.html";
başlık ("Konum:". $ _ SUNUCU ["HTTP_REFERER"]); // Geri yönlendir
çıkış;
?>

Ve kişi içtenlikle şaşırır, hiçbir şey çıkarmadıysa hata nereden geliyor? Bu nedenle, özellikle bakmamanız gerekir 1 dosya ve içindeki tüm dosyalar. Ve bağlı olanlarda, çıkış olmaması için de bakmanız gerekir.

Ve son nokta, ama daha zor. Bazen bu hatanın doğru kodla bile ortaya çıktığı ortaya çıkıyor. Sonra hepsi bu kodlama ile ilgili... Dosya kodlamasının " BOM'suz UTF-8"ve tam olarak bu" malzeme listesi olmadan"ve sadece" UTF-8". malzeme listesi dosyanın en başındaki baytlardır ve çıktılardır.

Ortaya çıkan tüm sorunları ele almaya çalıştığım için, bu makalenin "" hatasıyla ilgili tüm sorunları kesinlikle çözmeye yardımcı olacağını umuyorum. Ve sonra başınızı çevirmeniz ve kodunuzda yanlış olan ne olduğunu düşünmeniz gerekiyor.

Bu yazıda, "Başlıklar değiştirilemiyor - çünkü zaten gönderildiler" hatasının ana nedenlerine ve çözümlerine bakacağız. ("Başlık bilgileri değiştirilemiyor - tarafından zaten gönderilen başlıklar").

Bu hata ne anlama geliyor?

Hatanın nedenlerini anlamak için önce bu "başlıkların" ne olduğunu anlamalısınız.

Teorinin derinliklerine girmeyelim. Diyelim ki herhangi bir kullanıcı bir web sayfasını açmadan önce, kendisine kodlamayı, sitenin dilini, sunucu hakkındaki verileri ve diğer hizmet bilgilerini içeren bu "başlıklar" gönderilir. Ayrıca çerezlerin ve oturumun da başlıklarda gönderildiğini ayrıca eklemekte fayda var.

Bu hataya hangi komutlar neden oluyor?

Hata "Başlık bilgileri değiştirilemiyor - üstbilgiler tarafından zaten gönderildi"üstbilgi, setcookie ve çerez veya oturum davranışıyla ilgili diğerleri gibi PHP komutlarını çağırabilir.

Hatanın nedenleri ve çözümleri.

En yaygın hata deneyim eksikliğinden kaynaklanmaktadır. Sayfanın kendisi yüklenmeye başlamadan önce başlıkların gönderildiğini zaten anladık.

Ancak programcılar, özellikle yeni başlayanlar, bunu ya unuturlar ya da bilmezler. Ve önce sayfada bir şey görüntülemeye çalışırlar - çoğunlukla yankı komutunu kullanırlar ve ardından çerezleri ayarlarlar, başlıklar gönderirler, vb. Hangi tam olarak bu hataya yol açar.

İşte böyle bir hataya neden olacak bir örnek kod:

Ve işte doğru olanı:

Yani, her şeyden önce, başlıkları göndermeden önce hiçbir şey çıkaramazsınız!

Bu her zaman açık değildir, ancak küçük bir farkla bir hata vardır. Bu, php belgenizin boşluklarla veya boş satırlarla başladığı zamandır; bu, bu satırların tarayıcısındaki çıktıyı ima eder.

Bunu takip etmek çok zor olabilir, çünkü örneğin Windows blok zinciri, bizi uyarmadan ve hatta bu sembolü göstermeden başlangıçta bir Bayt Sırası İşareti ekleyebilir. Bu durumda, belgeyi diğer editörlerle açıp kontrol etmeye değer.

Başlıkların yanlış atanmasına ilişkin bir örnek:

Yani, ikincisi, daha önce

Özellikle include komutunu kullanırsanız dikkatli olmalısınız, aslında tüm dosyaları birleştirir ve bir tane sonuç çıkarırsa ve önce site başlığını (kaydırıcı, menü vb.) ana dosya, o zaman elbette bu hatayı alacaksınız.

İşte böyle bir yanlış kod örneği:

Tarafından Perş, 05/04/2017 - 12:55 tarihinde eklendi

Belirli bir sorunun açıklaması

Düğmeye tıkladıktan sonra bir hata görüntülenir:

Uyarı: Başlık bilgisi değiştirilemiyor - 12. satırda C: \ OpenServer \ domains \ testsite \ WEB \ 5_phpRedirect.php'de (çıkış C: \ OpenServer \ domains \ testsite \ WEB \ 5_phpRedirect.php: 10'da başlatıldı) tarafından zaten gönderilen başlıklar

Kod, bu konuda verilen koda benzer:

deneysel ağ

İndirmek için bir komut dosyası seçin



İşleyici komut dosyası:



Ne zaman oldu

Hata (uyarı):

Uyarı: Başlık bilgileri değiştirilemiyor - tarafından gönderilen başlıklar

Tarayıcı başlıklarının yüklenmesini gerektiren bir şey yaptıysanız ve şimdi bunların üzerine yenilerini yazmak istiyorsanız bu durum oluşur. Örneğin, metni zaten görüntülediyseniz, php başlıkları (özellikle üstbilgiyi) ayarlar. Konum- bu, müşterinin tarayıcısına (yanıtında) nasıl davranacağını göstermek için istenen sayfada kalıp kalmayacağınızı veya başka bir sayfaya gidip zaten oradaki isteğe bir yanıt almanız gerekip gerekmediğini gösterir.

sorunun kökü

Büyük olasılıkla, sizin durumunuzdaki sorun, zaten içerik sunuyor olmanızdır (dosyada komut dosyasıyla karıştırılmış html etiketleri) önce komutlar:

Yankı başlığı ($ yönlendirmesi);

Başlık () işlevinin yalnızca istemci, henüz hiçbir veri iletilmedi... Yani çıktıda ilk sırada yer almalı, çağırmadan önce HTML etiketleri, boş satırlar vb. olmamalıdır. Oldukça sık, içerme veya gereklilik gibi dosya işlevleriyle kod okurken, bu kodda başlık () çağrılmadan önce görüntülenen boşluklar veya boş satırlarla karşılaşıldığında bir hata oluşur. Tek bir PHP/HTML dosyası kullanırken de aynı sorunlar ortaya çıkabilir.

Yani, komut dosyası işleyicisini html'den kurtarmak gerekir - sonuçta, aslında hiçbir şeyi göstermez, sadece onu başka bir adrese aktarır - bu ilk.

Başlık ($ yönlendirme);

Yankı başlığı ($ yönlendirmesi);

Deney

echo () aslında yazdığından beri http yanıt gövdesi, ve başlıklarda değil ve başlık void döndürür (yani, değerleri döndürmez), yukarıda belirtildiği gibi, o zaman echo () kullanmanın bir anlamı yoktur, ancak
- yine de, bir deney yapmayı öneriyorum:

  1. html'yi kaldır
  2. yankıyı kaldırma

Header() sizin için esasen echo()'dan önce çağrıldığından (başlık (), echo() için bir argüman olduğundan ve dolayısıyla geri döndüğünden - aynı zamanda işlevin null döndürüp döndürmediğini - bir işlev olarak yorumlanıp yorumlanmayacağını kontrol edeceğiz. boş dize veya (ne veya daha doğrusu) yankı, bir yönlendirme zaten gerçekleştiğinden çalışmaya bile başlamaz.

nedenini tekrar açıklayalım

Onlar. başlığı () çağırmadan önce hiçbir içerik görüntülenmemelidir(fonksiyon açıklaması hakkında yazılanlar: http://php.net/manual/ru/function.header ...)

  • 1) yankı kullanmamak
  • 2) html metninin tarayıcıya olağan şekilde boşaltılmasının yardımı ile değil.

Bizim durumumuzda, görünüşe göre, yankı hiçbir şeyi etkilemiyor, ancak işleyicideki html bile etkiliyor.

sorun çözüldü

Öneriniz üzerine HTML etiketleri kaldırıldı. Şimdi yeniden yönlendirme doğru bir şekilde gerçekleşir, işleyici komut dosyası şöyle görünür:

yankı işlevi performansı gerçekten etkilemez, yani. S. Holzner ile olduğu gibi bırakılabilir:

Ayrıca, bir yönlendirme kodunu biçimlendirirken, geçişin yapıldığı dosyanın uzantısına dikkat etmelisiniz: önerilen sözdizimi ile başlık argümanında belirtilmelidir.

  • Yorum göndermek için giriş yapın

Ama çalışmasını sağlayabilirsin ve

Ancak önceki işleyicinin de çalışmasını sağlayabilirsiniz.

Kullanıcı yönlendirmesi

seçeneği php.ini dosyasında ayarlarsanız

Çıktı_arabelleği = 4096

  • Yorum göndermek için giriş yapın

Başlıkları yeniden göndermek yasaktır, HTTP - protokol böyle çalışmaz! Ama o zaman ne yapabiliriz? Sayfada görüntüledikten sonra oturumu başlatmanız ve bir çerez ayarlamanız gerekiyorsa? - Çıktı tamponlamanın hatırlanması.

Yani, sıfır olmayan bir arabellek boyutu ayarlandığında, doluncaya kadar başlıkları değiştirmek için hala bir fırsat vardır. Arabellek boyutu sıfır ise, içerik görüntülendikten sonra hemen geri dönüşü öncesinde http yanıt başlıklarını istemciye iletmek.

Ve zaten ağ üzerinden "uçup giden" başlıkları istemciye değiştirmek istediğimiz ortaya çıktı (bu, onları düzeltmenin artık mümkün olmadığı anlamına gelir - özellikle başlık Konum, istenen sayfada kalmayı veya başka bir istekte bulunmayı belirtir - "yönlendirici" komut dosyasının yanıtı (bizim için bu bir form işleyicidir) sadece başka bir sayfa istememiz gerektiğini söyler), bu da php'nin bizi uyardığı şeydir. hakkında.

Fakat: tabi ki sorunu bu şekilde çözmek mümkün değil (çok doğru değil, daha doğrusu).

_____________
matfak vgu ve diğer klasikler =)

  • Yorum göndermek için giriş yapın

Bu hata mesajına genellikle PHP'ye yeni başlayan programcılar rastlar. Bu hatanın neden oluştuğunu anlamak, bir çözüm bulmanıza yardımcı olacaktır.

PHP, siz sormadan bile web sayfası oluşturma işlemlerinin çoğunu sizin için yapar. Bir web sayfasının iki bölümü vardır: bir başlık ve bir gövde.

Bu yaygın PHP hatası, bir programcı üstbilgilerin işlenmesinde veya oluşturulmasında hatalar yaptığında ortaya çıkar. İşte bir örnek:

Uyarı: Başlık bilgisi değiştirilemiyor - 12. satırda /home/usr1/public_html/includes/theme-header.php dosyasında (/home/usr1/public_html/sent.php:42 adresinden başlatılan çıktı) zaten gönderilen başlıklar

Genel olarak, otomatik olarak oluşturulduğu ve sayfa, sunucu ve çerez hakkında bilgiler içerdiği için başlık hakkında endişelenmenize gerek yoktur. Başlıktaki bilgiler önemlidir, ancak genellikle kullanıcı tarafından görülmez. İşte bazı örnekler:

Tarih: Pzt, 10 Tem 2006 18:51:59 GMT Sunucu: Apache / 2.2.0 (Unix) mod_ssl / 2.2.0 OpenSSL / 0.9.7g İçerik Kodlaması: gzip İçerik Türü: metin / html

Bazen programcılar bazı başlık değerlerini değiştirmek isterler. Örneğin, PHP XML çıktısı üretiyorsa, bunu belirtmek için İçerik Türü değiştirilmelidir. Başka bir yaygın örnek, bu makalede açıklandığı gibi, Konum üstbilgi öğesini kullanarak kullanıcının tarayıcısını başka bir web sayfasına yönlendirmektir.

Başlık, web sunucusundan gelen yanıtta önce gelmelidir ve gövdeden tek bir boş satırla ayrılmalıdır. Bu hatanın nedeni, başlık değerini ayarlamaya çalışmadan önce web sayfasının gövdesinin bir kısmının kullanıcıya gönderilmesidir. PHP sizin için birçok şeyi kolaylaştırdığından, sorun her zamanki yerde gizleniyor olabilir. Sorunu bulmak için bazı işaretçiler:

  1. Soruna neden olan başlık () ifadesini bulun. Hata bu satırda veya öncesinde olmalıdır.
  2. Bu başlık talimatından önce çıktıyı kullanıcıya yönlendirebilecek talimatları arayın. Bir veya daha fazlasını bulursanız, başlık ifadesini önlerine taşımak için kodu değiştirin. Karmaşık koşul cümleleri sorunu karmaşıklaştırabilir, ancak sorunu çözmeye de yardımcı olabilir. Alternatif olarak, PHP betiğinin üst kısmında, başlık değerini olabildiğince erken algılayan ve orada ayarlayan koşullu bir ifade kullanabilirsiniz.
  3. PHP başlangıç ​​ve bitiş etiketlerinin dışında boşluk olmadığından emin olun. Başlangıç ​​etiketinden önce boş satır iken
  4. Dosyanızı UTF-8 kodlamasında kaydediyorsanız, dosyanın imzasız (BOM olmadan) kaydedildiğinden emin olun. İmza, dosyanın başına eklenen bir bayttır ve eğer PHP betiği bu biçimde kaydedilirse, bu bayt sayfa gövdesinin çıktısının bir parçası olarak algılanır ve bu, sorundan kaçınmamıza izin verilmemelidir. Düşünüyor musun.



Bilgisayar yardım sitesi

© Telif hakkı 2021,
rzdoro.ru - Bilgisayar yardım sitesi

  • Kategoriler
  • Demir
  • Windows 10
  • Tarama
  • Windows 7
  • Demir
  • Windows 10
  • Tarama
  • Windows 7