Mittwoch, 4. Juli 2007

PHP

Warning: Call-time pass-by-reference has been deprecated

Bei der Ausführung eines PHP-Scripts kann es zur folgenden Fehlermeldungen kommen:

Warning: Call-time pass-by-reference has been deprecated - argument passed by value

Was hat es mit dieser Meldung auf sich?

Der folgende PHP-Code sollte das Problem illustrieren:

Download Code!

  1.  
  2. <?php
  3. function foo($v) {
  4.         $v++;
  5. }
  6.  
  7. function bar(&$v) {
  8.         $v++;
  9. }
  10.  
  11. $x = 1;
  12. $y = 1;
  13.  
  14. // Erzeugt eine Warnung
  15. foo(&$x);
  16. echo $x;
  17.  
  18. // Ab PHP5 der einzig "richtige" weg.
  19. bar($y);
  20. echo $y;
  21.  
  22. ?>
  23.  

Ihr sehen könnt werden zwei Funktionen deklariert. Einmal die Funktion  foo() und einmal die Funktion bar(). In beiden Fällen wird eine Variable übergeben, die um eins hoch gezählt wird (Typprüfung werden in diesem Beispiel weggelassen).

Danach werden die Variablen x und y angelegt. Jetzt kommt der spannende Teil. Falls man die Variable via Call-by-reference übergeben möchte, und dies so wie in der Funktion foo() macht, kommt es zu der Warnung:

Warning: Call-time pass-by-reference has been deprecated - argument passed by value

Das bedeutet, falls man die Variable via Call-by-reference übergeben möchte, muss man dies bereits in der Funktionsdefinition, wie bei der Funktion bar(), machen.

Quickhacks

Es gibt aber noch zwei weitere Möglichkeiten um schnell das Problem zu umschiffen. Achtung das Problem wird hiermit nicht gelöst, sondern es wird nun nicht mehr angezeigt.

Erste Möglichkeit

Um die Unterdrückung der Fehlermeldungen und Warnungen zu erreichen, kann man ein Anfang des Skripts folgenden Code stellen:

Download Code!

  1. error_reporting(0);

Zweite Möglichkeit

Durch setzen des folgenden Eintrags in der php.ini, kann man die Warnung auch unterdrücken:

Download Code!

  1.  
  2. allow_call_time_pass_reference = On
  3.  

Dritte Möglichkeit

Ein .htaccess Datei mit folgedem Inhalt erstellen und diese ins Wurzelverzeichnis kopieren:

Download Code!

  1.  
  2. php_value allow_call_time_pass_reference 1
  3.  
Webnews Diese Seite zu Mister Wong hinzufügen Diesen Beitrag bei Del.icio.us bookmarken
Geschrieben von Mr.Foo in PHP um 23:48
Kommentare (11) | Trackbacks (0)
Tags für diesen Artikel: PHP

Trackbacks
Trackback für spezifische URI dieses Eintrags

Keine Trackbacks

Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

xFigth - #1 - 04.05.2008 13:48 - (Antwort)

Hey danke, dass habe ich gesucht ;-)

brimbrambrum - #2 - 16.01.2009 00:46 - (Antwort)

Wie ist die erste Möglichkeit gleich nocheinmal?
Der Code wird nämlich nicht mehr angezeigt!
ich hab das problem nämlich auch und ich weiß nicht wie ich es lösen kann!

MfG

Mr. Foo - #2.1 - 16.01.2009 11:58 - (Antwort)

Hi brimbrambrum,

der entsprechende Codeteil wird wieder angezeigt.

brimbrambrum - #2.1.1 - 16.01.2009 13:27 - (Antwort)

danke!
nur leider funktioniert das nicht bei mir und auf die PHP.ini hab ich keinen zugriff!

was könnte ich sonst noch machen? kann ich an der php wo der fehler auftaucht sonst was ändern? kann ich sie vll mal zeigen an jmd der sich damit auskennt? :-D
wär echt sehr lieb!

MfG

Mr. Foo - #2.1.1.1 - 16.01.2009 15:21 - (Antwort)

Das muss funktionieren. Hast du die error_reporting Anweisung auch an den Anfang deines Scripts gepackt?

brimbrambrum - #2.1.1.1.1 - 17.01.2009 12:06 - (Antwort)

ja gleich an den Anfang in die erste Zeile!
Wenn ich die Anweisung reinpacke, dann wird sie nur unter dem Fehler angezeigt aber der fehler wird weiterhin angezeigt! leider!

Mr. Foo - #2.1.1.1.1.1 - 17.01.2009 21:42 - (Antwort)

Was meinst du mit die Anweisung wird angezeigt?

Such mal in dem Script nach error_reporting - vielleicht wird es ja an einer anderen Stelle wieder eingeschalten.

Hast du das Script selbst geschrieben?

brimbrambrum - #2.1.1.1.1.1.1 - 17.01.2009 23:27 - (Antwort)

nein das script hab ich nicht selbst geschrieben - es ist ein script von joomla - wenn dir das was sagt!

Die Funktion des Scripts ist nicht beeinträchtigt, aber es steht über dem script immer:

Warning: Call-time pass-by-reference has been deprecated; If you would like to pass it by reference, modify the declaration of [runtime function name](). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file in [...] .php on line 22

Und wenn ich error_reporting(0); an den Anfang des betroffenen Scriptes setzte dann erscheint die gleiche Meldung, nur mit error_reporting(0); darunter!


Ich hoffe du verstehst was ich meine.

Hättest du noch einen Tipp?

MfG

Mr. Foo - #2.1.1.1.1.1.1.1 - 18.01.2009 00:20 - (Antwort)

Du bekommst also in der Ausgabe im Browser das error_reporting(0) zu sehen?

Kann es sein, dass du die Anweisung nicht im PHP-Block reingeschreiben hast? Also nicht innerhalb von < ?php und ?>

brimbrambrum - #2.1.1.1.1.1.1.1.1 - 18.01.2009 14:14 - (Antwort)

ja du hast recht gehabt ich hab die anweisung nicht in den PHP-Block geschrieben! mein fehler sry!
jetzt hab ich sie aber reingeschrieben aber sie bewirkt nichts!
also der fehler bleibt der alte!
tut mir echt leid wenn ich dich jetzt die ganze zeit nerve :-(

Mr. Foo - #2.1.1.1.1.1.1.1.1.1 - 18.01.2009 17:31 - (Antwort)

Ist doch kein Thema :-)

Hast du jetzt mal in den Dateien nach der error_reporting Anweisung gesucht? Wie schon erwähnt, kann es sein, dass der Wert wieder irgendwo überschrieben wird.

Zusätzlich erstelle mal die Datei .htaccess und lege sie mit folgendem Inhalt in das Wurzelverzeichnis - also das in dem sich auch die index.php befindet:

php_value allow_call_time_pass_reference 1
php_value error_reporting 0
php_value display_errors 0


Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden
 
 

Mr. Foo

Warning: Call-time pass-by-reference has been deprecated

  • Homepage

Suche

Kategorien

  • C-Sharp (3)
  • Datenbank (21)
  • Delphi (2)
  • Entwicklung (31)
  • Flash (4)
  • Games (9)
  • Hardware (14)
  • HTML CSS (13)
  • Internet (60)
  • Java (30)
  • Javascript (21)
  • Linkdump (9)
  • Linux (92)
  • Low-Level (7)
  • Lua (8)
  • Musik (5)
  • Netzwerk (21)
  • New World Order (68)
  • Perl (1)
  • PHP (98)
  • Magento (5)
  • Symfony (3)
  • Zend Framework (6)
  • Probleme und Lösungen (26)
  • Python (20)
  • Ressourcen (22)
  • Sicherheit (74)
  • Software (41)
  • Sonstiges (41)
  • Own Stuff (28)
  • Spass (36)
  • Technik / Wissenschaft (1)
  • Tips (14)
  • Weisheiten (3)
  • Windows (19)


Alle Kategorien

Archive

  • März 2010
  • Februar 2010
  • Januar 2010
  • Das Neueste ...
  • Älteres ...

Blog abonnieren

  • XML RSS 0.91 feed
  • XML RSS 1.0 feed
  • XML RSS 2.0 feed
  • ATOM/XML ATOM 0.3 feed
  • ATOM/XML ATOM 1.0 feed
  • XML RSS 2.0 Kommentare

Tagcloud

Datenbank Entwicklung Internet Java Linux Lösung Netzwerk News New World Order PHP Problem Probleme und Lösungen Python Ressourcen Sicherheit Software Sonstiges Spass Update Windows

Kommentare

k4l zu The script tried to execute a method or access a property of an incomplete object
Mi, 10.03.2010 13:27
danke ist eigtl absolut logisch :-)
Mr. Foo zu Login bei Magento funktioniert nicht
Di, 09.03.2010 15:19
Ist dein Magento Shop im Internet [...]
seoqueen zu Login bei Magento funktioniert nicht
Di, 09.03.2010 14:38
Hallo, ich habe das selbe Problem [...]
choise zu PHP - Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
Mo, 08.03.2010 19:30
Danke hat mir geholfen.
Benny Neugebauer zu Foreach in Java
Mo, 08.03.2010 14:17
Dankeschön! :-)

Beliebte Einträge

  • Magento ist scheisse (93)
  • C compiler cannot create executables unter Debian (50)
  • Sicheres Kontaktformular mit PHP - Spam verhindern (37)
  • Option Bug im Internet Explorer bei Nutzung von innerHTML und Javascript (24)
  • Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden (23)
  • Zend Studio - Javaw.exe lastet die CPU aus (21)
  • USB-Tastatur funktioniert nicht (beim Booten) (17)
  • Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert) (16)
  • CSS: Hover-Effekt beim Internet Explorer in Tabellen (16)
  • UML-Diagramme aus Java-Klassen generieren – Java2UML (16)
 

Kontakt