Cannot modify header information

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Cannot modify header information

    Ich hab einen Problem mit diesem Fehler, welcher hier ja im angepinnten Thread ausgiebig besprochen wird.
    Allerdings wird dort gesagt, dass vorher weder durch HTML Tags noch durch echo eine Ausgabe stattgefunden haben darf.
    Ich hab allerdings schon Scripts geschrieben bei denen es trotzdem funktioniert.
    Fakt ist, ich habe einen Währungsumrechner programmiert und muss am ende die Seite aktualisieren, damit es den Wert in ein Feld einträgt.

    Komischerweise funktioniert das Script an sich tadellos und hat keine Fehler wenn es nicht in eine HTML Seite eingebunden ist.

    Da ich das komplette Eingabeformular vorher mit Echo ausgebe kommt es zu dem Fehler. Gibt es vielleicht einen anderen Weg die Seite zu aktualisieren. Oder wie sollte ich das ganze denn ohne vorherige Ausgabe bewerkstelligen.



    Der Code dafür ist hier: (Dieses Script funktioniert allein korrekt. Nur nach dem einbinden in eine Internetseite nicht mehr)

    PHP-Code:
    <?php

    $EUREUR 
    1.0000;
    $EURUSD 1.3336;
    $EURGBP 0.6788;
    $EURJPY 157.1600;
    $EURCHF 1.6231;
    $EURRUB 34.6701;
    $EURPLN 3.8677;
    $EURCNY 10.2822;
    $EURCZK 28.0200;
    $EURCZK 28.0200;
    $EURDKK 7.4508;

    $USDUSD 1.0000;
    $USDEUR 0.7499;
    $USDGBP 0.5093;
    $USDJPY 117.8700;
    $USDCHF 1.2171;
    $USDRUB 26.0080;
    $USDPLN 2.9002;
    $USDCNY 7.7171;
    $USDCZK 21.0225;
    $USDDKK 5.5883;

    $GBPGBP 1.0000;
    $GBPEUR 1.4709;
    $GBPUSD 1.9688;
    $GBPJPY 231.3500;
    $GBPCHF 2.3850;
    $GBPRUB 51.3210;
    $GBPPLN 5.6870;
    $GBPCNY 15.2090;
    $GBPCZK 41.0920;
    $GBPDKK 10.9609;

    $JPYJPY 1.0000;
    $JPYEUR 0.0064;
    $JPYUSD 0.0085;
    $JPYGBP 0.0043;
    $JPYCHF 0.01037;
    $JPYRUB 0.2224;
    $JPYPLN 0.0246;
    $JPYCNY 0.0658;
    $JPYCZK 0.1789;
    $JPYDKK 0.0474;

    $CHFCHF 1.0000;
    $CHFEUR 0.6167;
    $CHFUSD 0.8248;
    $CHFGBP 0.4188;
    $CHFJPY 96.9400;
    $CHFRUB 21.4028;
    $CHFPLN 2.3819;
    $CHFCNY 6.3641;
    $CHFCZK 17.2390;
    $CHFDKK 4.5941;

    $RUBRUB 1.0000;
    $RUBEUR 0.0288;
    $RUBUSD 0.0385;
    $RUBGBP 0.0196;
    $RUBJPY 4.5251;
    $RUBCHF 0.0467;
    $RUBPLN 0.1113;
    $RUBCNY 0.2971;
    $RUBCZK 0.8058;
    $RUBDKK 0.2146;

    $PLNPLN 1.0000;
    $PLNEUR 0.2585;
    $PLNUSD 0.3455;
    $PLNGBP 0.1755;
    $PLNJPY 40.6110;
    $PLNCHF 0.4189;
    $PLNRUB 8.9736;
    $PLNCNY 2.6672;
    $PLNCZK 7.2254;
    $PLNDKK 1.9253;

    $CNYCNY 1.0000;
    $CNYEUR 0.0965;
    $CNYUSD 0.1290;
    $CNYGBP 0.0655;
    $CNYJPY 15.1592;
    $CNYCHF 0.1564;
    $CNYRUB 3.3506;
    $CNYPLN 0.3730;
    $CNYCZK 2.7003;
    $CNYDKK 0.7190;

    $CZKCZK 1.0000;
    $CZKEUR 0.0357;
    $CZKUSD 0.0477;
    $CZKGBP 0.0242;
    $CZKJPY 5.6035;
    $CZKCHF 0.0579;
    $CZKRUB 1.2395;
    $CZKPLN 0.1379;
    $CZKCNY 0.3684;
    $CZKDKK 0.2660;

    $DKKDKK 1.0000;
    $DKKEUR 0.1341;
    $DKKUSD 0.1794;
    $DKKGBP 0.0916;
    $DKKJPY 21.0830;
    $DKKCHF 0.21778;
    $DKKRUB 4.6596;
    $DKKPLN 0.5179;
    $DKKCNY 1.3836;
    $DKKCZK 3.7510;

    $datei fopen("erg.txt""a+");
    $inhalt = @fread($datei, @filesize ("erg.txt"));
    fclose($datei);
    unlink("erg.txt");

    echo 
    "<form action=\""$_SERVER["PHP_SELF"] ."\" method=\"post\">
    <table border=\"0\"><tr><td>
    <table border=\"0\"><tr>
    <td><font size=\"-1\">Betrag:</font></td>
    <td><font size=\"-1\">Währung:</font></td>
    </tr><tr>
    <td><input type=\"text\" name=\"betrag1\"></input></td>
    <td><select name=\"art1\">
    <option value=\"EUR\">EUR</option>
    <option value=\"USD\">USD</option>
    <option value=\"GBP\">GBP</option>
    <option value=\"JPY\">JPY</option>
    <option value=\"CHF\">CHF</option>
    <option value=\"RUB\">RUB</option>
    <option value=\"PLN\">PLN</option>
    <option value=\"CNY\">CNY</option>
    <option value=\"CZK\">CZK</option>
    <option value=\"DKK\">DKK</option>
    </select></td>
    </tr>
    <tr><td>&nbsp;</td><td>&nbsp;</td></tr>
    <tr><td><font size=\"-1\">Ergebnis:</font></td><td><font size=\"-1\">umwandeln in:</font></td></tr>
    <tr>
    <td><input name=\"betrag2\" type=\"text\" size=\"20\" value=\"
    $inhalt\" readonly></input></td>
    <td><select name=\"art2\">
    <option value=\"EUR\">EUR</option>
    <option value=\"USD\">USD</option>
    <option value=\"GBP\">GBP</option>
    <option value=\"JPY\">JPY</option>
    <option value=\"CHF\">CHF</option>
    <option value=\"RUB\">RUB</option>
    <option value=\"PLN\">PLN</option>
    <option value=\"CNY\">CNY</option>
    <option value=\"CZK\">CZK</option>
    <option value=\"DKK\">DKK</option>
    </select></td>
    </tr>
    <tr><td>&nbsp;</td><td>&nbsp;</td></tr>
    <tr>
    <td colspan=\"2\" valign=\"middle\"><input type=\"submit\" name=\"submit\" value=\"Umrechnen\"></input></td>
    </tr>
    </table></td>
    <td width=\"150\">&nbsp;</td>
    <td>
    <font size=\"-1\">Euro (EUR)<br>
    Dollar (USD)<br>
    Britische Pfund (GBP)<br>
    Japanischer Yen (JPY)<br>
    Schweizer Franken (CHF)<br>
    Russischer Rubel (RUB)<br>
    Polnischer Zloty (PLN)<br>
    Chinesischer Renminbi (CNY)<br>
    Tschechische Krone (CZK)<br>
    Dänische Krone (DKK)<br></font>
    </td>
    </tr></table>"
    ;



    if(isset(
    $_POST["submit"]))
        {
        
    $erg $_POST["betrag1"] * ${$_POST["art1"].$_POST["art2"]};
        
    $datei fopen("erg.txt""a+");
        
    $write fwrite($datei$erg);
        
    fclose($datei);
        unset(
    $_POST);
        
    header("Location:index.php");
        }
    ?>

  • #2
    Wenn Du ja eh eine weiterleitung machst kannste Dir die Anzeige ´doch sparen (der User bekommt sie ja eh nicht zu sehen).

    Alternativ könntest du die ausgabe buffern

    PHP-Code:
    $phpversion_array phpversion();
    $phpversion_nr $phpversion_array[0].".".$phpversion_array[2].$phpversion_array[4];
    if (
    $phpversion_nr >= 3.01) {
        if (
    extension_loaded("zlib") && ($phpversion_nr >= 4.04)) {
            
    ob_start("ob_gzhandler");
            
    #ob_start();
        
    }

    Aber auch hier gilt: Der User bekommt es eh nicht zu sehen, also kann man sich die ausgabe eigentlich sparen...

    Kommentar


    • #3
      Hier ist mal der Link zum Script wie es funktioniert:
      Link
      Da ist es aber nicht in eine HTML Datei eingebunden.

      Ohne die Aktualisierung gibt das Script den umgerechneten Wert ja nicht aus. Es speichert den Wert kurz in einer txt Datei... dann lädt es die Seite neu gibt den Wert in einem Feld aus und löscht die Datei.

      Kommentar


      • #4
        Hi,

        ich hatte einmal ein ähnlich unerklärliches Problem. Bei mir lag es damals daran, dass ich die PHP-Datei im Binärmodus statt im Textmodus per FTP auf den Host übertragen hatte.

        Gruß,
        basisweb

        Kommentar


        • #5
          Wie kann ich das ändern? Bzw. woher weiß ich überhaupt in welchem Modus die PHP Datei übertragen wird?

          Kommentar


          • #6
            kannst im ftp-Programm einstellen

            Kommentar


            • #7
              ... und zeig doch mal die genaue "Cannot Modify"-Meldung, wenn es eine gibt!

              Kommentar


              • #8
                PHP-Code:
                WarningCannot modify header information headers already sent by (output started at /usr/export/www/vhosts/funnetwork/hosting/rmvs/dsafa054504a6df4a5df4a56s4wa1/1.3/script1.html:262in /usr/export/www/vhosts/funnetwork/hosting/rmvs/dsafa054504a6df4a5df4a56s4wa1/1.3/script1.html on line 273 
                Also die selbe wie im angepinnten Thread. Zeile 273 steht die Header funktion
                In der Zeile 262 endet der Echo befehl, der das Eingabe Formular anzeigt.

                Komischerweiße kommt der Fehler nur wenn ich das Script in einer HTML Seite eingebunden habe.
                Alleine hat es die selben Befehle in den Zeilen nur verursachen die eben keine Probleme.

                Am Modus lag es nicht. Hab in meinem FileZilla sowohl Binär als auch ASCII probiert.
                Zuletzt geändert von Roper; 01.04.2007, 12:04.

                Kommentar


                • #9
                  *doppelpost*

                  Kommentar


                  • #10
                    Works as designed, oder? Das Formular wird in jedem Fall ausgegeben, ergo kann er nicht via header() weiterleiten. Wenn ich es richtig sehe.

                    Kommentar


                    • #11
                      Mich wundert es nur, dass die das Script an sich ohne HTML Seite außen rum funktioniert.
                      Ich ändere ja am Script garnichts.

                      Kann es sein, dass ich die ganze restliche seite dann auch in php ausgeben muss?

                      Kommentar


                      • #12
                        nein. hast du das problem nun gelöst?
                        brich den code bitte um.

                        Kommentar


                        • #13
                          Original geschrieben von Roper
                          Mich wundert es nur, dass die das Script an sich ohne HTML Seite außen rum funktioniert.
                          Machst du Witze?
                          Code:
                          <html>
                          ...
                          <?php include 'whatever.php'; ?>
                          ...
                          </html>
                          Beginnend ab <html> wird da doch wohl etwas an den Browser gesendet, hm?
                          Als was würdest du das bezeichnen, wenn nicht als eine Ausgabe ...?
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Im angepinnten Thread heißt es, dass der PHP echo befehl genau so als Ausgabe zählt.
                            Deswegen ja meine Frage ob es was bringen würde wenn ich die ganze HTML Seite im echo Befehl erzeuge und nicht nur das Eingabe Formular.

                            Kommentar


                            • #15
                              Header() funktionieren nur dann zuverlässig, wenn davor keine Ausgabe stattgefunden hat, egal ob durch echo() oder direkt (Was null Unterschied macht). Ist doch einfach.,

                              Kommentar

                              Lädt...
                              X