PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP - Wie funktioniert Dateiupload ?


Dr.Doom
2003-05-06, 20:27:44
Howdy.

Auf den Server soll man clientseitig ausgewählte Dateien hochladen können:

Clientseitig ein Datei/Verzeichnis-Browser, mit dem man auf dem Server Verzeichnisse wechseln, erstellen, löschen und umbenennen kann.

Clientseitig soll man eine Datei zum Upload auswählen können. Wieder mit einem Datei/Verzeichnis-Browser, es reicht aber, wenn man eine Datei auswählen kann, die in ein vorher erstelltes Verzeichnis (siehe oben) auf dem Server hochgeladen werden soll.

Öhm, ja, wie macht man sowas? ;)

Wudu
2003-05-06, 21:22:05
Hier ein stück Code aus einer meiner Seiten:
so machst ein handle von mehreren upgeloadeden files....

for($i=0;$i < $filenum;$i++)
{
$filenames[$i] = $_FILES["file_$i"]["name"];

if(@!copy($_FILES["file_$i"]["tmp_name"],$_SERVER['DOCUMENT_ROOT']."/files/PHPClassLib/user_".$user->ID."/".$_FILES["file_$i"]["name"]))
{
message("error","Error while adding ".$_FILES["file_$i"]["name"]);
$gotError = true;
}
}


ein Form mit einem Browse und das multipart/data nicht vergessen (im Post).

Ansonsten sag ich nur www.google.com :-)
Es gibt tonnen von PHP-Upload Tutorials!

Dr.Doom
2003-05-06, 21:49:50
$_FILES["file_$i"]["name"];
Was zum Henker ist denn file_$i für eine seltsame Variable ??? !?

ein Form mit einem Browse und das multipart/data nicht vergessen (im Post).
Form mit einem Browse ??? !?


Ansonsten sag ich nur www.google.com :-)
Es gibt tonnen von PHP-Upload Tutorials!
Naja, ich frag' lieber zuerst mal :D ...

JTHawK
2003-05-06, 23:52:13
Originally posted by Dr.Doom $_FILES["file_$i"]["name"];Was zum Henker ist denn file_$i für eine seltsame Variable ??? !?
die variable lautet

$i (das ist eine zahl)

und file_$i wäre dann zb. file_2, file_3 usw usw

is ja ne for schleife .. da wird immer erhöht um eins mussu nur angucken :D noch net viel programmiert wa ;)

JTHawK
2003-05-06, 23:57:30
Originally posted by Dr.Doom Form mit einem Browse ??? !?
ein formular mit einer dateiauswahl :D (einem "browser")

sowas wie beim antworten auf diesen thead .. das durchsuchen da unten ..

Dr.Doom
2003-05-07, 00:27:59
quote:
--------------------------------------------------------------------------------
Originally posted by JTHawK

die variable lautet

$i (das ist eine zahl)

und file_$i wäre dann zb. file_2, file_3 usw usw

is ja ne for schleife .. da wird immer erhöht um eins mussu nur angucken noch net viel programmiert wa
--------------------------------------------------------------------------------


Doch, aber nur Java, C/++ und so'n Schotter, kein PHP.

So zusammengestoppelte Variablen ( hier: file_$i ) sind mir neu

Matthias2x
2003-05-07, 01:03:55
Originally posted by Dr.Doom

Doch, aber nur Java, C/++ und so'n Schotter, kein PHP.

So zusammengestoppelte Variablen ( hier: file_$i ) sind mir neu :o .

anstatt "file_$i" man könnte es auch so schreiben:

$var = 'file_'.$i;

ist im prinzip nichts anderes als einen String mit dem jeweiligen Wert für $i kombinieren.

Wudu
2003-05-07, 22:35:58
Originally posted by JTHawK

ein formular mit einer dateiauswahl :D (einem "browser")

sowas wie beim antworten auf diesen thead .. das durchsuchen da unten ..

danke fürs übersetzen!
sorry für meine unpräziese angabe, aber ich war "zu faul" dir nen code zu schreiben, also hab ich den von meiner seite genommen.
Der Code ist eben dazu da, mehrere files zugleich zu uppen, die kommen in einem Array an (mehrere forms mit browse :P)!

Wudu
2003-05-07, 22:40:44
So zusammengestoppelte Variablen ( hier: file_$i ) sind mir neu :o .


das geht auch nur in PHP! Java nimmt das nette "+" php den "." oder eben nix, auser du hast '', was in Java eigentlich Character ist, in PHP aber auch für Strings verwendet werden kann, hierbei wird jegliches Excapen unnotwendig (besonders praktisch wenn man HTML ohne dynamischen Inhalt ausgibt).

-----------------
sorry habe aus versehen deinen post editiert statt zu replyen, ich glaub ich bin heut etwas daneben!

Unregistered
2003-05-14, 00:46:39
Hallo ihrs,
habe nun schon alle moeglichen Methoden von verschiedenen PHP-Versionen ausprobier :
$userfile_name
$_FILES['userfile']['tmp_name']
etc.
der Rest meines formulars gleicht eurem, dennoch laedt das skript nix hoch...:

echo "<INPUT type=\"hidden\" name=\"MAX_FILE_SIZE\">\n";
echo "<INPUT TYPE=\"file\" NAME=\"userfile\">\n";
...
if(@!copy($_FILES['userfile']['tmp_name'],"pics/avatars/".$SEName.".".$endung[0])) {
...

wie sieht es mit rechten und den PHP-Settings auf dem Server aus?!

Koennte es evtl. sein, dass mein Anbieter da n paar Sachen nich gesetzt hat?!

Dr.Doom
2003-05-14, 13:45:38
Ok, Dateiupload in ein festes Verzeichnis ( zB "/tmp/blubber/" ) funktioniert.

Jetzt möchte ich aber noch auswählen können, wohin die Datei hochgeladen werden soll.

/tmp/blupper/ sozusagen als 'Basisverzeichnis' ( man kann/darf keine Verzeichnisebene höher ). Innerhalb dieses Verzeichnissen soll man dann weitere Verzeichnisse anlegen können und in diese Verzeichnisse dann Dateien hochladen.

Schön und gut, aber ich weiss nichtmal, wie ich das aktuelle Verzeichnis ( hier: /tmp/blubber/ ) samt enthaltenen Verzeichnissen und Dateien anzeigen kann :D .

zB so soll es in etwa aussehen


Aktuelles Verzeichnis: /tmp/blubber/

<Eine Verzeichniseben höher>

test-verzeichnis | <dateigrösse> | <zugriffsrechte>
eine_datei.zip | <dateigrösse> | <zugriffsrechte>
noch_eine_datei.zip | <dateigrösse> | <zugriffsrechte>

usw

[ *ein textfeld* ] [Browse-Button] [Upload-Button]



Tja ;) ...




Ok, ich habe da ein Skript gefunden, dass im grossen und ganzen das machen sollte, was ich benötige.

Nur tut sich ein neues Problem auf:


Wenn ich irgendeine Dateioperation durchführen will, zB ein Verzeichnis erstellen (vgl Code-Schnipsel unten), dann wird mir der Zugriff verweigert:
Warning: mkdir() failed (Permission denied) in /tmp/blubber/data/filebrowser.php on line 100 .


{[...]
if(!mkdir($path . '/' .$text1, 0775)) echo ("Couldn't create $text1<br>");
}[...]


Wenn ich mich aber mit Putty einlogge kann ich auf dem Server tuen und lassen, was ich will.
Wie kann ich das hinbekommen, dass es auch mit dem Skript funktioniert?

Irgendwie muss man dem Filesystem auf dem Server doch mitteilen können, dass 'ich' das bin ??? !?

Matthias2x
2003-05-14, 17:50:09
[QUOTE][SIZE=1]Originally posted by Dr.Doom
[veraltet, siehe unten]

habe hier eine Funktion die dir alle Files und Unterverzeichnisse sortiert ausgehend vom angegebenen Basisverzeichnis anzeigt:

<?php
function zeige_files($dir)
{
if($dir) {
$filelist = array();
$dirhandle = opendir($dir);
while($file = readdir($dirhandle))
{
if($file != '.' && $file != '..')
{
$filelist[] = $file;
}
}
closedir($dirhandle);
if($filelist)
{
sort($filelist);
}
return $filelist;
}
else {
return false;
}
}

$basisdir = '/tmp/blubber/';
$dateiliste = zeige_files($basisdir);
if($dateiliste){
for($i=0;$i<count($dateiliste);$i++){
if(is_dir($dateiliste[$i])){
$verz[] .= $dateiliste[$i];
}else{
$file[] .= $dateiliste[$i];
}
}
}
echo '<b>Verzeichnisse:</b><br>';
foreach($verz as $v => $vz){
echo $vz.'<br>';
}
echo '<br><b> Dateien:</b><br>';
foreach($file as $f => $fi){
echo $fi.'<br>';
}
?>

das ganze ist mit heißer Nadel gestrickt,man kanns sicher auch einfacher bzw.besser machen,aber es funktioniert! Was die Probleme mit dem anlegen von Verzeichnissen angeht,ich vermute hier einfach das dein Provider PHP im Safemode konfiguriert hat. Dann wird das ganze etwas schwierig. U.U. kannst du mittels dem Script gar keine Verzeichnisse anlegen weil PHP unter einer anderen User-ID ausgeführt wird. Im Zweifel hilft hier nur ein Blick in die FAQ deines Providers.