SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 14.01.2007, 03:30:02
loopmode loopmode ist offline
Anfänger
 
Registriert seit: Jan 2007
Beiträge: 2
Call to undefined function: new_child()

Hallo!

Ich habe ein Strato Powerweb-Paket, und benutze eine XML to object Klasse, die in meiner lokalen Testumgebung einwandfrei funktioniert, aber wie so oft, bei Strato Probleme bekommt.
Ich bin in Sachen PHP ziehmlicher Anfänger, daher erhoffe ich mir hier ein wenig Hilfe oder einen Lösungsansatz.

Ich bekam zunächst noch eine andere Fehlermeldung, nämlich:

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; 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. However, future versions may not support this any longer. in /mnt/be2/04/518/00000009/htdocs/galerie/admin/inc/XML.inc.php on line 61

Jedoch konnte ich, nach ein wenig Recherche, durch einfügen von

PHP-Code:
error_reportingE_ERROR E_PARSE ); 
in der Datei, die das Script per require_once included, unterbinden. Ich weiss nicht, ob der verbleibende Fehler hiermit zu tun hat (denke ich nicht), darum dachte ich, ich sollte es hier erwähnen.

Also, dies ist die Fehlermeldung, die noch bleibt:

Fatal error: Call to undefined function: new_child() in /mnt/be2/04/518/00000009/htdocs/galerie/admin/inc/XML.inc.php on line 73

Hier ist das Script, um das es geht (Datei XML.inc.php), ich poste mal den gesamten code, da darin zwei Klassen deklariert werden, und das Problem scheinbar damit zu tun hat, dass eine Funktion in der anderen Klasse nicht gefunden wird. Oder so.. :)
Jedenfalls ist die Funktion new_child sehr wohl in der XML_TAG Klasse vorhanden, allerdings weiss ich nicht, wie ich was geschickter machen sollte...

PHP-Code:
<?php
/*
* XML.inc.php
*
* Class to convert an XML file into an object
*
* Copyright (C) 2006  Oliver Strecke <oliver.strecke@browsertec.de>
*
*   This library is free software; you can redistribute it and/or
*   modify it under the terms of the GNU Lesser General Public
*   License as published by the Free Software Foundation; either
*   version 2 of the License, or (at your option) any later version.
*
*   This library is distributed in the hope that it will be useful,
*   but WITHOUT ANY WARRANTY; without even the implied warranty of
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
*   Lesser General Public License for more details.
*
*   You should have received a copy of the GNU Lesser General Public
*   License along with this library; if not, write to the Free Software
*   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
*/ 

class XML{
    var 
$_parser;
    var 
$_xml_data;
    var 
$_actual_tag;
    
    
//Constructor...
    
function xml(){
        
$this->_parser=xml_parser_create("ISO-8859-1");
        
$this->_xml_data="";
        
$this->_actual_tag=false;

        
xml_set_object($this->_parser,$this);
        
xml_parser_set_option($this->_parser,XML_OPTION_CASE_FOLDING,false);
        
xml_set_element_handler($this->_parser,"tag_open","tag_close");
        
xml_set_character_data_handler($this->_parser,"tag_data");
        
xml_set_default_handler($this->_parser,"tag_data");
    }
    
    
//get XML data from file...
    
function file_read($xml_file){
        if(
file_exists($xml_file)){
            
$this->_xml_data=implode("",file($xml_file));
        }
        return 
1;
    }
    
    
//parse XML data...
    
function parse($xml_data=0){
        if(
$xml_data)$this->_xml_data=$xml_data;
        
xml_parse($this->_parser,$this->_xml_data);
        
xml_parser_free($this->_parser);
        return 
1;
    }

    function 
tag_open($parser,$name,$attrs){
        
//create new tag...
        
$tag=new XML_TAG(&$this->_actual_tag);
        
$tag->_name=$name;
        
$tag->_param=$attrs;

        
//add tag object to parent/actual tag object...
        
if(is_object($this->_actual_tag)){
            if(
is_object($this->_actual_tag->$name) || is_array($this->_actual_tag->$name)){
                
//same child objects -> Array...
                
$last_index=$this->_actual_tag->new_child_array($tag,$name);
                
$this->_actual_tag=&$this->_actual_tag->{$name}[$last_index];
            }else{
                
//add new child object to actual tag...
                
$this->_actual_tag->new_child($tag,$name);
                
$this->_actual_tag=&$this->_actual_tag->$name;
            }
        }else{
            
//copy first tag object in this object...
            
$this->$name=$tag;
            
$this->_actual_tag=&$this->{$name};
        }
        return 
1;
    }

    function 
tag_data($parser,$string){
        if(
strlen(trim($string))>0)$this->_actual_tag->_value=$string;
        return 
1;
    }

    function 
tag_close($parser,$name){
        
$this->_actual_tag=&$this->_actual_tag->_parent;
        return 
1;
    }
    
    
//Debug...
    
function debug($exit=0){
        echo 
"<pre>";
        
print_r($this);
        echo 
"</pre>";
        if(
$exit)exit;
    }
}

class 
XML_TAG{
    var 
$_parent;
    var 
$_name;
    var 
$_value;
    var 
$_param;
    
    
//Constructor...
    
function xml_tag($parent){
        
$this->_parent=&$parent;
        
$this->_name="";
        
$this->_value=false;
        
$this->_param=Array();
        return 
1;
    }
    
    
//simply add ne child to this object...
    
function new_child($child,$child_name){
          
$this->$child_name=&$child;
    }
    
    
//add child array for more same childs to this object...
    
function new_child_array($child,$child_name){
        
//create array and set old child object to the first array element...
        
if(is_object($this->$child_name)){
            
$tmp_obj=$this->$child_name;
            
$this->$child_name=Array();
            
$this->new_child_array($tmp_obj,$child_name);
        }
        
//push child reference into child array...
        
$this->{$child_name}[]=&$child;
        
$last_index=count($this->$child_name)-1;
        return 
$last_index;
    }
    
    
//Debug...
    
function debug(){
      echo 
"<pre>";
      
print_r($this);
      echo 
"</pre>";
    }
}
?>

Jetzt habe ich schon so ein tolles Programm gebaut (Bildergalerie-CMS, mit Flash Front-End für den Admin, is supi), und es funtioniert nicht dort, wo es funtionieren soll: auf dem Web-Server.. Enttäuschend.. :(
Naja, danke im Voraus :)

btw: Ich könnte natürlich dem Entwickler der Klasse ne Email schreiben aber naja, ich dachte sowas macht man nicht, lieber erst in nem Forum, wo Leute mit AHnung sind, nachfragen. War das richtig, oder ist es durchaus üblich, wenn der Autor ja bekannt ist, ihm direkt eine solche Frage per email zu stellen?
Mit Zitat antworten
  #2  
Alt 14.01.2007, 13:07:13
BenniG. BenniG. ist offline
Member
 
Registriert seit: Oct 2006
Beiträge: 610
AW: Call to undefined function: new_child()

Zitat:
Jedoch konnte ich, nach ein wenig Recherche, durch einfügen von

PHP-Code:
error_reporting( E_ERROR | E_PARSE );
in der Datei, die das Script per require_once included, unterbinden. Ich weiss nicht, ob der verbleibende Fehler hiermit zu tun hat (denke ich nicht), darum dachte ich, ich sollte es hier erwähnen.
Das ist wie: Herr Doktor, wenn ich hier drücke tuts weh => Dann drücken sie halt nichtmehr..
Ohne die Fehlermeldung kommt man nicht drauf, dass es nicht
PHP-Code:
//Constructor...
    
function xml_tag($parent){ 
sondern
PHP-Code:
//Constructor...
    
function xml_tag(&$parent){ 
sein muss. Also error_reporting auf E_ALL setzen, dann siehst du wenigstens, wenns irgendwo Probleme gibt.
Fehlermeldungen zu beseitigen, indem man sie ausschaltet ist immer falsch!

Geändert von BenniG. (14.01.2007 um 13:07:24 Uhr)
Mit Zitat antworten
  #3  
Alt 14.01.2007, 14:48:46
loopmode loopmode ist offline
Anfänger
 
Registriert seit: Jan 2007
Beiträge: 2
AW: Call to undefined function: new_child()

Okay, danke. Ich nehme an error_reporting auf E_ALL setzen entfällt, wenn ich einfach gar nichts am error_reporting ändere, sprich die Zeile prinzipiell weglasse?

Ist es denn fehlerhaft oder 'fahrlässig' vom Autor des skriptes programmiert gewesen?

PHP-Code:
function xml_tag($parent){
        
$this->_parent=&$parent
In der zweiten Zeile benutzt er ja das &
Ich frage darum, weil er das durchgehend im gesamten Skript so gemacht hat, zur Not kann ich das ja überall ändern, wobei ich ja erstmal lernen/vertsehen muss, wass die Änderung überhaupt bedeuten würde.. Wie gesagt, lokal funktioniert das Skript ja einwandfrei.

Ich habe
Code:
error_reporting( E_ERROR | E_PARSE );
jetzt rausgenommen, und die von dir vorgeschlagene Änderung gemacht, Ergebnis ist, dass ich wieder beide Fehlermeldungen bekomme.. Also leider keine Verbesserung..

Ich steige gerne auch auf eine andere Methode um, um auf meien XML Daten zuzugreifen.. Vorschläge sind mir sehr willkommen!

Die Sache ist, dass ich bei http://www.phpclasses.org mehrere Klassen/Skripte , die das Zugreifen auf XML erlauben ausprobiert hatte, in meiner lokalen Umgebung jedoch mit dem hier besprochenen die besten Erfolge hatte, zumindest auf Anhieb (die anderen waren alle problematischer und umständlicher, falls ich überhaupt Erfolg mit ihnen hatte).

Ich bin bei ActionScript2 zuhause, und da habe ich keinerlei Probleme mit XML, sprich, mein Admin-Frontend läuft stabil. Ich kann also das Besucher-Frontend gerne auf eine komplett andere php-xml-Lösung umändern, hauptsache es läuft fehlerfrei. Wenn ich es jedoch auf eigene Faust machen müsste, wäre ich darauf angewiesen, die Datei einzulesen und umständlich den string zu splitten - das kann es ja auch nicht sein.. Man muss doch von PHP aus irgendwie vernünftig auf XML daten zugreifen können..?

Der Hintergrund ist, dass ich den Besuchern, die tatsächlich noch stellenweise kein Flash-plugin zu haben scheinen, Flash ersparen möchte ("..die Seite ist toll, nur, die Bilder-Galerie funktioniert nicht, da kommt nichts.." - bei einer Seite, die die Malereien einer Künstlerin zeigen soll nicht ganz akzeptabel :) ), daher mein Ausflug ins PHP-Land (wobei ich natürlich gierig danach bin, erfahrener in PHP zu werden, ist ne grossartige Sache, und wenn ich in php so fit wäre wie in Flash, würde ich einiges anders machen).

Falls also jemand eine einfache und sichere Methode kennt um von PHP aus auf Informationen in XML dateien zuzugreifen - bitte kurz verweisen! Wäre super - und wohl effizienter als jetzt die ganze Zeit zu debuggen..
Mit Zitat antworten
  #4  
Alt 14.01.2007, 14:53:45
BenniG. BenniG. ist offline
Member
 
Registriert seit: Oct 2006
Beiträge: 610
AW: Call to undefined function: new_child()

Das Problem bei der Sache, ist, dass das Script für eine alte PHP-Version geschrieben ist.. ich glaub ab PHP 4.4 ist das mit Call-By-Reference geändert worden..
Was hat dein Webspace für eine PHP-Version?
zur Not mal über
PHP-Code:
phpinfo(); 
Checken..

Bei PHP5 kannst du z.B. simpleXML benutzen, hab ich noch nie gemacht, soll aber einfach sein ;)
http://de.php.net/simplexml
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fatal error: Call to undefined function mysql_create_db() und ähnliches Thomas Mc Kie PHP Grundlagen 2 23.11.2006 16:23:06
Call to a member function on a non-object dmattes PHP für Fortgeschrittene und Experten 2 20.04.2006 10:38:31
fehlermeldung : Call to undefined function: bcmod() alexboy PHP für Fortgeschrittene und Experten 3 14.02.2006 12:13:04
Call to undefined function: mb_strlen() LukeDogg PHP für Fortgeschrittene und Experten 0 07.11.2005 10:43:45
PHP- Fatal error: Call to undefined function: ocifreedescriptor() stefano franko PHP für Fortgeschrittene und Experten 5 20.02.2003 16:36:09


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:25:36 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt