# Alle Dateien eines Ordners auslesen



## -GS-Master (14. Februar 2007)

Hallo ich wollte Fragen wie ich am besten alle Dateien eines Ordners auslesen -.-
Dass einzige das ich dazu weiß ist dass ich dann "*.*" angeben muss mehr jedoch nicht ...

Was ich damit bezwecken will 
Na wenn ich ein PHP-Upload Script habe kann ich anscheinend nur eine Datei auswählen und natürlich keinen Ordner -.-

Will demnach das ganze "umgehen" in dem ich erstmal alle Dateien auslese nim Namen diese in eine Whileschleife setze und dann eben die Dateien Hochladen lasse was ja dann gehen würde ^^

Hoffe das ganze funktioniert wie ich mir das vorstelle -.-
Danke schon mal
Gruß Günny


----------



## birnkammer (14. Februar 2007)

Hallo,

schau dir einfach mal die dazu passende Seite im PHP-Manual an: http://de.php.net/manual/de/ref.dir.php

Besonders in den Kommentaren findest du oft gute Tipps. 

Viele Grüße


----------



## -GS-Master (14. Februar 2007)

Lese es mir durch wobei ich sagen muss dass ich von zum Beispiel meinem Rechner dass auf den Ftp server laden möchte -.- dass meinte ich damit ...


----------



## Flex (14. Februar 2007)

Dann solltest du dir die FTP Funktionen anschauen.


----------



## birnkammer (14. Februar 2007)

Achso, ok du kannst es natürlich mit den FTP-Funktionen in Verbindung mit den Verzeichnis-Funktionen versuchen:


```
<?php
$conn_id = ftp_connect($ftp_server); 

 $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// Verbindung überprüfen
if ((!$conn_id) || (!$login_result)) { 
        echo "FTP Verbindung ist fehlgeschlagen!";
        echo "Verbindungasufbau zu $ftp_server mit Username $ftp_user_name versucht."; 
        exit; 
    } else {
        echo "Verbunden zu $ftp_server mit Username $ftp_user_name";
    }

// Datei hochladen
$d = dir($verzeichnis);
 while (false !== ($entry = $d->read())) {
   if($entry=='.' OR $entry=='..')  continue;
                 
 $upload = ftp_put($conn_id, $entry, $entry, FTP_BINARY); 

// Upload überprüfen
if (!$upload) { 
        echo "FTP-Upload ist fehlgeschlagen!";
    } else {
        echo "Datei $source_file auf Server $ftp_server als $destination_file hochgeladen";
    }
}

// FTP Verbidung schließen
ftp_close($conn_id); 
?>
```
das ist jetzt mal ein ungetestes Beispiel von mir, wenn es noch Unterordner gibt es das ganze natürlich noch etwas komplizierter.


----------



## Dennis Wronka (15. Februar 2007)

Vielleicht kann Dir ja meine FTP-Klasse etwas dabei helfen.
Zumindest kann sie die Abhaengigkeit von den FTP-Funktionen entfernen da sie mit fsockopen() arbeitet.


----------



## DrSoong (15. Februar 2007)

So wie ich die Frage von -GS-Master verstehe, will er nicht irgendein Verzeichnis am Server sondern am PC des Users auslesen. Daher ist das keine Frage von PHP sondern eventuell JS, Java oder ähnlichen. Lieg ich damit ein bisschen richtig?


Der Doc!


----------



## -GS-Master (15. Februar 2007)

Ja ganz recht ^^
Zurzeit muss ich für jede Datei die ich hochladen möchte ein neues Imputfeld anlegen in welches in den Pfad eingebe ...

Meine Idee wie gesagt ist nun den gesamten Inhalt eines Ordners nur von den Namen her auszulesen ... Also ist mir egal ob dies ein Bild oder was anderes ist ... Wie gesagt nur die Namen welche ich gerne in einem Array hätte und dann mit einer Whileschleife die Imputfelder alle entfernen zu können und somit eben alle Dateien auf den Server zu laden

Demnach also wenn die Datei auf meinem Desktop liegen würde in dem Ordner test würde der Pfad dann wie folgt heißen


> C:\Dokumente und Einstellungen\Guenny\Desktop\test\




Ich werde mir deine Ftp-Klasse mal anschauen und auch im wo anders danach Suchen ...
Danke schon mal


----------



## Flex (15. Februar 2007)

Meiner Meinung nach ist das nicht möglich...
Ich wäre zumindest sehr geschockt, wenn der Browser die dazu nötigen Rechte hätte.
Denke da wird dir ein JavaPlugin oder ActiveX Plugin helfen können.

(Ist aber nur soweit ich das weiß...)


----------



## birnkammer (15. Februar 2007)

Nein das ist (zum Glück) nicht mal per JS möglich. Mit ActiveX kenn ich mich nicht aus, aber ich will nicht den Browser sehen, der es einer Webseite erlaubt auf lokale Ordner zuzugreifen.


----------



## -GS-Master (15. Februar 2007)

Naja ^^ wär auch zu schön gewesen ... 
Mhm demnach muss ich weiterhin alle Dateien einzeln in Textfelder eingeben ...
Oder gibt es eine andere möglichkeit alle Dateien auf einmal zu Makieren und dann eben hochzuladen denn durch angeben des Ordners lässt sich eurer Meinung nach ja nichts machen ...


----------



## Flex (15. Februar 2007)

Du könntest mit Zip Dateien arbeiten, hochladen und mit PHP weiterverarbeiten.

http://de3.php.net/zip


----------



## -GS-Master (15. Februar 2007)

Ja ich habe ja damit ja keine Probleme, jedoch soll ich für eine Schule so ein Uploadscript schreiben und die Lehrer haben größtenteils Null-Ahnung und sind froh wenn sie Word benutzen können und damit eine Homepage exportieren ...

Ok dann habe ich eine bessere Idee gerade bekommen welche mir jedoch kleine Probleme bereitet ... Glaube nun bin ich jedoch im Bereich Html -.- oder auch nich 

Absofort laden meine Lehrer also nur eine Datei Hoch und dies wäre dann ein Homepagearchive welches sie mit Word erstellen können die Datei dafür wären dann

"*.mht"

Jetzt weiß ich bloßnich wie ich diese Archive über den Webserver aufrufen kann, denn auf meinem Rechner geht dies aber über meine Webserver wird mir nur der Quelltext angezeigt ...
Gibt es da eine möglichkeit dies über PHP aufzurufen ?


edit: habe gemerkt dass dies mit dem InternetExplorer geht aber mit Firefox nicht -.- mal schaun vielleicht geht es doch

Daher wollte ich auch gleich fragen ob ihr wisst wie man mit Php diese *.MHT Dateien mit php entpacken oder in z. B.: pdf umwandeln kann ...


----------



## AlienWorkshop (16. Februar 2007)

Guck mal hier. Vielleicht hilft dir das..


```
<?php

if ($handle = opendir('.'))  // Opendir('.') öffnet den aktuellen scriptausfürhungs ort, also da wo das scirpt liegt...
{
   while (false !== ($file = readdir($handle))) // Solange es noch nicht gelesene Dateien/Ordner im Ordner gibt, mache... Sind alle Dateien und Ordner
   // durchlaufen, so wird die schleife abgebrochen.
   {
      if ($file != "." && $file != "..")  // filtert die Parent und Root Ordner aus...
      {
          // DEIN CODE
          //mit $file kannst du hier auf die datei zugreifen die grad in der schleife bearbeitet wird.
      }
   }
}
   
closedir($handle); // gibt das Ordner Handle wieder frei

?>
```


----------



## birnkammer (16. Februar 2007)

Für den Firefox gibt es eine Erweiterung, um mht-Archive anzuzeigen und auch abzuspeichern: https://addons.mozilla.org/firefox/212/

Die mht-Dateien haben IMHO aber einen festen Aufbau, also könntest du evtl sogar mit PHP die Dateien wieder in normale HTML-Dateien umwandeln.

Viele Grüße


----------



## -GS-Master (17. Februar 2007)

Habe ich mir gerade angeschaut und dies trifft zu.
Einiges scheint normales Html zu sein. Anderes ist mit base64 codiert

Habe mir jetzt einiges mal rausgesucht welches mir vielleicht helfen könnte wenn ich wüsste wie ich dies Decodieren kann ...



> <meta http-equiv=3DContent-Type content=3D"text/html; charset=3Dus-ascii">
> Content-Type: text/html; charset="us-ascii"
> Content-Type: text/xml; charset="utf-8"
> Content-Transfer-Encoding: quoted-printable
> Content-Transfer-Encoding: base64



Bilder sind bis base 64 anscheinend codiert worden. Bis auf utf-8 kann ich nichts Decodieren um dies dann seperat aufzuspalten und dann als einzelne Dateien abzuspeichern.
Wenn ihr mir etwas helfen könntet wäre dies echt stark.

Was ich bräuchte wären fürs erste die Funktionen zum Encoden von
us-ascii
utf-8
quoted-printable (kenn ich persönlich nicht)
base64

suche schonmal bei Google und utf-8 habe ich glaube ich irgendwo

Meine Frage zu Bildern -.- muss ich die De- oder Encodieren  und wie "Speichere" ich dann bestimmtes in Dateien Ab bzw. wie gebe ich diese dann aus


----------



## birnkammer (17. Februar 2007)

Also base64 kannst du mit base64_decode() dekodieren.

Du müsstest "einfach" nur die Dateinamen aus den img-Tags lesen und dann mit fopen() die datei öffnen und dann den dekodierten Text reinschreiben.

Viele Grüße


----------



## Gumbo (17. Februar 2007)

-GS-Master hat gesagt.:


> Was ich bräuchte wären fürs erste die Funktionen zum Encoden von
> us-ascii
> utf-8
> quoted-printable (kenn ich persönlich nicht)
> base64


Um etwas zu kodieren, muss es immer zwei Dinge bekannt sein: das Eingabe- und das Ausgabeformat. Wenn nun die Ausgabeformate bekannt sind, fehlen nur noch die Eingabeformate.


----------



## -GS-Master (17. Februar 2007)

Wie geil es funktioniert -.- muss alles dann nur noch in die einzelnen Dateien abspeichern.

So jetzt hätte ich eine Frage und zwar möchte ich die Datei jetzt Teil für Teil aufsplitten und zwar immer die verschiedenen "Dateien" die ich gebrauchen kann ...
Oder um es besser zu sagen immer die verschiedenen "Dateien" die ich encodieren muss und sie später als Datei abschpeichern zu können.

Meine Frage also wie ich am besten die Datei auslesen lasse.
Hier ein "kleines" Beispiel denn die Datei ist ja riesig.
Ich möchte mir ein Script schreiben, welches diese MHT Dateien nach bestimmten Merkmalen durchsuchen und dann eben von einer bestimmten Zeile bis zur nächsten bestimmten Zeile.

Zum Beispiel kommt in der Datei irgendwo am anfang mal diese hier vor



> ------=_NextPart_01C75135.DA8515E0
> Content-Location: file:///C:/D0C89D18/index-Dateien/image001.gif
> Content-Transfer-Encoding: base64
> Content-Type: image/gif
> ...



Ist also ein kleienr Abschnitt einer MHT Datei in welche noch mehrere Solche Abschnitte drinnen stehen.

Als erstes möchte ich wenn solch ein Abschnitt kommt folgendes "auslesen"



> ------=_NextPart_01C75135.DA8515E0
> Content-Location:
> Content-Transfer-Encoding:
> Content-Type:
> ...



Also erstmal nach was Codiert wurde und als zweites wie die Datei heißt ( Conten-Type )
und als Zweites möchte ich dann nur die Datei Informationen auslesen. Im Beispiel von oben also die Ovale Form, welche mit Base64 Codiert wurde.

Diese möchte ich durch die ganze Datei machen, bis ich sie vollkommen aufgespittet habe um dann jede einzelne Datei abzuspeichern ... Dies weiß ich ja wie es geht -.-

Könnt ihr mir sagen, wie ihr diesese Projekt angehen würdet 
Danke schon mal



Um das ganze nochmal verständlicher zu machen.
Die MHT Dateien sind immer wie folgt aufgebaut

1. Index.htm --> Codiert nach den us-ascii Zeichen
    (Normaler Html aufbau mit den Tags  ...)
2. Jetzt folgen die ganzen Dateien, also die Bilder welche immer wie in meienm Beispiel 
    dagestellt werden. Codiert wird hier nach Base64
3.  Zuletzt folgt eine normel filelist.xml welche immer bei Microsoft verwendet wird ^^
    Codiert nach utf-8

Was bestimmt hilfreich demnach ist, wäre "------=_NextPart" welches jeden Abschnitte trennt und dann eben am anfang die informationen gibt. brauche jedoch dann nur die Datei  Info ... also das Codierte.


----------

