PHP header () "çökmesini" diyoruz

2 Cevap php

PHP 5.2.9 kullanabilirsiniz.

Görmek için / log hataları, benim komut dosyası uzaklaştırmak var:

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
ini_set('log_errors', 'On');
ini_set('error_log', $_SERVER['DOCUMENT_ROOT'] . '/php.log');

Ama ben bir HTTP 500 hata benim komut dosyası sorunu, sonraki iki satır ilk, ve hiçbir şey (500 hatası hariç) gösterilir ve hiçbir şey benim php.log kaydedilir kullandığınızda. Ben bunun yerine birincinin ikinci satırını kullanırsanız, tüm Tamam ve 304 normal verilir.

header('Not Modified', true, 304); //Crash php with 500 error
header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified', true, 304); //Works OK
//In both case exit(); is called just after header().

Aren't these two lines equivalent (see link below)? Why the first version "crashes" my script?!

This is related to: http://stackoverflow.com/questions/2000092/header-use-in-php

Edit 1: Bu bulabilirim tek günlüğü:

'
69.70.84.xx - - [20/Jan/2010:15:54:06 -0600] "GET /framework2/ HTTP/1.1" 200 2968 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)"
69.70.84.xx - - [20/Jan/2010:15:54:08 -0600] "GET /foo/bar.js HTTP/1.1" 404 8642 "http://www.mydomain.com/framework2/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)"
69.70.84.xx - - [20/Jan/2010:15:54:10 -0600] "GET /framework2/ HTTP/1.1" 500 8511 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)"
69.70.84.xx - - [20/Jan/2010:15:54:11 -0600] "GET /framework/mydomain_ajax-dom.js HTTP/1.1" 304 - "http://www.mydomain.com/framework2/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)"
69.70.84.xx - - [20/Jan/2010:15:54:11 -0600] "GET /framework/templates/common/Reset.css HTTP/1.1" 304 - "http://www.mydomain.com/framework2/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)"
69.70.84.xx - - [20/Jan/2010:15:54:11 -0600] "GET /framework/templates/common/Error.css HTTP/1.1" 304 - "http://www.mydomain.com/framework2/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)"
69.70.84.xx - - [20/Jan/2010:15:54:11 -0600] "GET /framework/templates/common/Base.css HTTP/1.1" 304 - "http://www.mydomain.com/framework2/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)"
69.70.84.xx - - [20/Jan/2010:15:54:11 -0600] "GET /images/Error-48.png HTTP/1.1" 304 - "http://www.mydomain.com/framework2/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)"
'
  1. Hat 1 doğru bir şekilde sunulduğundan belgedir.
  2. Hat 2 emzik 404. Js belgemin üzerinde.
  3. Gerçek bir hata (benim komut çöküyor 304 başlık benim tarayıcı ve benim PHP konuda yenileme vurdu) meydana nerede hat 3.
  4. Satır 4, 5, 6, 7, 8 500 hata iletisi görüntüler (. Htaccess yoluyla) benim özel hata mesajı ile kaynaklanır.

Edit 2: Ben daha onlar hayır dedi oturum ama kendi tarafında onlar göremiyorum günlüklerine erişim erişim olsaydı sormak için Web ana destek temas. Benim hata oldu:

'backend: malformed header from script. Bad header=Not Modified: index.php'

Soruma geri ... Neden bazı bilgisayarlar üzerinde ilk sürümü çalışmıyor ve başkalarına Tamam gibi görünüyor (yukarıdaki bağlantıyı daha da kötü birisi ilk önce OK ikinci çöküyor ise diyor)?

2 Cevap

Hayır, bu satırları eşdeğer değildir. İlk geçersiz başlık satırı yazmak olacaktır. documentation to the header function diyor ki:

header() Ham bir HTTP başlığı göndermek için kullanılır.

Ve string parametresinin açıklaması:

İki özel çağrı biçimi vardır. İlk göndermek için HTTP durum kodu anlamaya kullanılacak dize "HTTP /" (harf önemli değildir) ile başlayan bir başlık olduğunu.

Senin durumunda değer Not Modified HTTP/ ile başlamaz ve böylece HTTP durum kodunu ayarlamak için tedavi değil, sadece normal bir header field. Bu forma sahip değil gibi ama bu geçersiz:

message-header = field-name ":" [ field-value ]

Ve bu ne hata günlük girdisi devletler bulunuyor. Not Modified geçerli bir ham HTTP başlık değildir.

Üçüncü parametre http_response_code iki header gibi aramaları önlemek için bir yönlendirme ayarını ise sadece durum kodu ayarlamak için:

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://example.com');

Bunun yerine sadece yazabilirsiniz:

header('Location: http://example.com', true, 301);

Eğer PHP hata günlüğü kazası hakkında daha fazla bilgi almak için, bu durumda, web sunucusu hata günlüğünü değil kontrol etmek isteyecektir.