php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Upload Fehler


 
Sevenger
23-08-2003, 21:26 
 
Ich hab n ziemliches Problem, bei dem ich bei bestem Willen nicht weiter komme.

Ich habe eine Seite, auf der man ein Verzeichnis erstellen kann.
Dieses Verzeichnis wird dann an die nächste Seite übergeben:


echo "<a href=\"upload.step2.php?new=".$DirName."\" class=\"menu\">Weiter zu Schritt 2</a></b><br/>";


Auf dieser Seite soll man dann Bilder in das zuvor erstellte Verzeichnis uploaden können:


$CONFIG[directory] = "bilder/".$new;
(...)
if(file_exists("$CONFIG[directory]/$datei1")) {
$fehler .="Die Datei Nr.$num existiert bereits auf dem Server.<br>";
} elseif($ok!="2") {
copy ($datei3, "$CONFIG[directory]/$datei1");
$fehler .="Datei Nr.$num wurde hochgeladen.<br>";


Das Problem ist, wenn ich $new durch eine Konstante (z.B. Test) ersetze, funktioniert das Skript tadellos.
Aber wenn ich es mit der Variable verwende, werden die Dateien nicht in das zuvor erstellte Verzeichnis, sonder in die Ebene dadrüber (in diesem Fall "bilder") upgeloaded.

Weiss einer, wo die Ursachem für diesen Fehler liegt und wie ich den beheben kann?
Ich weiss einfach nicht mehr weiter...

Schon mal vielen Dank für Eure Hilfe,

so long
Sevenger

 
MelloPie
23-08-2003, 21:28 
 
evt an register globals.
nimm mal statt $new $_GET['new']

 
Sevenger
23-08-2003, 21:45 
 
Danke, es ändert aber leider nichts.
Der Fehler ist der gleiche, das Bild wird immer noch in /bilder statt in /bilder/test upgeloaded.

;(

so long
Sevenger

p.s.: Kleine Ergänzung:
Die Variable $new wird korrekt übergeben.
Ich habe auf der zweiten Seite eine Ausgabe, in der über Echo auch $new angezeigt wird.
Diese Aussgabe ist soweit richtig.

 
DSB
23-08-2003, 21:47 
 
[Vermutung=ON]

Oder der abschließende Slash fehlt, so dass PHP $new für einen Dateinamen hält und ihn deshalb streicht, weil er ja den Typ "Verzeichnis" erwartet?

$CONFIG[directory] = "bilder/".$new."/";

[Vermutung=OFF]

 
Sevenger
23-08-2003, 21:56 
 
Hatte ich auch schon vermutet, hat aber auch nix geholfen....

Das Problem scheint ja echt irgendwie komplizierter zu sein, als ich ursprünglich erwartet hab.

so long
Sevenger

 
MelloPie
23-08-2003, 22:10 
 
verfolge halt mal den Weg Deines $new mit ein paar echos dann wirste schon sehen woran es liegt
und $CONFIG['directory'] auch...
btw solltest Du Text von variablen trennen und verketten

 
DSB
23-08-2003, 22:11 
 
Mir kommt der Index des Arrays $config auch etwas spanisch vor.
Müsste es nicht so heißen?

$CONFIG['directory'] = "bilder/".$new;
(...)
if(file_exists($CONFIG['directory']."/".$datei1)) {
$fehler .="Die Datei Nr.$num existiert bereits auf dem Server.<br>";
} elseif($ok!="2") {
copy ($datei3, $CONFIG['directory']."/".$datei1);
$fehler .="Datei Nr.$num wurde hochgeladen.<br>";


Was gibt er denn aus, wenn Du Dir per echo die Variable $CONFIG['directory'] ausgeben lässt?

 
Sevenger
23-08-2003, 22:20 
 
Bei echo "$CONFIG[directory]"; bekomme ich, wenn ich vorher das Verzeichnis "nerv" erstellt habe das zurück:
bilder/nerv

sieht ja schon mal nicht schlecht aus :)

Werde jetzt noch mal Deinen Vorschlag testen...


so, hab jetzt getestet:
Bekomme diese Fehlermeldung:
Warning: Division by zero in /www/htdocs/seve/index-links/upload.step2.php on line 63

Warning: Division by zero in /www/htdocs/seve/index-links/upload.step2.php on line 66


In den betreffenden Zeilen steht folgendes:

Zeile 63: }
Zeile 64: }
Zeile 65: if(!$fehler) {
Zeile 66: $fehler .= "Es wurde keine Datei ausgewählt.<br>";


so long
Sevenger

 
DSB
23-08-2003, 22:27 
 
Division durch 0?

Ich sehe keine Division - zumindest nicht bei dem Teil des Sripts, den Du gepostet hast.

Aber bleib am Ball, das kriegen wir hin. :-)

 
Sevenger
23-08-2003, 22:37 
 
Zuerst mal vielen Dank für die rege Hilfe, mit "vereinten Kräften" muss dem doch bei zu kommen sein ;)

Ich poste mal mehr von dem Quellcode, vielleicht hilft das ja?


$CONFIG[directory] = "bilder/".$new;
$CONFIG[RequirePass] = "Nein"; # Soll eine Passwortabfrage benutzt werden? (Ja oder Nein)
$CONFIG[Password] = "passwort"; # Hier das Passwort eintragen
$CONFIG[UploadNum] = "3"; # Nummer der Upload-Felder
$CONFIG[File_Size] = "5000000"; # Maximale Datei größe in Bytes
echo $CONFIG[directory]";
if($action=="upload") {
if($CONFIG[RequirePass] == "Ja") {
if($password != "$CONFIG[Password]") {
$fehler .="Das von ihnen eingegebene Passwort ist falsch!<br>";
exit;
}
}
$num = 0;
while($num < $CONFIG[UploadNum]) {
$num++;
$datei = "fileup$num"."_name";
$datei1 = $$datei;
$datei2 = "fileup$num";
$datei3 = $$datei2;
if($datei3 != "none") {
$filesizebtyes = filesize($datei3);
$ok = 1;
if($filesizebtyes!="0") {
if($filesizebtyes < 10) {
$ok="2";
$fehler .="Datei Nr.$num ist kleiner als 10 Bytes.<br>";
}
if($filesizebtyes > $CONFIG[File_Size]) {
$ok="2";
$fehler .="Datei Nr.$num ist zu groß.<br>Sie darf Maximal $CONFIG[File_Size] Bytes haben!<br>";
}
if(file_exists("$CONFIG[directory]/$datei1")) {
$fehler .="Die Datei Nr.$num existiert bereits auf dem Server.<br>";
} elseif($ok!="2") {
copy ($datei3, "$CONFIG[directory]/$datei1");
$fehler .="Datei Nr.$num wurde hochgeladen.<br>";
}
}
}
if(!$fehler) {
$fehler .= "Es wurde keine Datei ausgewählt.<br>";
}
exit;


so long
Sevenger


wow, das wichtigste hab ich direkt vergessen ;):
/****************************************
Simple Uploader
http://www.PHPKing.de
Copyright © 2002 by [cyber]
Dieses Script darf frei benutzt werden,
solange das Copyright bestehen bleibt!
*****************************************/

(ich hab den Jungs schon ne mail geschickt, mit der Frage, ob ich das Skript überhaupt verändern darf.
Wenn sie mir das erlauben, werde ich auch bei denen sonst noch mal fragen, ob die n Plan haben, was falsch ist...

 
DSB
23-08-2003, 23:00 
 
Original geschrieben von Sevenger
[PHP]
echo $CONFIG[directory]";


Das Gänsefüßchen am Ende ist zu viel.
Kommt die Fehlermeldung deshalb?

 
Sevenger
23-08-2003, 23:49 
 
Vermutlich nicht, das echo wurde ja korrekt ausgegeben.

Die Fehlermeldung kam, nachdem ich den Code hierhin abgeändert habe:

$CONFIG['directory'] = "bilder/".$new;
(...)
if(file_exists($CONFIG['directory']."/".$datei1)) {
$fehler .="Die Datei Nr.$num existiert bereits auf dem Server.<br>";
} elseif($ok!="2") {
copy ($datei3, $CONFIG['directory']."/".$datei1);
$fehler .="Datei Nr.$num wurde hochgeladen.<br>";


Verzeiht bitte, wenn ich jetzt Fehler mach, aber dieser Code macht mich fertig.
Ich habe angefangen mich hemmungslos zu betrinken, damit mir heute nacht nicht php Befehle durch den Traum schwirren.
Vielleicht sehe ich morgen klarer ;)

so long
Sevenger

 
DSB
24-08-2003, 00:17 
 
Da geht es Dir ja, wie mir. :D
Nach meinem fünften, leckeren Weizenbier, habe ich auch gerade so meine Probs. :-)

Was aber klar zu sein scheint: nachdem ich den Code für das Script gesehen habe, scheint der Aufruf $CONFIG[directory] wohl richtig zu sein.
Also versuch es nochmal so und schreibe mir mal, was dann das Ergebnis ist.

$CONFIG[directory] = "bilder/".$new;
(...)
if(file_exists($CONFIG[directory]."/".$datei1)) {
$fehler .="Die Datei Nr.$num existiert bereits auf dem Server.<br>";
} elseif($ok!="2") {
copy ($datei3, $CONFIG[directory]."/".$datei1);
$fehler .="Datei Nr.$num wurde hochgeladen.<br>";
Und jetzt bin ich echt gespannt. :confused:

 
Sevenger
24-08-2003, 00:34 
 
Tataaa:
Parse error: parse error, unexpected '\"', expecting ',' or ';' in /www/htdocs/seve/index-links/upload.step2.php on line 36

*narf*, ich hasse php ;)

Ich glaube ich brauche mehr alkohol, das erträgt man nüchtern ja nicht mehr :)


$CONFIG[directory] = "bilder/".$new;
$CONFIG[RequirePass] = "Nein"; # Soll eine Passwortabfrage benutzt werden? (Ja oder Nein)
$CONFIG[Password] = "passwort"; # Hier das Passwort eintragen
$CONFIG[UploadNum] = "3"; # Nummer der Upload-Felder
$CONFIG[File_Size] = "5000000"; # Maximale Datei größe in Bytes
echo $CONFIG[directory]";
if($action=="upload") {
if($CONFIG[RequirePass] == "Ja") {
if($password != "$CONFIG[Password]") {
$fehler .="Das von ihnen eingegebene Passwort ist falsch!<br>";
exit;
}

die letzte zeile (}) ist Zeile 36...

so long
Sevenger

 
DSB
24-08-2003, 01:22 
 
Dann ändere doch endlich mal die Zeile:

echo $CONFIG[directory]";

in
echo $CONFIG[directory]."<br>";

 
Sevenger
24-08-2003, 02:37 
 
So, hab ich gemacht.
Das ändert zwar am Fehler direkt nichts, aber nach dem Upload hab ich eine andere Ausgabe:
bilder/

Vor dem Upload stand da noch:
bilder/gnaa

Deuten kann ich das allerdings nicht?!

so long
Sevenger

 
Sevenger
24-08-2003, 18:44 
 
Argh, ich hab den Fehler jetzt teilweise im Griff.
Also das Verzeichnis wird korrekt erstellt und die Datei auch genau in dieses Verzeichnis upgeloaded.
Leider kann ich jetzt werder die Dateien noch das Verzeichnis wieder löschen (Permission denied) ??!!

Woran kann das denn schon wieder liegen?

Hier erzeuge ich eine config.php, in der der Pfad gespeichert wird:

$pfad = "bilder/$DirName";
$fp=fopen("config.php","w"); //Inhalt löschen
fwrite($fp, "<?php\n");
fwrite($fp, '$CONFIG[directory] = "');
fwrite($fp,$pfad);
fwrite($fp, '";');
fwrite($fp, "\n?>");
fclose($fp);


Hier wird die config.php included und die Files zum upload können ausgewählt werden:


include "config.php";
$CONFIG[RequirePass] = "Nein"; # Soll eine Passwortabfrage benutzt werden? (Ja oder Nein)
$CONFIG[Password] = "passwort"; # Hier das Passwort eintragen
$CONFIG[UploadNum] = "3"; # Nummer der Upload-Felder
$CONFIG[File_Size] = "5000000"; # Maximale Datei größe in Bytes
echo $CONFIG[directory]."<br>";
if($action=="upload") {
if($CONFIG[RequirePass] == "Ja") {
if($password != "$CONFIG[Password]") {
$fehler .="Das von ihnen eingegebene Passwort ist falsch!<br>";
exit;
}
}
$num = 0;
while($num < $CONFIG[UploadNum]) {
$num++;
$datei = "fileup$num"."_name";
$datei1 = $$datei;
$datei2 = "fileup$num";
$datei3 = $$datei2;
if($datei3 != "none") {
$filesizebtyes = filesize($datei3);
$ok = 1;
if($filesizebtyes!="0") {
if($filesizebtyes < 10) {
$ok="2";
$fehler .="Datei Nr.$num ist kleiner als 10 Bytes.<br>";
}
if($filesizebtyes > $CONFIG[File_Size]) {
$ok="2";
$fehler .="Datei Nr.$num ist zu groß.<br>Sie darf Maximal $CONFIG[File_Size] Bytes haben!<br>";
}
if(file_exists($CONFIG[directory].'/'.$datei1)) {
$fehler .="Die Datei Nr.$num existiert bereits auf dem Server.<br>";
} elseif($ok!="2") {
copy ($datei3, $CONFIG[directory].'/'.$datei1);
$fehler .="Datei Nr.$num wurde hochgeladen.<br>";
}
}
}
if(!$fehler) {
$fehler .= "Es wurde keine Datei ausgewählt.<br>";
}


Wie kann es denn passieren, dass die File undeletable sind?

so long
Sevenger

 
DSB
24-08-2003, 23:07 
 
Nur das Script selbst hat anscheinend das Recht, die Datei auch wieder zu löschen.
Wenn Du Dich per FTP einloggst, bist Du nicht derselbe User, wie das Script.
Schau Dir mal den CHMOD-Wert der Dateien an. Eventuell kannst Du ihn per FTP auf 777 ändern und kannst das File danach bestimmt auch löschen.
Die automatische Lösung wird dann sein, die Rechte nach dem Hochladen entsprechend selbst zu setzen.

Befehl: chmod()
http://php3.de/manual/de/function.chmod.php

P.S.: Woran lag es denn jetzt, dass er den Scriptfehler angezeigt hat?


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:12 Uhr.