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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-10-2009, 18: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, 18:33
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
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, 18:39
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
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, 18: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, 18:55
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel 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?

Geändert von fireweasel (25-10-2009 um 19:00 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 25-10-2009, 19: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, 19:07
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
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, 21: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, 21:18
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
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 21:40
Cgi Script innerhalb einer PHP-Klasse ausführen Naggi ASP, PERL, CGI, C und alles andere 2 23-10-2006 21:20
Funktionsaufruf innerhalb einer Klasse bweichel PHP Developer Forum 10 19-11-2004 11:46
Funktion innerhalb einer Klasse rlebek PHP Developer Forum 1 11-11-2004 14:34
[OOP] In einer Klasse eine andere Klasse verwenden? JamieWolf PHP Developer Forum 34 26-08-2004 17: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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:24 Uhr.