2017-12-27 7 views
-2

Ich erhielt dieses alte Skript von einem Client, der noch auf einem alten Server mit PHP 4.4 lief. Wir haben es auf einen neuen Server mit PHP 5.6 gestellt und es funktioniert nicht mehr wie es funktionieren sollte.PHP Schwerwiegender Fehler: Aufruf einer Memberfunktion getAttribute() auf null (PHP 4.4 zu PHP 5.6)

Das Skript speichert ein Formular in einer XML-Datei und ruft die Informationen aus der XML-Datei erneut in das Formular ab. Problem ist, dass es es nicht mehr abruft. Wir erhalten diesen Fehler:

PHP Fatal error: Call to a member function getAttribute() on null

Hier ist der Teil des Codes, wo es schief geht.

 if(!$xml_page->parseXML($strXMLToCContents)){ 
      $show_errors .= "Parsing failed.<br>"; 
     } 

     $nodeRoot =& $xml_page->documentElement; 

     $nodeToCDef =& $nodeRoot->firstChild; 

     $strToCButtonLabel = $nodeToCDef->getAttribute("name"); 

     $countToCRows = $nodeToCDef->childCount; 

     for($n = 0; $n < $countToCRows; $n++){ 
      $thisLinkNode =& $nodeToCDef->childNodes[$n]; 
      $arrLinks[] = array($thisLinkNode->getAttribute("name"), $thisLinkNode->getAttribute("page")); 
     } 
    } 
} 

if(count($arrLinks) == 0){ 
    for($n = 0; $n < $numFormFieldsToShow; $n++){ 
     $arrLinks[] = array('', ''); 
    } 
} 

Irgendwelche Ideen, was geändert werden muss, damit es wieder funktioniert. Vielen Dank!

+0

Für den Anfang, Sie all diese Referenzzuweisungen entfernen – Phil

+0

Welche Linie der Fehler werfen? '$ nodeToCDef-> getAttribute ("name")' oder '$ thisLinkNode-> getAttribute ("name")' ? – Phil

+0

Es gibt auch nichts, das dies vom Versuch abhält, auf das DOM zuzugreifen, wenn die Analyse fehlschlägt. – Phil

Antwort

1

Seit PHP 5 gibt new automatisch eine Referenz zurück, daher wird in diesem Kontext die Verwendung = & veraltet und erzeugt in PHP 5.3 und höher eine E_DEPRECATED-Nachricht und in früheren Versionen eine E_STRICT-Nachricht. Ab PHP 7.0 ist es syntaktisch ungültig. (Technisch gesehen besteht der Unterschied darin, dass Objektvariablen, ähnlich wie Ressourcen, in PHP 5 nur ein Zeiger auf die tatsächlichen Objektdaten sind, so dass diese Objektreferenzen keine "Referenzen" im selben Sinne sind, wie sie zuvor verwendet wurden (Aliase).

http://php.net/manual/en/language.references.whatdo.php

+0

Führt ein 'E_STRICT' Level-Fehler zu der Zuweisung zu sei 'null'? Wo benutzt OP auch 'new'? – Phil

Verwandte Themen