2010-12-04 3 views
1

Ich habe ein PHP-Skript, das eine XML-Datei für einen Ajax-Aufruf generieren soll. Es erzeugt diese Fehlermeldung:PHP-Fehler "Header bereits gesetzt" in Zeile 1 des Skripts

Warnung: Headerinformationen nicht geändert werden können - Header bereits von (Ausgabe gestartet unter /home/ocp/public_html/sites/all/modules/bookDisplay/getVersions.php:1) in/home gesendet /ocp/public_html/sites/all/modules/bookDisplay/getVersions.php on line 2

das merkwürdige ist, dass der Start des pHP-Skript sieht wie folgt aus: es gibt nirgendwo auf der Leitung So

<?php 
    header('content-type:application/xml;charset=utf-8'); 

1 für jeden Header gesendet werden, bevor ich versuche, sie erneut in Zeile 2 zu senden! Alle Diskussionen, die ich über ähnliche Probleme gefunden habe, sprechen über zusätzliche Leerräume, aber ich habe überprüft und dreifach überprüft, und es gibt keine zusätzlichen Zeilen oder Leerzeichen.

ist das Skript von einer Jquery Ajax() Funktion aufgerufen, die wie folgt aussieht: irgendwie Senden Header, die im Widerspruch zu den gesendeten Header in der PHP-Datei

function getVersions(){ 
    var bookSelected = $.data(document.body, 'book'); 
    $.ajax({ 
    cache:"false", 
    type: "GET", 
    dataType: "xml", 
    url: "sites/all/modules/bookDisplay/getVersions.php", 
    data: "book=" + bookSelected, 
    success:function(xml){ 

    } 
    }); 
} 

Ist die Jquery-Funktion? Ich habe versucht, die "dataType" -Deklaration zu entfernen, und das wird die Fehlermeldung los. Aber dann kommt die Antwort als text/html zurück, nicht als xml. Wie kann ich eine richtige XML-Antwort auf den Ajax-Aufruf erhalten, ohne dass der Fehler "Header bereits gesendet" ist?

+0

Überprüfen Sie, ob vor dem '

+0

Haben Sie sich die Codierung der Datei angesehen? Es ist möglich, dass die Header gesendet werden. – Ikke

+0

möglich Duplikat von [PHP-Skript kann keine Header senden, da Header bereits gesendet wurden, aber Zeichen außerhalb des Skripts sind] (http://stackoverflow.com/questions/920330/php-script-cant-send-headers-because -headers-have-already-sent-but-are-cha) – mario

Antwort

6

Beachten Sie, dass Header gesendet werden sollten vor alles andere. Stellen Sie sicher, dass es keinen Code/html oder gar Leerzeichen/Einrückung vor der Header-Funktion gibt und dass nichts vor dem ersten öffnenden php-Tag <?php sowie dem End-Tag ?> steht.

Beachten Sie auch BOM (Byte Order Mark) da möglicherweise dort möglicherweise vorhanden sein.

+1

+1, wahrscheinlich BOM, gegeben den Code, den er oben gibt. –

+0

Danke, ich habe niemanden gesehen, der andeutet, dass es eine Stückliste geben könnte. Wie kann ich sagen, ob es da ist? – monotasker

+0

@Ian: Sie können für die Zeichen in Wikipedia-Artikel Darstellungen von Byte-Reihenfolge Marken durch Codierung unter Darstellung Spalte überprüfen. Oder durchsuchen Sie SO nach BOM :) – Sarfraz

Verwandte Themen