Michael: Fehlermeldung: Warning: Cannot modify header information...

Hallo,

seit mein Provider ein PHP-Update gemacht hat, erscheint bei einem Script, dass aus Dateien eine zip-Datei erstellen sollte und diese zip als Download ausgeben sollte, folgende Fehlermeldung:

---
Notice: Only variables should be assigned by reference in /home/.../.../pclzip.lib.php on line 254

Warning: Cannot modify header information - headers already sent by (output started at /home/m1003erw/www/home/.../.../pclzip.lib.php:254) in /home/m1003erw/www/home/.../.../download.php on line 25
---

Der Inhalt pclzip.lib.php Zeile 251-254:
---
    // ----- Look for arguments
    if ($v_size > 1) {
      // ----- Get the arguments
      $v_arg_list = &func_get_args();
---

Der Inhalt download.php Zeile 21-25:
---
 //Erzeuge neues Zip
 $zip= new PclZip('setsdl/set_'.$_GET['id'].'.zip');
 $zip -> create($vlist,PCLZIP_OPT_REMOVE_ALL_PATH);

header("Location: ".'setsdl/set_'.$_GET['id'].'.zip');
---

Hat jemand ein rat was ich machen kann, damit es wieder funktioniert?

Vielen Dank für die Hilfe!!
Michael

  1. folgende Fehlermeldung:

    Das ist keine Fehlermeldung, sondern nur ein Notice.
    Aber trotzdem liegt hier das Problem.
    Der Text dieses Notice wird an den Client gesendet und halt angezeigt.
    Damit wurden dann auch bereits HTTP-Header gesendet und wenn du dann danach die Header-Funktion aufrufst, kann das natürlich nicht mehr funktionieren.

    Das hier mußt du also beheben:

    Notice: Only variables should be assigned by reference in /home/.../.../pclzip.lib.php on line 254

    und schon funktioniert dein Header-Aufruf wieder.

    Gruß, rob

  2. hallo,

    folgende Fehlermeldung:
    Notice: Only variables should be assigned by reference in /home/.../.../pclzip.lib.php on line 254

    Eine "Notiz" ist noch keine Fehlermeldung.

    header("Location: ".'setsdl/set_'.$_GET['id'].'.zip');

    Wo ist hier die Variable?

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
  3. echo $begrüßung;

    seit mein Provider ein PHP-Update gemacht hat, erscheint bei einem Script, dass aus Dateien eine zip-Datei erstellen sollte und diese zip als Download ausgeben sollte, folgende Fehlermeldung:
    Notice: Only variables should be assigned by reference in /home/.../.../pclzip.lib.php on line 254

    Wie schon erkannt, ist diese Ausgabe die Ursache der Folgefehler. Die Ursache für diese Fehlermeldung ist wiederum eine falsche Behandlung von Referenzen. Diese Meldung wurde mit PHP-Version 4.4.0 und zum gleichen Zeitpunkt auch im 5er Zweig eingeführt.

    Ursache ist eine Funktion, die eine Referenz zurückgeben soll, aber keine Variable sondern einen Ausdruck als Rückgabewert hat. Referenzen können nur auf Variablen, nicht aber auf andere Ausdrücke angelegt werden. Beispielsweise

    function &referenzrückgabe() {
        return ($var); // mit Klammern
      }

    statt

    function &referenzrückgabe() {
        return $var; // ohne Klammern
      }

    Bei Funktionsaufrufen sind die Klammern aus syntaktischen Gründen notwendig. return ist aber keine Funktion. Die Klammern machen deshalb aus der einfachen Variable einen Ausdruck. Auch bei

    function &referenzrückgabe() {
        return array(...);
      }

    ist array() keine Variable. Um den Fehler zu vermeiden muss man das Array erst einer Variable zuweisen, die man dann zurückgeben kann:

    function &referenzrückgabe() {
        $x = array(...);
        return $x;
      }

    Zurück zu deinem Problem: func_get_args() ist eine Funktion, die ein Array zurückgibt. Ich weiß nicht, warum du das als Referenz haben willst. Wenn es dafür keinen zwingenden technischen Grund gibt, lass das mit der Referenz bleiben. So wie es sich jedenfalls darstellt, legt func_get_args() keine Variable an, die dann zurückgegeben wird, sondern gibt ein Array direkt zurück. Wenn du unbedingt eine Referenz auf diese Werte brauchst, musst du zuerst eine Kopie des Arrays entgegennehmen (passiert automatisch, wenn du eine normale Zuweisung notierst) und dann erst eine Referenz auf die in der Zuweisung verwendete Variable anlegst.

    echo "$verabschiedung $name";