Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.

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

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?

problem jetzt klarer?

nö..........

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

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?

Weil du an die 32bit grenze von PHP stoeßt.

Wie man das umgeht...keine Ahnung :o

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

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.

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.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.