php dosyasında sayfanın üst tarafından ne anlama geldiğini

3 Cevap php
  • i ob_start() sayfanın yerleri iyi olması gerektiğini okumuştum. oysa
  • yerde i session_start() sayfanın üstüne yerleştirilir gerektiğini okudum.
  • bir yerde i header() sayfanın üzerine yerleştirilmelidir okuyun.
  • bir yerde i okuma include() ya da require() sayfanın üzerine yerleştirilmelidir.

im üstüne ve orada yerleştirilir hangi sırayla yazılmalıdır ne bocalama? ve ne ile gelir on the top??? o

  • önce <html> veya
  • sonra <html> ya da daha önce <head> veya
  • sonra, <head>

Tüm bu fonksiyonun gerçek sırası ne olduğunu söyle lütfen

Biz () ob_end_flush koymak zorunda aynı şekilde gibi; ve diğer fonksiyon, <html> ya sonra sonra sayfanın alt kısmında </body> ve sayfanın altındaki geliyor fonksiyonların sırası nedir

3 Cevap

Eğer söz fonksiyonların operasyonların bazı temel anlayış olması gerekir size yazdım tabloların değerini anlamak için. Ben burada onları yıkmak için çalışacağım.

Let's start with session_start() and header() calls:
The first function does exactly what the name implies; it starts a session.

Nedeniyle HTTP protokolü vatansız doğası, sayfa istekleri arasında durumunu hatırlıyorum bazı mekanizmasına ihtiyaç vardır. Bu oturumları ile elde edilebilir. Oturumları, bazen bağlantıları oturum kimliği boyunca geçerek yayılır PHP ilk günlerinde (someurl?sessionId=someSessionHash), bu, günümüzde, kötü bir uygulama olarak kabul edilir olsa.

Günümüzde, seans ağırlıklı bir çerez ile takip edilmektedir (yaygın olarak kullanılan çok nerede ilk günlerinde, beni yanlış alamadım). Bu oturum çerezi (tarayıcınızı kapattıktan sonra onun içinde, o (Yukleme) basitçe sona ki, kanının aksine, sadece oturum kimliği ile normal bir çerez daha fazla bir şey değildir) Her sonra açılan her sayfa isteği ile tarayıcıya birlikte gönderilir . Bir çerez şöyle, (gerçek vücut öncesi anlamı) tepkinin bir başlık olarak gönderilir: yakalamak Ve burada:

// I've left out a lot of other headers for brevity
HTTP/1.x 200 OK
Date: Sun, 31 Jan 2010 09:37:35 GMT
Cookie: SESSION=DRwHHwAAACpes38Ql6LlhGr2t70df // here is your Cookie header

// after all response headers come the actual content: 
// the response body, for instance:
<html>
    <head>
    </head>
    <body>
    </body>
</html>

Şimdi, yanıt başlıkları tepki beden önce gönderilmesi gerekir, çünkü herhangi bir vücut içerik çıkışı önce session_start() ve header() için bir çağrı koymak gerekir. İşte nedenleri: çıktı session_start() veya header() için bir çağrı daha önce herhangi bir yanıt vücut içerik (bir boşluk karakteri gibi basit bir şey olabilir), PHP otomatik olarak çıkış yanıt başlıkları eğer. Bir HTTP yanıt yanıt başlıkları yanıt gövdesinde ilk önce gönderilen olması gerekir çünkü bu. Ve genellikle PHP rezil Warning: headers already sent uyarı yol açtığı tam olarak budur. Diğer bir deyişle; çok vücut veri göndermek zorunda kaldı, çünkü PHP, başlıklarını gönderdi kez, artık herhangi başlıkları eklemek olamaz.

Yani, şimdi, HTTP protokolü hakkında bu anlamak, Bunu önlemek için alabileceğiniz bazı ölçümler vardır. Biz sonraki fonksiyonu (ler) için geldiğim ve bu:

ob_start, ob_flush, etc...:
In a default setup PHP usualy outputs anything immediately. Therefor, if you output any response body content, headers are automatically sent first.
But PHP offers mechanisms of buffering output. This is the ob_* family of functions. With ob_start you tell PHP to start buffering. And with ob_flush you tell PHP to flush the buffer; in other words output the current content of the buffer to the standard output.

Eğer çıkış gövdesi verileri aldıktan sonra, bu tamponlama mekanizmaları ile hala bir çağrı ile, daha sonra çıkış olması için, aslında henüz gövdesi verileri gönderdiğiniz değil çünkü, sadece onu tamponlu var, yanıt başlıkları ekleyebilirsiniz {[(0) ]} veya ob_end_flush ve ne var.

Kullanarak ob_* fonksiyonlar genellikle bir kod kokusu daha fazla olduğunu, ama unutmayın. Diğer bir deyişle (o üstünde bazı şeyler yapmak için neden önemli olduğunu ve bu), o zaman kötü tasarım telafi etmek için kullanılır. Birileri bu header ve session dram aşmak için çıkış buffering'e onların düzgün işlemlerin sırasını ve tatil köyleri kurmak için unuttum.

Html ve / veya diğer vücut içeriğin çıkışının son gelmelidir neden tüm bunları söyledikten sonra, kolayca görebilirsiniz. Bunun dışında, ben kesinlikle yine çıktı koddan PHP kodlarını ayırmak için tavsiye. Çok daha okumak ve anlamak kolaydır çünkü. Ve bunu yaparken başlamak için iyi bir yoldur gerçek html ana <?php ?> kod bloğu sonra gelmek yaşıyor. Ancak diğer yollarla bu soruların kapsamı dışında olan, hem de vardır.

Ardından son olarak include ve require aramalarla ilgili. Php dosyaların üstünde bu var genellikle netleştirilmesi gereken ment. Bu bir yerde güzel bu çağrıları tutar. Ancak, unutmayın ki, çıktı tamponlama kullanmadan session_start() veya header() aramadan önce, yine bu dosyalar çıktı şeyden birini vidalı eğer.

"Sayfa Başı" herhangi bir çıkıştan önce gelir. "Sayfanın alt" tüm çıktı sonra gelir.

Bu sadece "öteki" "non PHP kodu" anlamına gelir başka bir karakter önce gelir.

<?php ve ?> tarayıcıya gönderilen değil, bu yüzden sayılmaz arasındaki tüm kod. <html> etiketini başlamadan önce nedenle genellikle "sayfasının üst" anlamına gelir. Bu etiketi (hatta PHP açılış etiketinden önce), daha önce boş bir satır ya da sadece tek bir boşluk varsa çıkış olarak sayar çünkü dikkatli olun.