Zur Navigation

PHP-Upload [4]

31 Jörg Kruse

Hm, wenn ich jetzt ein ganzes Verzeichnis hochladen will, es dafür aber keine Fertigfunktion gibt, dann müßte ich mir doch selbst etwas schreiben können im Stil: Baue ein Array, in das alle Dateinamen des Quellverzeichnisses eingetragen werden. Geh das Array durch und lade alle Dateien hoch.

Soweit ich weiß, kann ein Browser mit einer POST-Anfrage nur eine Datei auf einmal hochladen. Du könntest aber vielleicht ein Zip-File hochladen, und dieses auf dem Server wieder entpacken (siehe hierzu Beispiel auf php.net)

13.01.2007 19:09 | geändert: 13.01.2007 19:10

32 Jörg Kruse

Zitat von lava
copy($_FILES["file"]["tmp_name"], "./Bilder/".$_FILES["file"]["name"]."");


Wieso ist vor /Bilder ein Punkt, also ./Bilder ?

"./" ist relativ gesehen dasselbe Verzeichnis

Und wozu ist ganz am Schluß ein ."" ?

Der Punkt fügt die Strings $_FILES["file"]["name"] und "" zusammen (man könnte ."" in diesem Fall auch weglassen)

13.01.2007 19:18 | geändert: 13.01.2007 19:28

33 Jörg Kruse

Zitat von lava
1. Verwendung von https: muß ich da Rücksprache mit dem Hoster halten, oder ist das etwas, was ich selbst einschalten kann?

Der Hoster muss hierfür ein Zertifikat für die betreffende Domain beantragen

2. Wenn ich den PHP-Quelltext mal bewußt sichtbar machen will, gibt es da eigentlich eine Möglichkeit?

mit der Funktion showsource()

13.01.2007 19:28

34 Rudy

1. Verwendung von https: muß ich da Rücksprache mit dem Hoster halten, oder ist das etwas, was ich selbst einschalten kann?
Dein Hoster muss Dir SSL ermöglichen und die Informationen zur Nutzung des Dienstes zur Verfügung stellen. Für gewöhnliche SSL-Verbindungen muss man ein gültiges Zertifikat kaufen, das jährlich ein par Öcken kostet. Sonst bekommt jeder der die Seite betritt, eine Sicherheitsmeldung, ob er das Zertifikat akzeptieren möchte oder nicht, was aber auch nicht weiter schlimm ist. Wenn Du es genauer wissen möchtest, hier ist ein Wiki-Artikel zu HTTPS.

2. Wenn ich den PHP-Quelltext mal bewußt sichtbar machen will, gibt es da eigentlich eine Möglichkeit?
Ja, gib ihn als Text mit echo/print oder readfile aus.

13.01.2007 19:38

35 lava

Also, ich lerne ja gerade erst PHP und gucke immer mal wieder gern zur Erinnerung in meinen eigenen Quelltext von früheren Seiten. Wenn ich z.B. jetzt in der Firma für die Firma eine Seite mache, wäre es nützlich, auch meinen Code, den ich mal für meine private HP geschrieben hab, mit Ansicht->Quelltext anschauen zu können über das normale Internet. Wenn ich euch richtig verstehe, sind aber weder readfile noch show_source dafür gedacht, sondern dann müßte ich schon vorher wissen, welche Seite ich später nochmal ansehen will. Also, ich kann nicht allen meinen Seiten, die keine geheimen <?PHP ?> Teile enthalten, einfach sagen, sie sollen das in der Quelltextansicht immer zeigen?

@jörg: Ja, das mit ."" hatte ich auch so verstanden, wie du es erklärt hast. Es hat mich halt nur gewundert, weil es so überflüssig ist und ich dachte, dann müsse es doch noch einen tieferen Sinn geben....


Daß es keine Upload-Funktion direkt mittels Post für Verzeichnisse gibt, wußte ich ja bereits aus der früheren Forums-Diskussion. Aber gibt es eine Möglichkeit, wenn ein Verzeichnisname übergeben wurde, sich alle drinliegenden Dateinamen auflisten zu lassen (also sowas wie der ls-Befehl unter Linux, nur halt im Rahmen der PHP- oder HTML-Kommandos ?)

13.01.2007 20:19 | geändert: 13.01.2007 20:35

36 Rudy

dann müßte ich schon vorher wissen, welche Seite ich später nochmal ansehen will. Also, ich kann nicht allen meinen Seiten, die keine geheimen <?PHP ?> Teile enthalten, einfach sagen, sie sollen das in der Quelltextansicht immer zeigen?
Genau, das ist so nicht vorgesehen. Da könnte sonst ja jeder kommen... :)

Was Du machen könntest: Wenn Du einen Login hast, mach Dir einen Link auf jede Seite (der nur für Deinen Admin-Benutzer sichtbar ist) in der Art <a href="\showsource.php?file=<?=__FILE__?>">PHP-Quelltext anzeigen</a>. In der 'showsource.php' musst Du natürlich wieder den Login prüfen, um sicherzugehen, dass kein Dritter das Skript benutzt. Innerhalb dieser Prüfung machst Du dann showsource($_GET['file']);. Wenn Du die Link-Anzeige in ein include auslagerst musst Du auch nur minimale Änderungen an den Dateien vornehmen, dann musst Du aber __FILE__ an das Include übergeben, z.B. mittels einer Funktion. __FILE__ nimmt immer den Wert des Dateinamen des Skriptes an, von dem es aufgerufen wird.

13.01.2007 20:36 | geändert: 13.01.2007 20:43

37 lava

Klar, aber wenn ich keinen geheimen Text mit Passwörtern o.ä. will, dann dürfte ja ruhig jeder kommen.... oder?

Gibt es denn jetzt einen ls-Befehl in HTML/PHP/Javascript o.ä. für Verzeichnisse???

13.01.2007 20:41 | geändert: 13.01.2007 20:43

38 Rudy

Klar, aber wenn ich keinen geheimen Text mit Passwörtern o.ä. will, dann dürfte ja ruhig jeder kommen.... oder?
Das bleibt natürlich Dir überlassen.

Gibt es denn jetzt einen ls-Befehl in HTML/PHP/Javascript o.ä. für Verzeichnisse???

Einen direkten 'ls'-Befehl wie von Linux gewohnt gibt es nicht, aber es gibt opendir und readdir in PHP. HTML ist eine Auszeichnungssprache und keine Programmiersprache, verfügt deshalb über keine Funktionen. Javascript läuft beim Client und kann nicht auf Serververzeichnisse zugreifen.

13.01.2007 20:46 | geändert: 13.01.2007 20:54

39 lava

Danke für die schnelle Antwort. Aber ich will auch nicht das Serververzeichnis auflisten lassen, sondern das Clientverzeichnis. Um dann die Namen in ein Array zu schreiben und dann mein bereits bestehendes Datei-Upload-Script für jeden Eintrag im Array aufzurufen, bis schließlich doch der Inhalt des ganzen Verzeichnisses (Clientverzeichnisses!) hochgeladen ist in mein im Upload-Script wählbares Serververzeichnis.

13.01.2007 21:05

40 Rudy

Das geht nicht, es wäre ein immenses Sicherheitsrisiko, wenn Du von einer Webseite aus die Dateien eines Clients ermitteln könntest. Du kannst nur <input type="file" ... > verwenden, aber auch mehrere untereinander, z.B. auch mittels array-namen.

<input type="file" name="datei[]">
<input type="file" name="datei[]">
<input type="file" name="datei[]">
Ein Beispiel hierfür findest Du hier.

13.01.2007 21:11