PHP-Upload-Script-Problem

Hallo,

ich habe vor mir für meinen Heimserver ein kleines Uploadscript auf php-Basis einzurichten, doch leider komme ich im Moment nicht so recht weiter. Ich habe schon mehrere fertige Scripte runtergeladen, der Aufruf klappt auch noch ohne Probleme, ich sehe die Oberfläche und kann eine Datei zum Uploaden auswählen, doch wenn ich dann auf Upload klicke kommt nur die Fehlermeldung des jeweiligen Scripts, dass die Datei nicht hochgeladen werden konnte. Das Erstellen eines neuen Ordners über das Script klappt jedoch ohne Probleme.

Alle Ordner existieren so wie sie sollen und haben den chmod 777. Ich verwende ein System mit Mdk-Linux 10 und XAMPP 1.4.7 (habs auch schon auf einem Rechner mit der aktuellen Version probiert).

Ich habe noch relativ wenig Erfahrung mit solchen Dingen und wäre für einen kleinen Tipp ganz dankbar, ein weiß echt nicht woran es hängen könnte.

Hier noch der Code von einem der Scripte, ich glaube zwar nicht dass es daran hängt weil ich wie gesagt schon mehrere ausprobiert habe, aber vielleicht könnt ihr damit ja etwas anfangen was zur Problemlösung beiträgt.
Code:
<?PHP

// special chars to be replaced

$signs = array("ä"," ","ö","ü","&","?","ß","+","~","/");
$bad_ext = array(".hta",".htp",".php",".pl",".cgi");
$root = "/server/path/to/home/";

// copy to this directory

if (!isset($dir)){

$dir = "up";
$shortdir = "http://www.your.domain.de/";
}


?>

<html>
<head>
<title>Upload Directory</title>
<style>
body,td,input {font-family:verdana,arial;font-size:13px;}
th {text-align:left;font-size:13px}
</style>
</head>
<body>

<b>Uploader</b>
<hr size="1" noshade width="100%">
<br>

<?PHP

// events to be proceeded

// copy the file to the server

if (isset($submit)){


$userfile_name = str_replace($signs,"_",$userfile_name);
$userfile_name = str_replace($bad_ext,".txt",$userfile_name);

copy($userfile,$dir.$userfile_name);

if (!is_uploaded_file ($userfile)){

echo "<font color=red>Die Datei <b>$userfile_name</b> konnte nicht auf den Server geladen werden.</font>\n";
}


}



// check whether file has been uploaded

if (is_uploaded_file ($userfile)){

print "<font color=green>Die Datei <b>$userfile_name</b> wurde erfolgreich auf den Server geladen.</font>\n";

}




// change directory for listing

if (isset ($changedir)){

while(list($key, $val) = each($selection)) {

if(filetype($dir.$val) == "dir") {
$dir = $dir.$val."/";
$shortdir = $shortdir.$val."/";
}
else {
echo "<font color=red>Die Datei <b>$val</b> ist kein Ordner.</font>\n";
}
}

}



// change directory to next higher level for listing

if (isset ($cdup)){

$array = explode("/",$dir);
$array2 = explode("/",$shortdir);
$parts = count($array);
$parts2 = count($array2);
$updir = "";
$updir2 = "";


for($x=0;$x<($parts - "2");$x++) {
$updir = $updir.$array[$x]."/";
}

for($x=0;$x<($parts2 - "2");$x++) {
$updir2 = $updir2.$array2[$x]."/";
}

$z = substr_count($updir, $root);
if ( $z < "1"){

echo "<font color=red>Diese Aktion ist nicht erlaubt!</font>\n";

}
else {

$dir = $updir;
$shortdir = $updir2;

}
}



// delete file and dir

if (isset ($delete)){

while(list($key, $val) = each($selection)) {

if (filetype($dir.$val) == "dir"){

rmdir($dir.$val);
print "<font color=green>Der Ordner <b>$shortdir$val</b> wurde erfolgreich vom Server gelöscht.</font>\n";
}

else {

unlink($dir.$val);
print "<font color=green>Die Datei <b>$shortdir$val</b> wurde erfolgreich vom Server gelöscht.</font>\n";
}



}

}

// create new directory

if (isset ($createdir)){

$newdir = str_replace($signs,"_",$newdir);
mkdir($dir.$newdir,0755);
echo "<font color=green>Der Ordner <b>$newdir</b> wurde erstellt.</font>\n";

}





?>
 <br>
<form name="uploadfile" enctype="multipart/form-data" action="<?PHP echo $PHP_SELF ?>" method="post">
<table border="0"><tr>
<td><b>Datei:</b> </td>
<td><input name="userfile" type="file" size="20">
<input type="hidden" name="dir" value="<?PHP echo $dir ?>">
<input type="hidden" name="shortdir" value="<?PHP echo $shortdir ?>">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000"></td>
<td><input type="submit" value="upload" name="submit"></td></tr>
</form>
<form name="createdir" enctype="multipart/form-data" action="<?PHP echo $PHP_SELF ?>" method="post">
<tr><td><b>Verzeichnis:</b> </td>
<td><input name="newdir" type="text" size="35">
<input type="hidden" name="shortdir" value="<?PHP echo $shortdir ?>">
<input type="hidden" name="dir" value="<?PHP echo $dir ?>"></td>
<td><input type="submit" value="create" name="createdir"></td></tr></table>
Bitte <b>nur einmal</b> klicken und auf die Bestätigung warten
</form>
<a href="<?PHP echo $PHP_SELF ?>"><font color=blue>Startverzeichnis</font></a><br><br><br>


<hr size="1" noshade width="100%">
<b>Verzeichnisübersicht</b> <?PHP print "$shortdir"; ?>
<hr size="1" noshade width="100%">

<form name="display" enctype="multipart/form-data" action="<?PHP echo $PHP_SELF ?>" method="POST">
<input type="hidden" name="dir" value="<?PHP echo $dir ?>">
<input type="hidden" name="shortdir" value="<?PHP echo $shortdir ?>">
<?PHP
$size_sum = "0";
echo "\n <table border=0 cellspacing=5>\n";
echo " <tr><td colspan='3'><input type='submit' name='cdup' value='cdup'></td></tr>";


echo " <tr><th colspan='2'></th><th width=120>Dateiname</th><th width=120>Dateigröße</th><th width=120>Upload-Zeit</th><tr>\n";
$verz=opendir ($dir);
$n = 0;

while ($file = readdir ($verz)) {

if($file != "." && $file != ".." && $file != $PHP_SELF && $file != ".htaccess" && $file != ".htpasswd") {

echo " <tr><td><input type=checkbox name=selection[$n] value=$file></td><td>";

if(filetype($dir.$file) == "dir") {
echo "<img src='icons/folder.gif' width='16' height='16' border='0' alt='directory'>";
}
elseif(filetype($dir.$file) == "file") {

echo "<img src='icons/binary.gif' width='16' height='16' border='0' alt='file'>";
}
else {

echo "<img src='icons/unknown.gif' width='16' height='16' border='0' alt='unknown'>";
}
echo "</td><td width=120><a href='$shortdir$file' target='_blank'><font color=brown>$file</font></a></td><td width=120> (".number_format(filesize($dir.$file)/1000,3,",",".")." Kb)</td><td>".gmdate("d M Y - H:i:s", filemtime($dir.$file))."</td></tr>\n";
$size_sum = $size_sum + number_format(filesize($dir.$file),3,",","");
$n ++;
}
}
closedir($verz);
$output = number_format($size_sum/1000,3,",",".");
echo " <tr><th colspan='2'></th><th>Summe:</th><th>".$output." Kb</th></tr>\n";
echo " </table>\n";
?>
<hr size="1" noshade width="100%">
<input type='submit' value='delete' name='delete'>
<input type='submit' value='GoTo' name='changedir'>

</form>
<br><br>

</body>
</html>
 
Code:
<input type="hidden" name="MAX_FILE_SIZE" value="1000000">

^^ beschränkt die Größe der hochzuladenden Datei(en) auf 1MB.

Anderer Grund könnte die Angabe deines Verzeichnisses sein (
Code:
$dir = "up";
). versuchs mal mit einer absoluten Pfadangabe.

Ansonsten vielleicht nochmal die Quelle des Skripts angucken - oller kopierer du ;)
 
Nein, sorry, daran liegt es leider nicht. Hab den Filesize mal erhöht, das brachte auch keine Änderung und wenn ich eine absolute Pfadangabe verwende bekomme ich einen Parse-Error.

Ich gehe aber auch nicht davon aus dass der Fehler im Script liegt, vielmehr müsste irgendwas mit meinem System nicht stimmten wenn mehrere Scripte alle nicht funktionieren. Und bei allen sind es wirklich die gleichen beschriebenen Probleme.

oller kopierer du
erwischt :)
 
Zu 1) Nein, wenn ich über das Script einen Ordner erstelle bekommt nur der Benutzer alle Rechte, die Gruppe und Sonstige haben alle Rechte außer Schreibrechten.
Zu 2) Das mit dem Safe_Mode überprüfe ich doch in der php.ini, oder? Da war nämlich ein entsprechender Eintrag deaktiviert.

Noch irgendwelche Ideen?
 
Zu 1) Nein, wenn ich über das Script einen Ordner erstelle bekommt nur der Benutzer alle Rechte, die Gruppe und Sonstige haben alle Rechte außer Schreibrechten.
darf der user, unter dem der webserver laeuft, denn in das verzeichnis wechseln (alle uebergeordneten verzeichnisse "chmod o+x") und gehoert der ordner dann auch dem user, unter dem der server laeuft? muesste sein, damit es funzt bei chmod 755... aber soweit ich weiss laeuft der apache bei xampp per default auf user "nobody" - also ueberpruef das mit der rechtevergabe nochmal :)

liebe gruesse,
~chrisi
 
Du hast Recht, ich hatte übersehen dass der Xampp unter dem User nobody läuft. Ich habe mal schnell den Besitzer und die Rechte der Ordner entsprechend geändert, aber leider brachte mich das auch nicht weiter.

Kann aber gut sein, dass mein Problem mit den Berechtigungen zu tun hat. Aber mehr als die Ordnerberechtigngen kann ich doch nicht anpassen, oder?
 
Zurück
Oben