2016-07-24 6 views
0

Hallo Ich benutze ein altes Skript, und ich bekomme diesen Fehler beim Versuch, auf die Website zugreifen, auf dem das Skript läuft.PHP Schwerwiegender Fehler: Call-Time-Pass-by-Referenz wurde entfernt

Fatal error: Call-time pass-by-reference has been removed in /home/image/public_html/*****/admin/inc/html.inc.php on line 86 

Hier ist der Code Php von der Linie 83 nach unten 89 bis Ich bin mit PHP Version 5.5.20

if ($flag) { 
    $out = ''; 
    $find = '{CONSTVAR:$'; 
    html_replacevar(&$html, $find, $page); 
    if (strpos($html, '{') === FALSE) { 
     $out = $html; 
    } 

Kann jemand, der PHP weiß, sagen, was das Problem sein könnte, im mit, und wie etwas reparieren? Ich bin neu in PHP und Codierung, deshalb brauche ich Hilfe. Vielen Dank.

+0

ändern html_replacevar (& $ html, $ find, $ page); zu html_replacevar ($ html, $ find, $ page); –

+0

@PrafullaKumarSahu siehe Kommentar zu dieser Antwort (http://stackoverflow.com/a/38551028/315024) – Walf

+0

Möchten Sie eine Antwort akzeptieren? – Walf

Antwort

1

Problem ist, dass Sie Variablen als Referenz übergeben. Wie der Fehler sagt. Versuchen Sie, die Funktion html_replacevar so zu modifizieren, dass sie die modifizierte HTML zurück und verwenden Sie es wie folgt aus:

$html = html_replacevar($html, $find, $page); 
0

PHP nicht mehr erlaubt Pass-by-reference auf Funktionsaufrufe, jedoch funktioniert es erlauben dies in Funktion Definitionen.

Versuchen ersetzt

html_replacevar(&$html, $find, $page); 

mit

html_replacevar($html, $find, $page); 
+0

Ihre Funktion scheint keinen Wert zurückzugeben, daher kann Ihre Lösung den Fehler beseitigen, aber auch den beabsichtigten Effekt auf '$ html' unterdrücken. – Walf

1

Dieser Begriff ist, Referenzen zu verstehen. Ein Funktionsparameter, bei dem es sich um eine Referenz handelt, übergibt diese tatsächliche Variable, sodass Änderungen innerhalb der Funktion auch außerhalb der Funktion bestehen bleiben. Der Standardwert ist, dass Variablen, die an eine Funktion übergeben werden, Kopien sind. Daher hat das Ändern innerhalb der Funktion keine Auswirkungen außerhalb der Funktion. Die Ausnahme von dieser Regel sind Parameter, bei denen es sich um Objekte handelt, wobei Änderungen an ihnen (keine Neuzuweisung der Variablen) immer bestehen bleiben.

Referenzen sind Variablen, denen ein & vorausgeht. Sie verwendet der Lage sein zu entscheiden, ob Verweise auf Anruf-Zeit zu verwenden, können Sie entweder von diesen tun:

$foo = bar($baz); 
$foo = bar(&$baz); 

Nur der zweite würde bedeuten, bar() einen Wert zurückgeben konnte und Änderungen an der ursprünglichen $baz machen. Nun, stellen Sie die Sprache klarer und effizienter zu gestalten, können Sie nur festlegen, welche Parameter sind Referenzen in einer Funktion/Methode Unterschrift, zB:

function bar(&$qux) { 
    … 
} 

jetzt jeder weiß, dass Funktion seinen ersten Parameter zu ändern beabsichtigt, und Sie nie Fügen Sie den & zu einem referenzierten Parameter im Aufruf hinzu.

Verwandte Themen