ebiz-webhosting
- Ad -
php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-10-2009, 17:31
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Lightbulb filetype() innerhalb einer Klasse

Nabend alle zusammen,

Hab gerade ein kleines Problem, wo ich nicht nachvollziehen kann, warum dies zu diesem Fehler kommt.

Ziel: Ich möchte eine File-Struktur per rekursion einlesen und in eine eigene Array-Struktur bringen. Das ansich ist auch nicht das Thema. In meiner Klasse habe ich eine setDir() Methode, in der wiederum eine weitere readDir(); Methode aufgerufen wird, die letztendlich auch die rekursion durchläuft und mir alles einlesen soll.
Hier habe ich einfach mal den Code meiner beiden Methoden, damit Ihr sehen könnt, wie ich die Array-Struktur aufbauen möchte:

PHP-Code:
    /* setDir */
    
public function setDir$path$rec true )
    {
        if ( 
file_exists$path ) )
        {
            
$this->structure[0]["title"] = "ROOT";
            
$this->structure[0]["open"] = true;
            
            
$this->readDir$path );
            
$this->structure[0]["childs"] = $this->readDir$path$rec );
        }
    }

    
/* readDir */
    
private function readDir$path$rec true )
    {
    
        
$childs = array();
    
        
$verz opendir $path );
        while ( 
$file readdir$verz ) ) 
        {
            if ( 
filetype$path.$file ) != ".." && filetype$path.$file ) != "." 
            {
                
$item = array();
                
$item["title"] = $file;
                
                if ( 
filetype$path.$file ) == "dir" 
                {
                    
$item["open"] = true;
                    
$item["childs"] = $this->readDir$path.$file );
                }
                
                
$childs[] = $item;
            }
        
        }
        
closedir$verz );
        
        return 
$childs;
        
    } 
Soeben habe ich den Fehler in sofern eingrenzen können, dass er erst ab der 2ten Ebene auftritt. Also sobald er das erste mal in die Zeile...
PHP-Code:
$item["childs"][] = $this->readDir$path.$file ); 
...springt. Was gibts zu beachten, wenn ich sowas vor habe?
Die reine Struktur, die mir mein Skript erzeugt, ist schon super so wie ich es haben will. Nur es kommt zu folgender Fehlermeldung bem Aufruf der filetype() Funktionen.

PHP-Code:
Warningfiletype() [function.filetype]: Lstat failed for ........ 
Dank euch, Gruß Mario
Mit Zitat antworten
  #2 (permalink)  
Alt 25-10-2009, 17:33
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 24.486
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Kontrolliere die Pfadangabe.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 25-10-2009, 17:39
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

PHP-Code:
if ( filetype$path.$file ) != ".." && filetype$path.$file ) != "." 


Aus dem Manual zu filetype():
"Returns the type of the file. Possible values are fifo, char, dir, block, link, file, socket and unknown."
Mit Zitat antworten
  #4 (permalink)  
Alt 25-10-2009, 17:51
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard filetype

Hi,

Danke für die Hinweise. Jetzt habe ich es mal etwas umgeschrieben.
Jetzt kommt der Lstat Fehler erst wieder ab der nächsten Ebene.

PHP-Code:
    /* readDir */
    
private function readDir$path$rec true )
    {
    
        
$childs = array();
    
        
$verz opendir $path );
        while ( 
$file readdir$verz ) ) 
        {
            if ( 
$file != ".." && $file != "." 
            {
                
$item = array();
                
$item["title"] = $file;
                
                if ( 
filetype$path.$file."/" ) == "dir" 
                {
                    
$item["open"] = true;
                    
//$item["childs"] = $this->readDir( $path.$file."/" );
                
}
                
                
$childs[] = $item;
            }
        
        }
        
closedir$verz );
        
        return 
$childs;
        
    } 
Kommentiere ich die Zeile ein, dann kommen die Fehler / Warnungen.

Gruß Mario
Mit Zitat antworten
  #5 (permalink)  
Alt 25-10-2009, 17:55
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 680
fireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
PHP-Code:
if ( filetype$path.$file ) != ".." && filetype$path.$file ) != "." 
Hinzu kommt, dass $path und $file zusammengeklebt niemals die Werte ".." oder "." haben können, wenn $path nicht leer ist. Den String $file zu prüfen, sollte vollkommen ausreichen.

Und warum benutzt du filetype() statt einfach is_dir($file) zu nehmen?
__________________
PHP-Code:
class Brick implements Throwable {
    
// ... 


Geändert von fireweasel (25-10-2009 um 18:00 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 25-10-2009, 18:01
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard filetype

Bei . und .. prüfe ich nun nur noch mit $file. Soweit gehts.
Aber bei if ( filetype( $path.$file."/" ) == "dir" ) "muss" ich mit $path.$file."/" prüfen, da sonst der Pfad nicht stimmt.

Und wie gesagt... im root verzeichnis gehts noch. Sobald er in die Rek. springt, gehen die Meldungen los.

Mario
Mit Zitat antworten
  #7 (permalink)  
Alt 25-10-2009, 18:07
combie
 PHP Expert
Links : Onlinestatus : combie ist gerade online
Registriert seit: May 2006
Beiträge: 2.925
combie befindet sich auf einem aufstrebenden Ast
Standard

Offensichtlich hast du eine Problem mit Pfaden in deiner Rekursion. Auf Papier auf malen und ordentlich Debuggen dürfte helfen.


Aber warum benutzt du nicht die eingebaute SPL Rekursion?

z.B. so:
PHP-Code:
<?php
error_reporting
(-1); 
ini_set('display_errors'TRUE);


$such_in    '.';   // Verzeichnis, welches durchsucht werden soll


// Rekursivgedöns
$dir =  new RecursiveIteratorIterator(
              new 
RecursiveDirectoryIterator($such_in));
              
foreach(
$dir as $datei)
{
  echo 
"Tiefe: ".$dir->getDepth().' ';
  echo 
$datei->getPathname()."<br>";
}
__________________
Wir werden alle sterben
Mit Zitat antworten
  #8 (permalink)  
Alt 25-10-2009, 20:15
GELight
 Registrierter Benutzer
Links : Onlinestatus : GELight ist offline
Registriert seit: Sep 2004
Beiträge: 243
GELight ist zur Zeit noch ein unbeschriebenes Blatt
GELight eine Nachricht über ICQ schicken
Standard RecursiveIteratorIterator

Wo finde ich denn Infos zu diesen Klassen?
Wenn ich nicht weiß, welche Methoden es dafür gibt, dann kann ich schlecht damit arbeiten
Und ein print_r(); gibt mir bei versuchter Ausgabe des Objects $dir ( in deinem Beispiel ) leider auch keinerlei Klassenstruktur zurück.

Wäre aber ansich schon geil, wenn ich das Dinge nutzen könnte, da die wohl auch sehr schnell ist.

Gruß Mario
Mit Zitat antworten
  #9 (permalink)  
Alt 25-10-2009, 20:18
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

PHP: RecursiveIteratorIterator - Manual
PHP: RecursiveDirectoryIterator - Manual
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
unset instanz innerhalb klasse frank7l7 PHP Developer Forum 4 11-12-2008 20:40
Cgi Script innerhalb einer PHP-Klasse ausführen Naggi ASP, PERL, CGI, C und alles andere 2 23-10-2006 20:20
Funktionsaufruf innerhalb einer Klasse bweichel PHP Developer Forum 10 19-11-2004 10:46
Funktion innerhalb einer Klasse rlebek PHP Developer Forum 1 11-11-2004 13:34
[OOP] In einer Klasse eine andere Klasse verwenden? JamieWolf PHP Developer Forum 34 26-08-2004 16:20

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an


PHP News

MariaDB 5.5 veröffentlicht
MariaDB 5.5 veröffentlichtDie freie MySQL-Alternative MariaDB wurde in der stabilen Version 5.5.23 veröffentlicht und soll einige Verbesserungen gegenüber Oracles Communityversion von MySQL mitbringen.

16.04.2012 | Berni

Deutsche Yii Framework Community
Deutsche Yii Framework CommunitySeit dem 19.03.2012 gibt es für die Yii PHP Framework Community ein deutsches Zuhause.

20.03.2012 | dhcomputer

 

Aktuelle PHP Scripte

EM 2012 Tipp-Spiel ansehen EM 2012 Tipp-Spiel

Online Tipp-Spiel zur Fussball Europameisterschaft 2012, basierend auf php-Script mit hinterlegter mySql-Datenbank

27.05.2012 tippimnetz | Kategorie: PHP/ Spiele
Advanced Login ansehen Advanced Login

Login-System und Kundenverwaltung, die sich spielend leicht in bestehende Webseiten einbauen lässt und einen enormen Funktionsumfang bietet. Ihre eigene Webseite muss mit Advanced Login nicht umständlich an ein fertiges System angepasst werden.

25.05.2012 Madden | Kategorie: PHP/ Kundenverwaltung
BROM CMS/BelCal 3 ansehen BROM CMS/BelCal 3

Spezielles CMS für Betreiber von Ferienwohnungen. Komplette Seitenerstellung online, Verwaltung mehrerer Objekte, Reservierungssystem mit sofortigem Abgleich im Belegungskalender und vieles mehr bietet dieses Content Management System.

25.05.2012 belcal2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:38 Uhr.