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.  
Geschrieben von Mr.Foo in PHP um 23:48
Kommentare (11) | Trackbacks (0)
Tags für diesen Artikel: PHP
  1. Nicht gut
  2. Uninteressant
  3. Neutral
  4. Gut
  5. Sehr gut
Bewertung: keine, 0 Stimme(n) 147 Klicks

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 (4)
  • Datenbank (25)
  • Delphi (2)
  • Entwicklung (33)
  • Flash (4)
  • Games (10)
  • Gutscheine (3)
  • Hardware (14)
  • HTML CSS (13)
  • Internet (79)
  • Java (30)
  • Javascript (22)
  • Linkdump (9)
  • Linux (93)
  • Low-Level (9)
  • Lua (8)
  • Musik (7)
  • Netzwerk (24)
  • New World Order (90)
  • Perl (3)
  • PHP (113)
  • Magento (5)
  • Symfony (3)
  • Zend Framework (7)
  • Probleme und Lösungen (26)
  • Python (22)
  • Ressourcen (22)
  • Sicherheit (76)
  • Software (46)
  • Sonstiges (43)
  • Own Stuff (34)
  • Spass (41)
  • Technik / Wissenschaft (3)
  • Tips (15)
  • Weisheiten (10)
  • Windows (22)


Alle Kategorien

Archive

  • September 2010
  • August 2010
  • Juli 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 Javascript Linux Lösung Netzwerk News New World Order PHP Problem Probleme und Lösungen Python Sicherheit Software Sonstiges Spass Update Windows

Kommentare

Jemand zu The following packages have been kept back
Do, 02.09.2010 03:00
Danke, mir hat es auch geholfen :-)
Droht Stuttgart 21 doch noch @ Video News zu Stuttgart 21 Abriss trotz Massenproteste
Mi, 01.09.2010 17:16
Das Bauprojekt Stuttgart 21 hat fr [...]
noura zu USB-Tastatur funktioniert nicht (beim Booten)
Mi, 01.09.2010 16:16
ich danke euch für dir tips. hatte [...]
Jo zu Node no longer exists Fehler in PHP
Di, 31.08.2010 19:48
Falls beispielsweise eine große Da [...]
Lilly zu Plugin-container.exe deaktivieren
So, 29.08.2010 20:28
braucht man diesen blöden Plugin-c [...]

Beliebte Einträge

  • Magento ist scheisse (123)
  • C compiler cannot create executables unter Debian (51)
  • 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 (24)
  • Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert) (23)
  • Zend Studio - Javaw.exe lastet die CPU aus (21)
  • UML-Diagramme aus Java-Klassen generieren – Java2UML (20)
  • USB-Tastatur funktioniert nicht (beim Booten) (18)
  • CSS: Hover-Effekt beim Internet Explorer in Tabellen (17)

Umfragen


Archive
 

Kontakt