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

Beitrag lesen

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";