Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Class 'xyz' not found in, Probleme mit dem include_path?
Antwort
 
Themen-Optionen
Alt 02.06.2006, 09:58   Nach oben    #1
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard Class 'xyz' not found in, Probleme mit dem include_path?

Morgen,
ich werd hier noch verrückt. Habe ich zu wenig Kaffee getrunken und schlafe noch?

Ich habe diese Codepassage hier
PHP-Code:
/**
 * Define constant ROOT to get global access to the document root of the system
 */
define('ROOT'dirname(__FILE__));

// set a custom include_path
set_include_path(ROOT.DIRECTORY_SEPARATOR.'core'.DIRECTORY_SEPARATOR.PATH_SEPARATOR.
                 
ROOT.DIRECTORY_SEPARATOR.'core'.DIRECTORY_SEPARATOR.'exceptions');
 

/**
 * Searches the required file in the include_path.
 * 
 * @param string $classname
 * The class that was instantiated.
 * @return void
 */ 
function __autoload($classname
{
    
$extension '.php';
    
$filename str_replace('_'DIRECTORY_SEPARATOR$classname) . $extension;
    
    if(!
file_exists($filename))
    {
        
//echo $filename . '<br>';
        
throw new FileNotFoundException($filename);
    }    
    
//echo $filename . " geladen<br />";
    
require_once($filename);
}

$obj = new TestClass(); 
Die Testausgaben kann man ja mal ignorieren, wenn man möchte.

Die Verzeichnisstruktur ist Folgende:
Code:
root
 |- core
      |- exceptions
      TestClass.php
TestClass.php enthält dann die Klasse "TestClass". Wer hätte es gedacht?!

Rufe ich das nun so auf erhalte ich
Zitat:
Fatal error: Class 'FileNotFoundException' not found in C:\apachefriends\xampp\htdocs\dev\dummy.php on line 52
Das kommt, weil die Klasse TestClass nicht gefunden wird, demnach eine FileNotFoundException geworfen werden soll, diese Datei dann aber auch nicht gefunden wird.

Wenn ich mir den include_path mit get_include_path() ausgeben lasse erhalte ich
Zitat:
C:\apachefriends\xampp\htdocs\dev\core\;C:\apachef riends\xampp\htdocs\dev\core\exceptions
Jetzt müssten die Dateien doch eigentlich gefunden werden.
Die Datei FileNotFoundException.php liegt im Ordner "exceptions" und die Datei "TestClass.php liegt im Ordner "core".

Hat da jemand eine Idee?
Danke dafür.

Grüße, Ben.


[EDIT]
Hä?

Also ich habe jetzt einfach mal die Datei FileNotFoundExpception.php in den System-root gelegt, also ins selbe Verzeichnis wie die aufrufende Datei mit der __autoload()-Funktion.

Die Datei sieht so aus.
PHP-Code:
class FileNotFoundException extends Exception
{
    
/**
     * ...
     * 
     * @param string $filename
     * The name of the file that cannot be found.
     */
    
public function __construct($filename)
    {
        echo 
$filename;
    }

Nur so ein "dummy"-Ding!

Alles klar. Jetzt wollte ich da eine schönere Ausgabe reinbauen und habe die Datei verändert. Allerdings habe ich zu spät gemerkt, dass ich das Original im Ordner "exceptions" geändert habe und nicht die Kopie im System-root.
Die Kopie war also unverändert, das Original hatte eine andere Ausgabe
PHP-Code:
echo "Die Datei $filename konnte nicht gefunden werden"
Schön. Ich rufe also die Datei auf (dummy.php) und tadaaa .. die Ausgabe ist (reproduzierbar!)
Zitat:
Die Datei Configuration.php konnte nicht gefunden werden
Fatal error: Class 'Configuration' not found in C:\apachefriends\xampp\htdocs\dev\index.php on line 61


Ja was is das für 'ne Scheiße? Warum wird denn jetzt plötzlich die Datei im Ordner exceptions aufgerufen und nicht die im System-root? Lösche ich die Datei wieder aus dem System-root erhalte ich obige Fehlermeldung, also die Datei wird nicht gefunden.

Kurzum: *help*

Geändert von Ben (02.06.2006 um 10:13 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2006, 10:49   Nach oben    #2
robo47
BIN EIN KRASSA HELD!!!111
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.184
Standard

öhm:
Zitat:
C:\apachef riends\xampp\htdocs\dev\core\exceptions
ist die leerstelle da wieder ein copy und paste-fehler ?
robo47 ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2006, 12:42   Nach oben    #3
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Liegt irgendwie am vbCode. Natürlich ist da keiner Leerstelle!
Und wenn man ehrlich ist, könnte das auch net wirklich der Usprung eines solchen Problems sein.


Also ich spinne doch .. MANN.

Es muss eine Datei mit dem Namen der aufzurufenden Datei im System-root liegen. Da muss gar nichts drin sein, aber sie muss existieren.

Hat denn niemand eine Idee?
Jetzt will ich endlich mal richtig intensiv programmieren und dann hakt es schon bei der ersten Sache, obwohl ich nicht mal weiß, warum es hakt ...

Geändert von Ben (02.06.2006 um 16:27 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2006, 16:01   Nach oben    #4
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Danke für die rege Teilnahme ..

Konkrete Frage:
Wie verhält sich __autoload() denn zum include_path?
Wir innerhalb der Funktion eigentlich der gesamte include_path durchsucht oder nur der System-root?


@WarrenFaith:
Danke für den Denkanstoß.


[EDIT]
Eventuell schau ich mir das gleich mal als Alternative an:
http://de.php.net/manual/en/language...load.php#66162

Also das Prinzip.

Geändert von Ben (02.06.2006 um 16:27 Uhr).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2006, 16:32   Nach oben    #5
Jay
Gast
 
Beiträge: n/a
Standard

file_exists verwendet keinen include_path!

Bei dir wird zuerst geprüft ob TestClass existiert ist das nicht der Fall muss eine FileNotFoundException geworfen werden. Da ./FileNotFoundException.php aber nicht existiert und file_exists keinen include_path verwendet wird mit einem Fatal Error abgebrochen.

Zend Framework bietet eine Methode namens Zend::isReadable an welche den include_path verwendet. (http://framework.zend.com/manual/en/...sreadable.html)

ezComponents verwenden sogenannte autoload Arrays, welche auch nicht uninteressant sind.

-- Jay

Geändert von Jay (02.06.2006 um 16:37 Uhr).
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.06.2006, 16:44   Nach oben    #6
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

MANN. Ich bin so ein Honk.
http://de3.php.net/manual/en/functio...ists.php#50680

Danke. Hat sich erledigt. Hab es nun so gemacht
PHP-Code:
function __autoload($classname
{
    
$extension '.php';
    
$filename str_replace('_'DIRECTORY_SEPARATOR$classname) . $extension;
    
    if(!@include_once(
$filename))
    {
        throw new 
FileNotFoundException($filename);
    }      

Danke nochmals!


[EDIT]
Ich habe meinen Denkfehler schon begriffen. Ganz so DAUig bin ich dann doch net. Was eZ und Zend nutzen ist mir schnuppe.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


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

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 An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Probleme mit RSS heohni PHP-Programmierung 21 13.10.2006 12:10
Welches Join soll ich verwenden? Chr!s Datenbanken 8 06.07.2006 12:33
Query verbessern? björn Datenbanken 4 05.06.2006 13:48
Probleme bei 2 Animated gifs gleichzeitig auf dem MAC maxpower24 Desktop-Applikationen und Grafik 2 14.08.2004 22:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:59 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.0.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44