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 06-01-2020, 09:42
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 326
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard verzeichnis aus alias auslesen funktioniert nicht mir scandir()

Hallo zusammen,

nach längerer Zeit habe ich mal wieder ein kleines Problem, bei dem ich eure Hilfe benötige. Installiert ist xampp mit php7.3.12 und Apache 2.4.41. Der Server wird nur lokal betrieben.

Ich bin dabei mir eine Bilddatenbank meiner Bilder zu erstellen.
Da das mittlerweile eine größere Anzahl ist, sind die einzelenen Verzeichnisse auf einer externen Festplatte in einem Sammelverzeichnis ausgelagert.
Die Struktur ist wie folgt aufgebaut und es wird auch nicht tiefer geschachtelt.
-- Bilder
|- Ordner 1
|- Ordner 2
|- Ordner 3
|--- Ordner 3.1
|--- Ordner 3.2

Um die externe Festplatte ansprechen zu können habe ich einen Alias erstellt.
wenn ich diesen im Browser anspreche werden auch alle Verzeichnisse angezeigt. Soweit so gut, der Alias funktioniert also. Zumindest für den Browser.

Mein Problem ist nun, das scandir() nicht funktioniert wenn ich auf aus dem Alias auslesen will. Folgend der Code dazu.
Seltsamerweise funktioniert es aber wenn das Verzeichnis 'bilder' im htdocs-Verzeichnis des xampp liegt ?!

PHP-Code:
#Unterverzeichnisse aus Alben-Ordner auslesen
$alledateien scandir('bilder'); // 

#Array mit Verzeichnissen erstellen
foreach ($alledateien as $datei)

    if (
$datei != "." && $datei != ".."
    {
        
$dirs[] = $datei//Verzeichnisse in Array schreiben
    
}

Folgende Fehlermeldungen kommen beim Versuch vom Alias einzulesen:
Warning: scandir(bilder,bilder): Das System kann die angegebene Datei nicht finden. (code: 2)
Warning: scandir(bilder): failed to open dir: No such file or directory
Warning: scandir(): (errno 2): No such file or directory

Was mir auffällt, ist das in der ersten Meldung zweimal der Alias genannt wird. Warum das so ist kann ich leider nicht sagen.
Weitere Vermutung ist, dass das mit scandir() aus einen Alias gar nicht geht, sondern über opendir(), readdir() und closedir() gemacht werden muss.



Kann mir jemand hier bitte weiterhelfen ?!?!


Meine Theorie mit opendir usw. stimmt leider auch nicht. Auf diesem Wege erhalte ich die gleichen Fehlermeldungen.
PHP-Code:
if ($handle opendir('bilder')) {
    echo 
"Verzeichnis-Handle: $handle\n";
    echo 
"Einträge:\n";

    
/* Das ist der korrekte Weg, ein Verzeichnis zu durchlaufen. */
    
while (false !== ($entry readdir($handle))) {
        echo 
"$entry\n";
    }

    
closedir($handle);

__________________
Gruß

Michael


Geändert von fritzje610 (06-01-2020 um 09:56 Uhr)
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 06-01-2020, 12:42
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 280
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Da Du ohnehin mit PHP 7.3 arbeitest, könntest Du Dir auch die entsprechenden Iterator Klassen dazu mal ansehen. Mittels der PHP eigenen Klasse RecursiveDirectoryIterator und der RecursiveCallbackFilterIterator Klasse könnte es eventuell funktionieren. Du kannst mittels der FileSystemIterator Klasse festlegen, dass auch Symlinks gefolgt werden soll.

Als Basis hierfür müsstest einen Symlink (Alias) in dem Verzeichnis ablegen, in dem Dein PHP Skript ausgeführt wird. Der initialisierte Iterator folgt dann den Verzeichnissen, liest alle Inhalte dieser Vezeichnisse aus und erzeugt zu jeder Datei und zu jedem relevaten Verzeichnis ein SplFileInfo Objekt.

Der CallbackFilter ist notwendig, um den technischen Aufwand so gering wie möglich zu halten. Du kannst mit dem Filter festlegen, dass Du Bilddateien und die relevanten Verzeichnisse ausgelesen werden. Du könntest im Filter ebenfalls definieren, welche Verzeichnisse nicht ausgelesen werden sollen.

PHP-Code:
$directory = new RecursiveDirectoryIterator('bilder'FilesystemIterator::FOLLOW_SYMLINKS);
$filter = new RecursiveCallbackFilterIterator($directory, function($current$key$iterator) {
    
// Versteckte Dateien und Verzeichnisse nicht beachten
    
if ($current->getFilename()[0] === '.') {
        return 
FALSE;
    }
  
    
// relevante Unterverzeichnisse beachten
    
if ($current->isDir()) {
        return 
true;
    } 

    
// relevante Dateien beachten
    
else {
        return 
in_array($current->getExtension(), [ 'jpg''png' ]);
    }
});

$files = array();
$iterator = new RecursiveIteratorIterator($filter);

foreach (
$iterator as $info) {
    
$files[] = $info->getPathname();

Da Du von einer relativ großen Menge an Dateien und Verzeichnissen gesprochen hast, macht es eventuell Sinn die Dateien über ein yield() zu prozessieren, um den Speicherverbrauch so gering wie möglich zu halten.

Ich hoffe Du kannst mit diesem doch eher objektorientiertem Ansatz etwas anfangen. Bei Fragen einfach fragen.
__________________
MM Newmedia | MeinBlog
Mit Zitat antworten
  #3 (permalink)  
Alt 06-01-2020, 13:44
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 326
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo zusammen,

erstmal vielen Dank an ezkimo für den objektorientierten Ansatz.
Aber da kenn ich mich überhaupt noch nicht aus. Mache noch alles prozedural.

Für das einlesen habe ich jetzt eine Lösung gefunden, bei der ich sogar den Alias nicht bräuchte. Man muss den absoluten Pfad des Filesystems nutzen. Anstatt:
PHP-Code:
#Unterverzeichnisse aus Alben-Ordner auslesen
$alledateien scandir('bilder'); 
PHP-Code:
#Unterverzeichnisse aus Alben-Ordner auslesen
$alledateien scandir(LW:Pfad); 
Allerdings habe ich jetzt das Problem, das die Bilder beim anzeigen nicht mehr angezeigt werden Anstatt des Bildes wird ein weißer Platzhalter angezeigt. Weder der absolute Pfad zum Bild
HTML-Code:
<img src=h:\\bilder\\" . $row['verzeichnis'] . "\\" . $row['dateiname'] . " width='200' height='150'></img>
Noch der über den Alias funktionieren
HTML-Code:
<img src=bilder/" . $row['verzeichnis'] . "/" . $row['dateiname'] . " width='200' height='150'></img>
Hat jemand ne Idee wie ich meine Bilder wieder zur Anzeige bringen kann ? ? ?
__________________
Gruß

Michael

Mit Zitat antworten
  #4 (permalink)  
Alt 08-01-2020, 07:15
fritzje610
 Registrierter Benutzer
Links : Onlinestatus : fritzje610 ist offline
Registriert seit: Mar 2004
Ort: Nahe der schönen Loreley
Beiträge: 326
fritzje610 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

Fehler gefunden, läuft alles.
Man muss natürlich auch im img-Tag die Anführungszeichen richtig setzen.

Danke an alle ! ! ! !
__________________
Gruß

Michael

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
scandir: Verzeichnis zurück Wasser_Wanderer PHP Developer Forum 2 04-01-2014 03:00
[Flash] htmlFiles aus einem Verzeichnis auslesen unbekannt814754 Grafik / Design / Flash ... 5 17-11-2006 23:19
Site funktioniert mit Mozilla FireFox korrekt, aber nicht mir IE 6.0 sTOOs HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 15 07-06-2004 14:28
Dateinamen aus Verzeichnis auslesen PfeifferN PHP Developer Forum 6 25-05-2004 18:40
neuste datei aus verzeichnis auslesen james Apps und PHP Script Gesuche 23 29-07-2002 13:01

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

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

Microweber CMS

Open source, drag and drop website builder

13.01.2020 Berni | Kategorie: HTML5/ EDITOR
PhoneGap Apps mit JS, CSS3 und HTML5 erstellen ansehen PhoneGap Apps mit JS, CSS3 und HTML5 erstellen

PhoneGap, Framework zur Erstellung hybrider Applikationen für mobile Endgeräte.

13.01.2020 Berni | Kategorie: App-Entwicklung
Bo)Tickets

Bo)Tickets bietet Ihnen eine Schnittstelle für Kundenanfragen an. In dem Script definieren Sie Supportbereiche, also zum Beispiel „Technik, Buchhaltung, Support“. Ihre Kunden können dann über ein Formular eine Anfrage abschicken.

31.12.2019 bocombo | Kategorie: PHP/ Ticketsystem
 Alle PHP Scripte anzeigen

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