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 Bewertung: Bewertung: 8 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 17-03-2009, 22:36
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard is_dir funktioniert nicht richtig

Hallo,

es ist zum Mäuse melken.
Ich habe folgende Funktion:

PHP-Code:
$dirs = array();
$handles opendir('../');
while (
false !== ($dir readdir($handles))) {
         if (
is_dir($dir)) {
                 
$dirs[] = $dir;
         }

Das Problem ist, dass mir nur ein Array mit 2 Verzeichnissen gebaut wird.

Wenn ich die is_dir Bedingung entferne, gibt er mir den gesamten Verzeichnisinhalt zurück. Mit allen 10 Verzeichnissen.

Alle Verzeichnisse haben die selben Rechte und auch die selbe Gruppe / Besitzer.

Das Problem ist demnach: is_dir gibt mir von den vorhandenen 10 Verzeichnissen nur 2 zurück.
Lasse ich is_dir weg, bekomme ich ein Array mit 10 Verzeichnissen und allen Dateien im Verzeichnis.

Ich habe es lokal mit xampp sowie auf dem Server mit apache2 im Einsatz und es ist bei beiden das selbe Phenomen.

Gibt es eine andere Möglichkeit die Verzeichnisse aus einem Verzeichnis einzulesen?

Vielen Dank im Voraus für Eure Hilfe.

Grüsse
Francosdad
Mit Zitat antworten
  #2 (permalink)  
Alt 17-03-2009, 23:28
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

if (is_dir('../' . $dir)) {
Mit Zitat antworten
  #3 (permalink)  
Alt 17-03-2009, 23:42
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

probier es mal mit scandir()
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #4 (permalink)  
Alt 18-03-2009, 00:33
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

oder mit:

PHP-Code:
$dirs glob('../*',GLOB_ONLYDIR); 
__________________
Wir werden alle sterben
Mit Zitat antworten
  #5 (permalink)  
Alt 18-03-2009, 09:43
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke, Danke, Danke ....

PHP-Code:
$dirs glob('../*',GLOB_ONLYDIR); 
Funktioniert super!

So, da Ihr mir geholfen habt, komme ich wieder.

Grüße
Francosdad
Mit Zitat antworten
  #6 (permalink)  
Alt 18-03-2009, 09:49
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

PHP-Code:
is_dir() 
verlangt immer einen Absoluten Pfad... ansonsten gibt die Funktion immer false zurück.
Mit Zitat antworten
  #7 (permalink)  
Alt 18-03-2009, 10:17
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
PHP: is_dir() verlangt immer einen Absoluten Pfad... ansonsten gibt die Funktion immer false zurück. francosdad
Das verstehe ich schon, aber die Frage stellt sich ja, warum is_dir bei 8 Verzeichnissen false zurück gibt und bei 2 true?! Obwohl alle Verzeichnisse im selben Pfad liegen!

Die Variante mit glob funktioniert eigentlich besser, da das Array mir fertig geliefert wird und ich es nicht erst mit einer Schleife bauen muß.

Gruß
Francosdad
Mit Zitat antworten
  #8 (permalink)  
Alt 18-03-2009, 10:32
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
verlangt immer einen Absoluten Pfad... ansonsten gibt die Funktion immer false zurück.
Nö, funktioniert auch super mit relativen Pfaden. Allerdings hat der TO der Funktion den falschen Pfad übergeben, wie ghostgambler schon gezeigt hat. Das zwei Verzeichnisse gefunden werde liegt wohl daran, dass auch im aktuellen Arbeitsverzeichnis zwei mit dem selben Namen vorhanden sind.
Mit Zitat antworten
  #9 (permalink)  
Alt 18-03-2009, 10:46
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Er bewegt sich im richtigen Verzeichnis! Das habe ich ganz einfach getestet, indem ich eines der beiden Verzeichnisse im gewünschten Pfad umbenannt habe und er mir diese Umbenennung auch im Array anzeigt.

Der andere Punkt ist der, dass wenn ich !is_dir schreibe, gibt er mir alle Dateien des Verzeichnisses aus.

Fazit: Er ist auf jeden Fall im richtigen Verzeichnis! Und genau das bereitet mir ja Kopfschmerzen!

Gruss
Francosdad
Mit Zitat antworten
  #10 (permalink)  
Alt 18-03-2009, 11:01
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Er bewegt sich im richtigen Verzeichnis!
readdir gibt dir immer nur den Datei-/Verzeichnisnamen zurück, nicht den kompletten Pfad. Und wenn du ein anderes Verzeichnis wie das aktuelle öffnest und du das Ergebnis von readdir an is_dir weiterreichst, so sucht diese Funktion natürlich im aktuellen Arbeitsverzeichnis. Das du zwei Treffer erhälst könnte vielleicht auch daran liegen, dass readdir die beiden Einträge . und .. liefert. Ein var_dump($dirs) nach der Schleife wird dir das bestimmt bestätigen.
Mit Zitat antworten
  #11 (permalink)  
Alt 18-03-2009, 11:21
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke für eure Anregungen, aber ich muß jetzt mal was feststellen:

1. . und .. zähle ich nicht mit dazu!
2. Er ist im richtigen Verzeichnis!!! und gibt mir exakt nur 2 Verzeichnisnamen (neben . und ..) zurück!
3. var_dump und print_r habe ich probiert und ergibt mir . und ..; sowie die zwei Verzeichnisse zurück -> Also 4 Strings im Array
4. Im aktuellen Arbeitsverzeichnis gibt es die beiden zurückgegebenen Verzeichnisnamen nicht

Genau das macht mich ja fertig! Ich habe gestern den ganzen Tag an der Funktion rumgemacht!

Wechsle ich das Verzeichnis, dann gibt er mir aus dem anderen alle Verzeichnisse korrekt aus.

Ich glaube das hat irgendwas mit dem Cache oder mit Rechten zu tun, obwohl ich Testweise allen Verzeichnissen die 0777 gegeben habe und die Besitzer sind auch identisch.

Aber egal, ich arbeite jetzt mit GLOB.

Grüße Francosdad
Mit Zitat antworten
  #12 (permalink)  
Alt 18-03-2009, 14:18
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
2. Er ist im richtigen Verzeichnis!!!
Quatsch!

Zitat:
Ich glaube das hat irgendwas mit dem Cache oder mit Rechten zu tun,
Quatsch!
__________________
Wir werden alle sterben
Mit Zitat antworten
  #13 (permalink)  
Alt 18-03-2009, 15:59
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
quote:2. Er ist im richtigen Verzeichnis!!! Quatsch!
Jetzt stellt sich mir aber die Frage in welchem Verzeichnis er ist, denn die angezeigten Ordner existieren nur im root verzeichnis!

Ich werde das mal skizzieren:

root pfad: /media/sda3/xampp/xampp/htdocs/aiot/

darunter liegen folgende verzeichnisse:

/admin
/cache
/download
/export
/icons
/images
/import
/inc
/includes
/lang
/media
/mysqldumper
/ProgressBar
/pub
/Smarty_Plugins
/templates
/templates_c
/Update-zur-Fax-Erweiterung
/upload
/zend

Unter /admin liegt meine PHP Datei, welche die Datei functions.php required, welche wiederum unter:

/admin/EG/import

liegt.

Die functions.php enthält folgende Funktion:

PHP-Code:
function getdirectory() {

    global 
$dirs;
    
$dirs = array();
    
$handles opendir('/media/sda3/xampp/xampp/htdocs/aiot/'); // import Verzeichnis im Stammpfad
        
while ($dir readdir($handles)) {
            if (
$dir != "." && $dir != ".." && is_dir($dir)) { // Bitte nur csv Dateien
                
$dirs[] = $dir// Mach ein Array aus den einzelnen Dateien
            
}
        }
    
closedir($handles);
    
var_dump ($dirs); // zum Test
    
return $dirs// Liefere das Array mit den Dateien als Resultat der Funktion zurück

Das var_dump gibt folgende Verzeichnisse zurück:

import
images
include

Wenn ich jetzt das Verzeichnis images unter dem root-Pfad in imagess umbenenne, dann gibt var_dump:

import
includes

aus!

Und genau das verstehe ich nicht! Ich denke, dass ich unter opendir() den root-Pfad angegeben habe. Trotzdem werden nur 3 Verzeichnisse ausgegeben.
Wenn ich das Verzeichnis images umbenenne, und zwar im root-Pfad, dann wird es nicht mehr ausgegeben.

Jetzt würde mich interessieren wo der QUATSCH den Fehler hat, bzw. welche Erklärung es dazu gibt.

Grüße Francosdad
Mit Zitat antworten
  #14 (permalink)  
Alt 18-03-2009, 16:51
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Dein aktuelles VZ ist /admin/EG/import
Du öffnest das VZ /
Du kriegst alle Verzeichnisnamen daraus zurück, und überprüfst dann mit is_dir nur auf den Dateinamen - ohne die Ordnerangabe - heißt er sucht die Datei in /admin/EG/import und im include-Pfad, aber nicht in /

Du verwendest die Funktion einfach falsch, und behauptest dann irgendwelche undefinierten Dinge wären dran Schuld...

Mein erster Post enthält schon die Antwort, auf die aber scheinbar nicht mal wirklich Hirnschmalz geopfert wurde.
Mit Zitat antworten
  #15 (permalink)  
Alt 18-03-2009, 18:43
francosdad
 Registrierter Benutzer
Links : Onlinestatus : francosdad ist offline
Registriert seit: Mar 2009
Beiträge: 80
francosdad ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, Du hast Recht!

Das Problem ist, dass man es auch kapieren muss!

Nach Deinem wiederholten Hinweis auf dein erstes Posting habe ich es auch verstanden.

Sorry, aber manchmal rollt die Kugel halt etwas langsamer.

Trotzdem Danke an alle und Grüße.

Francosdad
Mit Zitat antworten
Antwort

Lesezeichen


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

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 22:05 Uhr.