Zur Navigation

PHP-Upload

1 lava

Nun habe ich wieder ein Problem, was eigentlich wieder einen neuen Thread erfordert: Da ich zuhause nur UMTS habe und das in letzter Zeit spinnt, wollte ich den Upload der Dateien auf den Server via FTP vom Firmenrechner aus machen. Dort habe ich aber leider eine Installationssperre und kann mir so weder Cygwin noch Filezilla oder dergleichen einrichten, und das Kommandozeilen-FTP ist scheinbar auch gesperrt (jedenfalls bekomme ich eine Fehlermeldung : unbekannte Fehlernummer) .

Nun hab ich aus einem anderen Forum den Tip aufgegriffen, mir ein PHP-Upload zu schreiben... Versteh ich das richtig, daß ich dann auf http://sm.ismine.de eine Seite einrichten könnte, deren Aufruf mir dann künftig erlaubt, auch ohne FTP einfach über den Browser Dateien auf den Server hochzuladen? Auch in beliebige Unterverzeichnisse? Das wäre natürlich super. Bin für Tips, wie so ein Upload aussehen könnte, dankbar....

Frohe Sylvester!

29.12.2006 17:28 | geändert: 29.12.2006 17:29

2 Jörg

Hallo lava,

Nun habe ich wieder ein Problem, was eigentlich wieder einen neuen Thread erfordert

In dem Fall einen neuen Thread eröffnen, dann muss ich nicht verschieben :)

Wie man in PHP ein Upload-Script erstellen kann ist u.a. hier bechrieben:

http://www.it-academy.cc/article/1359/PHP:+Upload+per+HTTP.html

Ansonsten gibt es hierzu auch noch fertige Scripte:

http://www.php-free.de/Datei-Management/Datei-Upload/

Versteh ich das richtig, daß ich dann auf http://sm.ismine.de eine Seite einrichten könnte, deren Aufruf mir dann künftig erlaubt, auch ohne FTP einfach über den Browser Dateien auf den Server hochzuladen? Auch in beliebige Unterverzeichnisse?

Sofern die Dateirechte auf dem Server ausreichend gesetzt sind, sollte dies machbar sein. Das Script sollte dann aber gut geschützt sein (am besten per .htaccess), so dass nur du darauf Zugriff hast

29.12.2006 17:53 | geändert: 29.12.2006 17:59

3 lava

Bei PHP-free steht ein Script dabei mit Passwordschutz, da würde ich mir gern mal den Quellcode ansehen. Aber das scheint bei PHP-free nicht zu gehen, nur download einer exe-Datei? (Und das will ich ja hier am Firmencomputer nicht ausführen....) Hab ich da gar keinen Zugriff auf den Sourcecode? Das wär ja schade. Jedenfalls würden mich ggf. noch Tips interessieren, wie das mit dem Passwordschutz geht. (Obwohl es natürlich für meine kleine Webseite wohl nicht das Problem wäre, wenn ich erstmal ungeschützt arbeite.... Und wenn dann die ganze Homepage mit allen Fotos erstmal on wäre, könnte ich das Script ja auch wieder löschen, bevor ich die HP bewerbe....)

Gibt es eigentlich auch eine Möglichkeit, gleich mehrere Dateien mit Platzhalter z.B. alle .php - Dateien mit *.php hochzuladen?

Oder meinetwegen alle Dateien aus einem Unterordner, in den ich dann entsprechend die Dateien vorher reinkopiere, die hochgeladen werden sollen?

03.01.2007 09:40 | geändert: 03.01.2007 09:57

4 Jörg

Aber das scheint bei PHP-free nicht zu gehen, nur download einer exe-Datei? (Und das will ich ja hier am Firmencomputer nicht ausführen....) Hab ich da gar keinen Zugriff auf den Sourcecode? Das wär ja schade.

Bei php-free.de wird auf die externen Downloadseiten verwiesen. Ein PHP-Scrip als .exe-Datei ist wohl eher ungewöhnlich (vielleicht eine Installationsdatei für Windows?), aber nicht der Normalfall

Jedenfalls würden mich ggf. noch Tips interessieren, wie das mit dem Passwordschutz geht.

Auf SELFHTML ist beschrieben, wie man mit der .htaccess einen Passwortschutz anlegt:

http://de.selfhtml.org/servercgi/server/htaccess.htm#verzeichnisschutz

(Obwohl es natürlich für meine kleine Webseite wohl nicht das Problem wäre, wenn ich erstmal ungeschützt arbeite

... solange keiner Kenntnis von doeem Script besitzt...

Gibt es eigentlich auch eine Möglichkeit, gleich mehrere Dateien mit Platzhalter z.B. alle .php - Dateien mit *.php hochzuladen?

Im Browser kann man über das Upload-Formular soweit ich weiß nur eine Datei auf einmal auswählen.

03.01.2007 11:28

5 lava

Ich hab mir das mit dem einfachen Upload-Script jetzt einmal angesehen und wollte gern fragen, ob es so gehen könnte:

Eine Datei mit dem Formular:

<html><head></head><body>
<form action="holedatei.php" method="post" enctype="multipart/form-data">

Welche Datei? <input type="file" name="welchedatei"><br>
Welches Directory? <input type="text" name="welchesverzeichnis">
<br>
<input type="submit" value="Hochladen"></form>

</body></html>

Diese Datei soll abfragen, welche Datei vom lokalen Rechner auf welches Unterverzeichnis in sm.ismine.de (momentan wäre das MINE für den Fototicker -muß ich dann einfach MINE angeben, wenn der Server sm.ismine.de heißt und das im Verzeichnis sm.ismine.de/MINE landen soll ? - ) hochladen soll. Da wäre dann die Frage, in welcher Form (falls obige Syntax überhaupt korrekt ist?) die Eingaben gemacht werden müssen - wäre z.B. Pics/foto.jpg als Dateiname korrekt (wahrscheinlich nicht, sondern der komplette Pfad ab /home , oder? wie krieg ich den bei meinem Firmenrechner raus? bzw. wie lautet der, wenn ich die Datei dann von einem USB-Stick abhole? einfach e:/Pics/foto.jpg , also reicht das e: dann für "Quelle USB-Stick"?)
und ist es richtig, daß der Verzeichnisname, der ja dann zu einer PHP-Variable wird, einfach vom type="text" ist ?


Es gäbe dann entsprechend eine 2. PHP-Datei namens holedatei.php, die das eigentliche Script enthält:

<http><head></head></html><body>
<? php if (isset($_FILES['welchedatei'])) {
$source=$_FILES['welchedatei']['tmp_name'];
$target=$welchesverzeichnis."/".$_FILES['welchedatei']['name'];
move_uploaded_file($source,$target); } ?> </body></html>


Habe ich den Targetnamen richtig zusammengesetzt?

Und wenn ich es richtig verstehe, könnte ich auch den <?PHP ?> Teil in dieselbe Datei schreiben wie das Formular, sofern ich dann das action="holedatei.php" ersetzen würde durch action="<?PHP print $_SERVER['PHP_SELF'] ?>" und es wäre ganz egal, welche Positionen die beiden Teile (HTML-Formular und PHP-Teil) in dieser einen Datei haben (in einer Beispieldatei war der PHP-Bereich in ein <div></div> eingeschlossen - ist das erforderlich?)


Momentan erscheint folgende Warnung - liegt das daran, daß ich erst mit dem Serverhost sprechen müßte, damit ein Upload überhaupt möglich wird? Oder hab ich Syntaxfehler gemacht?

Warning: move_uploaded_file(MINE/Pics/gummi7.jpg): failed to open stream: Permission denied in /var/www/*** on line 8

Warning: move_uploaded_file(): Unable to move '/tmp/phpxVmdkn' to 'MINE/Pics/gummi7.jpg' in /var/www/*** on line 8

03.01.2007 23:20 | geändert von Jörg: 04.01.2007 02:11

6 Marcel (Gast)

Es gibt doch immer einen "Durchsuchen"-Button. Mit diesem kannst du doch ganz einfach den Pfad einer Datei (in diesem Fall ein Bild) herausfinden und automatisch einfügen lassen. Ansonsten wäre der von dir genannte Pfad in Ordnung und würde funktionieren, wenn sich die Datei auch wirklich dort befindet.

Generell würde ich dir raten, erst einmal einen Crash-Kurs in Sachen HTML zu machen (kann man relativ leicht in zwei bis drei Stunden verstehen) und dann versuchen ein vernünftiges Formular mit Tabellen zu basteln. Danach könntest du dich ja nochmal am Hochladen der Dateien versuchen.

Soll nur ein Tipp von mir sein. Natürlich kannst du es auch jetzt sofort weiter probieren, allerdings hat dieses Script keinerlei Sicherheiten (kein Passwortschutz, keine Upload-Maximalgröße, keine Formatüberprüfungen...) und theoretisch könnte jeder Dateien auf "deinem Server" hochladen.

EDIT: <div> ist nicht nötig. Dieser Tag beeinflusst lediglich das Aussehen deines Scripts.

03.01.2007 23:44 | geändert: 03.01.2007 23:46

7 Marcel (Gast)

Ich habe dir jetzt einfach mal ein Script geschrieben, vielleicht kannst du etwas damit anfangen (ein Passwortschutz ist bereits eingebaut: Username - "Username", Passwort - "Passwort"):


<?php
session_start();
?>
<html>
<head>
<title>Upload</title>
</head>
<body>
<?php
$key = 0;
if ($_POST["username"] == "Username" AND $_POST["password"] == "Passwort") {
    $key = 1;
    $_SESSION["username"] = $_POST["username"];
    $_SESSION["password"] = $_POST["password"];
}
if ($_SESSION["username"] == "Username" AND $_SESSION["password"] == "Passwort")
    $key = 1;
if ($key == 1) { 
    echo "<p><b>".$_SESSION["username"]."</b>, erfolgreich eingeloggt</p>";
    if ($_POST["name"] AND $_FILES["file"]["name"]) {
         $name = strip_tags(trim($_POST["name"]));
         if (strlen($name) > 101)
             echo "<p><font color=\"red\">Der Name darf maximal 100 Zeichen lang sein.</font></p>";
         elseif ($_FILES["file"]["size"] > 512001)
             echo "<p><font color=\"red\">Die Datei darf maximal 500 KB gro&szlig; sein.</font></p>";
         else {
             copy($_FILES["file"]["tmp_name"], "./Bilder/".$name."_".$_FILES["file"]["name"]."");
             echo "<p><font color=\"green\">Die Datei <b>".$name."</b> wurde erfolgreich hochgeladen.</font></p>";
         }
    }
    echo "<form action=\"upload.php\" enctype=\"multipart/form-data\" method=\"post\">";
    echo "<table>";
    echo "<tr>";
    echo "<td width=\"50\"><b>Name</b>:</td><td><input type=\"name\" name=\"name\" value=\"".$_POST["name"]."\" size=\"30\"></td>";
    echo "</tr>";
    echo "<tr>";
    echo "<td><b>Datei</b>:</td><td><input type=\"file\" name=\"file\"></td>";
    echo "</tr>";
    echo "<tr>";
    echo "<td></td><td><input type=\"submit\" value=\"Hochladen\"></td>";
    echo "</tr>";
    echo "</table>";
    echo "</form>";
} else {
    echo "<form action=\"upload.php\" method=\"post\">";
    echo "<table>";
    echo "<tr>";
    echo "<td width=\"80\"><b>Username</b>:</td><td><input type=\"text\" name=\"username\" value=\"".$_POST["username"]."\" size=\"25\"></td>";
    echo "</tr>";
    echo "<tr>";
    echo "<td><b>Passwort</b>:</td><td><input type=\"password\" name=\"password\" size=\"25\"></td>";
    echo "</tr>";
    echo "<tr>";
    echo "<td></td><td><input type=\"submit\" value=\"Login\"></td>";
    echo "</tr>";
    echo "</table>";
    echo "</form>";
}
?>
</body>
</html>

Gespeichert werden die Dateien im Order "Bilder" im selben Verzeichnis. ;)

04.01.2007 00:48 | geändert: 04.01.2007 00:50

8 lava

Hallo Marcel, danke. Mit HTML hab ich meine frühere Webseite gestaltet, jetzt ging es erstmals gezielt darum, mit PHP zu arbeiten (und dabei PHP zu erlernen). Und das Script brauche ich nur sehr vorübergehend für die Uploads, bis die Webseite steht. Daß da noch keine Sicherheiten drin sind, ist mir klar. Hab ich ja auch in einem früheren Beitrag geschrieben, daß es mir erstmal um's Prinzip geht, wie so ein Script überhaupt funktioniert. Daß es immer einen Durchsuchen-Button gibt, kann ich ja nicht wissen, wenn ich bisher nie nach Files gesucht hab, weil ich ja bisher kein PHP zur Verfügung hatte (mein früherer Host hatte das gar nicht zur Verfügung gestellt). Ob der jetzige mir den Zugriff via Script erlaubt, wollte ich ja erstmal mit diesem Script testen - und ich interpretiere die Fehlermeldung mal so, daß es NICHT geht momentan - das war ja eine der wesentlichen Fragen vorhin. Warum ich überhaupt ein Script brauche, hab ich ja auch mal hier ins Forum geschrieben: weil ich daheim nur UMTS hab und zumindest die Fotos über den Firmenrechner hochladen will, wo aber FTP gesperrt ist -> danach kann das Script im Prinzip gleich wieder runter, deswegen war mir das mit den Sicherheiten auch nicht so wichtig (hätte es funktioniert, hätte ich es sogar heute abend noch wieder entfernen und mich dann erstmal um die Sicherheiten kümmern können, bevor ich es mal einen ganzen Arbeitstag am Stück drauflasse -> das war ja mein allererster Scriptschreibe-Test überhaupt; in den Büchern steht noch mehr "Schnickschnack", den hab ich auch nicht überlesen, aber ich wollte es erstmal ganz roh probieren, ob es klappt -> daher angesichts der Fehlermeldung auch die Frage ans Forum, ob bis dahin zumindest die Syntax stimmt).
Fühl mich also jetzt ein bißchen ungerechtfertigt angegriffen, wenn du schreibst, lern erstmal HTML (ich kann auch Tabellen machen, aber die sind mir für diesen Zweck nun wirklich nicht wichtig, ich will ein schnelles Tool nur zum eigenen Gebrauch, das soll nicht den Lesern meiner Webseite präsentiert werden, sondern soll die Webseite überhaupt erst hochladen und dann wieder gelöscht werden bzw. passwordgeschützt irgendwo für mich bereitgehalten werden, das muß nicht schön aussehen, sondern funktionieren) -> aber ich danke dir natürlich trotzdem sehr herzlich für den Script-Entwurf. Die Frage, wie das dann mit Paßwörtern geht, wäre dann sowieso danach nämlich noch aufgekommen, wenn ich nicht jetzt schon "hängengeblieben" wäre.....
Gute Nacht erstmal, Lava

04.01.2007 01:01 | geändert: 04.01.2007 01:07

9 Jörg

Ja, die Fehlermeldungen lassen darauf schließen, dass die Dateirechte nicht ausreichend sind

04.01.2007 02:13

10 Marcel (Gast)

Tut mir wirklich leid. Ich wollte dich keineswegs angreifen, auch wenn mein Beitrag vielleicht an manchen Stellen so geklungen hat.

Sicher, man benötigt an dieser Stelle keine Tabelle. Allerdings bin ich ein Freund von Ordnung und wenn ich etwas mache, dann mache ich es lieber gleich richtig. Und hier wäre es kein Zeitunterschied gewesen. Es würde nur eben besser aussehen und du würdest gleich dein Wissen erweitern bzw. deine Fähigkeiten festigen.

Zu meinem Script:

Dieses Script ist auf keinen Fall optimal. Man könnte es an einigen Stellen noch verbessern. Es soll dir lediglich als Grundlage dienen. Wenn du Fragen zu dem Script hast, dann kannst du diese gerne in diesem Thread stellen. :)

04.01.2007 02:13 | geändert: 04.01.2007 02:14