Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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

Geschrieben

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.

Geschrieben

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

Geschrieben

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?

Geschrieben
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

Geschrieben
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?

Geschrieben
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 ;)

Geschrieben

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.

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...