CHris08156 Geschrieben 8. November 2005 Geschrieben 8. November 2005 Hi! Kurzbeschreibung: Vor einiger Zeit habe ich ein Script geschrieben/verändert mit dem ich Dateien auf meinen Server hochladen kann. Nun wollte ich wissen, ob es auch möglich ist, Dateien mit PHP upzuloaden. Erklärung: Hochladen zum Server: Datei auswählen, Username und Passwort eintragen abschicken -> Datei wird auf dem Server gespeichert. Kein Problem. Runterladen vom Server: Mit einem Script habe ich mir die Verzeichnisstruktur ausgeben lassen. So kann ich durch alle Verzeichnisse auf meinem Rechner browsen (es sind keine FTP-Verzeichnisse; das Script ist natürlich auch Passwort geschützt) Ist es nun möglich, dass ich auf eine Datei, aus der angezeigten Verzeichnisstruktur, auswähle und mir runterlade. Denkbar wäre, dass die Datei in das FTP-Verzeichnis kopiert wird und von da aus heruntergeladen wird. Aber das gefällt mir nicht. Gibt es einen anderen Web? Wenn ich auf die Eigenschaften einer auf dem Server gespeicherten Datei zugreifen kann, muss man doch auch den Inhalt rausbekommen. mfG CHris Zitieren
robotto7831a Geschrieben 8. November 2005 Geschrieben 8. November 2005 Ich bin jetzt etwas verwirrt. Was willst Du? Hochladen oder runterladen? Frank Zitieren
geloescht_JesterDay Geschrieben 8. November 2005 Geschrieben 8. November 2005 Ist es nun möglich, dass ich auf eine Datei, aus der angezeigten Verzeichnisstruktur, auswähle und mir runterlade. :confused: Klar, wie solltest du sonst z.B. diese Seiten hier sehen? Im Normalfall (also wenn sich die Datei im Vezeichnnis befeindet, auf das der Web-Server Zugriff hat (httpdocs/webroot)) geht das ja direkt, wenn du die Datei anklickst bzw. im Zweifel mit "speichern unter...". Wenn Sie da nicht liegt oder du damit z.B. auch HTML Dateien zum Download anbieten willst (standard für HTML ist anzeige im Browser), kannst du die Datei auch mit PHP einlesen, entsprechende Header Anweisungen an den Browser senden und dann die Datei ausgeben. Wenn du hier im Forum nach "PDF downloaden" suchst, wirst du genug Beispiele dazu finden. Dasselbe geht natürlich auch mit jeder anderen DAtei. Zitieren
TinTin Geschrieben 8. November 2005 Geschrieben 8. November 2005 Wenn du dem File habhaft werden kannst, sprich wenn du seine Position auf den Server hast, kannst du es entweder direkt mit der header()-Funktion an den Browser schicken oder du erstellst vor her noch eine temporäre Datei un die schickst du an den Browser. header("Content-type: Content-type: text/html"); header("Location: http://meinserver/path/datei.htm"); [/PHP] TinTin Zitieren
CHris08156 Geschrieben 8. November 2005 Autor Geschrieben 8. November 2005 Das interessante ist ja, dass ich local auf dem Server nach dateien suche. Also ich hab ja dieses Script geschrieben und dem über gebe ich ein Verzeichnis, z.B. "c:/". Dann gibt es alle Dateiennamen und Verzeichnissnamen zurück, die auf dem Server unter c:/ zu finden sind. Die kann ich aber im browser nicht mit http://... ansprechen. problem jetzt klarer? Zitieren
zirri Geschrieben 8. November 2005 Geschrieben 8. November 2005 problem jetzt klarer? nö.......... Zitieren
Amstelchen Geschrieben 8. November 2005 Geschrieben 8. November 2005 Die kann ich aber im browser nicht mit http://... ansprechen.es ist auch nicht sinn der sache, dass dokumente ausserhalb des DocumentRoot (sei es nun welcher webserver auch immer) per HTTP zugreifbar sind. wenn, dann muss die datei mittels scriptsprache (z.b. php) in das per webserver zugreifbare verzeichnis kopiert werden oder nach setzen des passenden Content-type header als ausgabestream rausgeschrieben werden. was andere wäre entgegen dem design eines HTTP-servers. ausnahmen macht allerdings auch hier z.b. php, das in der grundkonfiguration teilweise einen zugriff auf das komplette dateisystem erlaubt, wenn es nicht mit bestimmten mechanismen (open_basedir, etc.) gesichert wird. s'Amstel Zitieren
CHris08156 Geschrieben 8. November 2005 Autor Geschrieben 8. November 2005 setzen des passenden Content-type header als ausgabestream rausgeschrieben werden. s'Amstel Kannst du das noch ein wenig erläutern, wie so etwas geht? Noch ne Frage am Rande: filesize($filename) gibt bei einer Dateigröße über 1GB ne negative Zahl zurück. warum und wie kann ich das umgehen? Zitieren
Whatever Geschrieben 8. November 2005 Geschrieben 8. November 2005 Weil du an die 32bit grenze von PHP stoeßt. Wie man das umgeht...keine Ahnung Zitieren
geloescht_JesterDay Geschrieben 8. November 2005 Geschrieben 8. November 2005 Noch ne Frage am Rande: filesize($filename) gibt bei einer Dateigröße über 1GB ne negative Zahl zurück. warum und wie kann ich das umgehen? <?php // Function function size_translate($filesize) { $array = array( 'YB' => 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024, 'ZB' => 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024, 'EB' => 1024 * 1024 * 1024 * 1024 * 1024 * 1024, 'PB' => 1024 * 1024 * 1024 * 1024 * 1024, 'TB' => 1024 * 1024 * 1024 * 1024, 'GB' => 1024 * 1024 * 1024, 'MB' => 1024 * 1024, 'KB' => 1024, ); if($filesize <= 1024) { $filesize = $filesize . ' Bytes'; } foreach($array AS $name => $size) { if($filesize > $size || $filesize == $size) { $filesize = round((round($filesize / $size * 100) / 100), 2) . ' ' . $name; } } return $filesize; } // Example echo size_translate(1024 * 1024 * 1024 * 1024 * 1024 * 4.95); // Returns: 4.95 Petabytes ?> Und auf deine Dateien kannst du über http:// gar nicht zugreifen. Was du machen musst, ist, dass du jeder Datei einen Link gibst auf eine andere php Datei, die als Parameter den Pfad und Namen bekommt und dann die Datei mit entspr. Header ausgibt. also ung so: ... <!-- Die Pfade sollten mit htmlSpecialChars vorher "gesäubert" werden --> <a href="getFile.php?file=c:\Programme\Apache\conf\httpd.conf"> c:\Programme\Apache\conf\httpd.conf</a><br /> <a href="getFile.php?file=c:\Programme\Apache\conf\.htpasswd"> c:\Programme\Apache\conf\.htpasswd</a><br /> ... #getFile.php <?php $aContentType = mime_content_type($_GET["file"]); header("Content-type: ".$aContentType); header("Content-disposition: attachement"); readfile($_GET["file"]); ?> [/php] Nur mal als Beispiel. Das ist aber alles andere als sicher und wenn du sowas auf deinem Rechner laufen lässt... wozu brauchst du dann ne Firewall oder überhaupt was? Mit diesem Skript öffnest du deinen kompletten Rechner(!), das sollte dir klar sein. Auch der PW Schutz ist nur dann einigermassen sicher, wenn du das ganze noch über https machst. Wenn du schon von irgendwo auf deinen Rechner zugreifen willst, benutz lieber VPN o.ä. EDIT: Hab noch überlegt, ob man $_GET["file"] vielleicht irgendwie prüfen sollte... aber wozu, hast ja eh vollen Zugriff auf den Rechner Zitieren
CHris08156 Geschrieben 8. November 2005 Autor Geschrieben 8. November 2005 Danke! So hab ich mir das gedacht. Hmm ich weiß, dass das nen bissle unsicher ist. Aber mann braucht ja das Passwort um sich erstmal das Verzeichnis anschauen zu können. Das heißt, theoretisch wird nie jemand auf ein Link stoßen, mit dem er irgendwelche Dateien bei mir runterladen kann. Zitieren
geloescht_JesterDay Geschrieben 8. November 2005 Geschrieben 8. November 2005 Hmm ich weiß, dass das nen bissle unsicher ist. Aber mann braucht ja das Passwort um sich erstmal das Verzeichnis anschauen zu können. Das heißt, theoretisch wird nie jemand auf ein Link stoßen, mit dem er irgendwelche Dateien bei mir runterladen kann. N bissel? Naja, wenn du meinst ... Aber dir ist auch klar, dass dein PW im Klartext über die Leitung geht und dabei vielleicht erstmal um die halbe Welt reist, bevor es bei deinem Rechner ankommt (zusammen mit der IP, wo es hinsoll)? Und ein PW geschütztes Verzeichnis kann schonmal einfach so gewisse Begehrlichkeiten wecken, und wenn aus Langeweile. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.