Fehler im Uploaden von Dateien

Alles, was PHP betrifft, kann hier besprochen werden.

Fehler im Uploaden von Dateien

Postby GByte » 09. October 2006 09:12

Hallo,

ich wollte eine Datei Hochladen mit PHP. Eigendlich sollte diese ins Scriptverzeichnis wo sich auch die PHP Datei befindet gespeichert werden nur aus irgendwelchen Gründen ist diese im Apache Ordner gelandet...

Im weiteren ging dies Später auch irgendwie ... aber als ich dies dann auf einem anderen Rechner testen wollte (mit neuer Testumgebung) ging dies Plötzlicherweise nicht mehr...

Ich habe auch beobachtet das die Datei hochgeladen wird (allerdings auch nicht immer) wenn man die Seite aktualisiert.

Ist also irgendwie fehlerhaft und würde darum mal um Kontrolle bitten :)

mfg
GByte

PS... benutze die aktuellste Version von xampp for Windows
alles hat ein ende nur ein code hat zwei :P
GByte
 
Posts: 4
Joined: 09. October 2006 09:04

Postby deepsurfer » 09. October 2006 11:12

Müsste einer der PHPfreaks kennen, sofern man deiner Beschreibung nach etwas erlesen kann.

Ich tippe auf die Einstellung in der PHP.INI
;open_basedir =
Da es im XAMPP nicht definiert ist, so geht er vom höchsten Pfad aus.

Baer mal schaun was die anderen noch dazu schreiben werden.
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby GByte » 10. October 2006 07:59

prinzip an der Sache ist ja das wenn ich Dateien ins Scriptverzeichnis (wo der Script liegt) hochladen wolle wird die Datei statt in den Ordner in den Apache Ordner gespeichert...

Wenn die Datei dort aber schon vorhanden ist scheint es doch zu klappen...

-.- merkwürdig
alles hat ein ende nur ein code hat zwei :P
GByte
 
Posts: 4
Joined: 09. October 2006 09:04

Postby Wiedmann » 10. October 2006 11:53

und würde darum mal um Kontrolle bitten

Dann solltest du schon was liefern, was man nachkontrollieren kann. (eben dein wohl nicht ganz korrektes Script)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby GByte » 12. October 2006 07:59

Code: Select all
<?php
if($_REQUEST['submit']) //2. Scriptaufruf
{
 if($_FILES["uploadfile"]["name"]==""){
     echo "Keine Datei angegeben!";
 }
 else{
     echo "Es soll die Datei '".$_FILES[uploadfile][name]."' hochgeladen werden.<br>";
     echo "Sie ist ".$_FILES[uploadfile][size]." Byte groß.<br>";
     echo "Ihr Mime-Typ ist '".$_FILES[uploadfile][type]."'.<br>";
     if($_POST["unterverzeichnis"]!=""){
         echo "Es soll in das Verzeichnis ".$_POST["verzeichnis"]." hochgeladen werden<br>";
     }
     else{
         echo "Es soll in das Scriptverzeichnis hochgeladen werden<br>";
     }
     echo "Die Maximal zulässige Dateigröße ist ".$_POST["maxsize"]."Bytes <br>";;
     if($_POST["unterverzeichnis"]!=""){
         if(!file_exists($_POST["unterverzeichnis"])){
             mkdir($_POST["unterverzeichnis"]);
             echo "Das Verzeichnis ".$_POST["unterverzeichnis"]." existiert nicht und wird somit erstellt!<br>";
         }
     }
     else{
         $spfad="".dirname($_SERVER['SCRIPT_FILENAME'])."/";
         echo $spfad;
     }
     if($_POST["maxsize"]<$_FILES["uploadfile"]["size"]){
         $ferror="<font color=red>Datei ist zu groß!</font>";
     }
     else{
         if(!file_exists("".$_POST["unterverzeichnis"]."".$spfad."".$_FILES["uploadfile"]["name"]."")){
         //Datei aus temporärem Verzeichnis in's Zielverzeichnis verschieben
             if(!move_uploaded_file($_FILES['uploadfile']['tmp_name'],$_POST["unterverzeichnis"]."".$_FILES['uploadfile']['name'])){
                 $ferror="<font color=red>Datei wurde nicht hochgeladen.<br> Fehlercode: <b>".$_FILES['uploadfile']['error']."</b></font><br>";
             }
             else{
                 $ferror="<font color=green>Erfolgreiches Hochladen!</font>";
             }
         }
         else{
             $ferror="<font color=red>Datei existierte bereits!</font>";
         }
     }
     echo "<br><br>".$ferror;
 }
}
else    //1. Scriptaufruf
{
?>
<html>
<head>
<title>Datei-Upload</title>
</head>
<body><center>
Achtung!!!<br>
Auf diese Seite darf nicht jedermann zugreifen, sonst könnten Programme<br>
hochgeladen werden, die den Webserver ausspähen oder dessen Dateien löschen.<br><br>
<form action="<? echo $_SERVER['PHP_SELF']; ?>" enctype="multipart/form-data" method="post">
<h1>Datei hochladen</h1><br><br><br></center>
<table><tr>
<td>Wählen Sie die hochzuladende Datei aus:</td>
<td><input name="uploadfile" type="file" size=100></td>
</tr>
<tr><td>
Maximale zulässige Dateigröße:</td><td>
<input type=text value='20000' name=maxsize>Bytes
</td></tr>
<tr><td>
Unterverzeichnis in das geladen werden soll:</td><td>
<input type=text value='' name=unterverzeichnis>
</td></tr>
</table>
<input name="submit" type="submit" value="Hochladen">
</form>
<p>
Wenn Sie das Formular abschicken, ohne ein File auszuwählen, kommt Fehler -
Probieren Sie es aus.
</body>
</html>
<?php
}
?>


ist nen Beispiel ... soll kein Sinn erfüllen

Auf nem Linux Server (mein VServer) gehts...
Nur halt im xampp nicht :(

lg
GByte
alles hat ein ende nur ein code hat zwei :P
GByte
 
Posts: 4
Joined: 09. October 2006 09:04

Postby deepsurfer » 12. October 2006 10:26

ist nen Beispiel ... soll kein Sinn erfüllen

Also ist dieses Script für uns auch irrelevant da dadurch dein Fehler nicht rekonstrierbar ist. (sorry, hart aber herzlich ;) )

----------

Auf nem Linux Server (mein VServer) gehts...
Nur halt im xampp nicht Sad

Mittels phpinfo abchecken worin die unterschiede der PHPeinstellungen
liegen.
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby Wiedmann » 12. October 2006 12:04

Also so auf die schnelle fallen mir 3 Sachen auf:
Code: Select all
if(!file_exists("".$_POST["unterverzeichnis"]."".$spfad."".$_FILES["uploadfile"]["name"]."")){

Diese Bedingung wird wohl immer wahr sein, da die Datei die du überprüfst, nie existieren wird.

Code: Select all
if(!move_uploaded_file($_FILES['uploadfile']['tmp_name'],$_POST["unterverzeichnis"]."".$_FILES['uploadfile']['name'])){

Das ist besonders cool ;-) Der Client kann es selbst aussuchen, wohin auf deinem ganzen Rechner ein Trojaner hingeschoben werden soll... Jedenfalls wird wohl "$_POST["unterverzeichnis"]" meist nicht übertragen, und der Upload landet deshalb im Apache-Bin.

Code: Select all
<html>
...
</html>

Da aber auch schonmal das HTML nicht gültig ist, kann man eh nur spekulieren, was ein Browser mit diesem Formular macht und ob bzw. welche Werte er überträgt.

BTW:
Einen String mit einem String ohne Inhalt ("") zu verknüfen, ist ziemlich unnötig.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby GByte » 16. October 2006 12:30

@deepsurfer
Nein dies ist schon das Beispiel nur etwas abgerundet um den Fehler zu finden... Soll aber wie schon erwähnt keinen Sinn erfüllen da es bestimmt nicht die Endversion werden wird... Deswegen auch das Sinnlose mit dem Pfad angeben ... (folgt aus Trojaner in irgendein Verzeichnis laden) ^^

Jedenfalls wird wohl "$_POST["unterverzeichnis"]" meist nicht übertragen, und der Upload landet deshalb im Apache-Bin.


Das ist es aber doch was ich meine ... Kannst du mir sagen warum das so ist??? wenn ich nichts angebe sollte das $_POST["unterverzeichnis"] leer sein und somit sollte es dann auch ins Scriptverzeichnis geladen werden Oder???

lg
GByte
alles hat ein ende nur ein code hat zwei :P
GByte
 
Posts: 4
Joined: 09. October 2006 09:04

Postby Wiedmann » 16. October 2006 13:11

wenn ich nichts angebe sollte das $_POST["unterverzeichnis"] leer sein und somit sollte es dann auch ins Scriptverzeichnis geladen werden Oder???

Nein, move_uploaded_file() arbeitet nicht relativ zum Scriptverzeichnis.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 12 guests