• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Upload problem

Rocky007

Mitglied
Hallo,
ich habe versucht einen Uploader zu schreiben, der nur 2 Dateitypen erlaubt aber irgedwas ist falsch... und ich weiss nicht was ich weiss nur wo!! Das Problem ist das Fettgedruckte
Code:
<?php 
$target = "upload/"; 
$target = $target . basename( $_FILES['uploaded']['name']) ; 
$ok=1; 

//This is our size condition 
if ($uploaded_size > 350000) 
{ 
echo "Ihre Datei ist zu groß.<br>"; 
$ok=0; 
} 

[b]//This is our limit file type condition 
if ($uploaded_type !="application/apk" && $uploaded_type !="file/zip") 
{ 
echo "Nur <b>.apk</b> und <b>.zip</b> Dateien erlaubt<br>"; 
$ok=0; 
} [/b]

//Here we check that $ok was not set to 0 by an error 
if ($ok==0) 
{ 
Echo "Sorry Ihre Datei wurde nicht hochgeladen"; 
} 

//If everything is ok we try to upload it 
else 
{ 
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) 
{ 
echo "Die Datei ". basename( $_FILES['uploadedfile']['name']). " wurde hochgeladen"; 
} 
else 
{ 
echo "Sorry, es gab ein Problem beim hochladen ihrer Datei."; 
} 
} 
?>
 
Werbung:
Hallo,

ich habe noch nicht so ganz verstanden, wo genau das Problem ist. Was funktioniert denn nicht genau, bzw. welcher Fehler tritt auf?

MfG Icy
 
Also ich möchte, dass nur Dateien mit den Endungen ".zip" und ".apk" hochgeladen werden dürfen...
Allerdings funktioniert das leider nicht so,wie ich mir das denke
 
Werbung:
Wo kommt denn $uploaded_type her? Woher sollen wir das wissen, wenn du das nicht postest?
 
Mein Code sieht bisher so aus da sind fehler drin und ich weiss nicht,wie ich sie behebe...
Das mit dem $uploaded_type ist einer
 
Werbung:
Das ist ein Upload script,wo ich im internet gefunden habe ich habe es nur so angepasst,wie ich es brauche (soweit ich es verstehe) drum wäre es nett, wenns mir jemand verbessern würde
 
PHP:
$extensions = array('apk', 'zip');
$extension  = strtolower(pathinfo($_FILES['uploaded']['name'], PATHINFO_EXTENSION));

if (in_array($extension, $extensions)) {
    // ...
}
 
Auf die Dateiendung zu testen ist ein bisschen unsicher, nich? Wozu gibt's das FileInfo-Objekt?
 
Werbung:
Ja, stimmt schon. Das FileInfo-Objekt gibt es allerdings erst ab PHP 5.3 und wer weiß, ob das (bzw. die alte Funktion) für random Dateiendung irgendwas Sinnvolles zurückliefert. Ich hatte keine Lust, "geht iwie nicht" als Antwort zu bekommen. Das war vielleicht ein wenig faul. ;)
 
Habe den Code nun folgendermassen geändert aber er tut immer noch nichut, was er soll

PHP:
<?php 
$target = "upload/"; 
$target = $target . basename( $_FILES['uploaded']['name']) ; 
$ok=1;
$uploaded_type = $_FILES['uploaded']['type'];
$uploaded_size = $_FILES['uploaded']['size'];

//This is our size condition 
if ($uploaded_size > 350000) 
{ 
echo "Ihre Datei ist zu groß.<br>"; 
$ok=0; 
} 

//This is our limit file type condition 
if ($uploaded_type =="file/apk" &&  $uploaded_type =="file/zip")  
{ 
echo "Datei wurde hochgeladen.<br>"; 
$ok=1; 
}
else
{
echo "Nur <b>.apk</b> und <b>.zip</b> Dateien erlaubt.<br>";
$ok=0;
}


//Here we check that $ok was not set to 0 by an error 
if ($ok==0) 
{ 
Echo "Sorry Ihre Datei wurde nicht hochgeladen"; 
} 

//If everything is ok we try to upload it 
else 
{ 
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) 
{ 
echo "Die Datei ". basename( $_FILES['uploadedfile']['name']). " wurde hochgeladen"; 
} 
else 
{ 
echo "Sorry, es gab ein Problem beim hochladen ihrer Datei."; 
} 
} 
?>
 
$_FILES['uploaded']['type'] ist sehr unzuverlässig, da dies vom Browser gesendet wird. Ich könnte also eine HTML als application/zip (das ist im übrigen der richtige Content-Type für Zip-Dateien) senden und diese irgendwie aufrufen lassen von irgendwelchen Benutzern und so deren Cookies stehlen um nicht selbst an der Seite anzumelden. Das wäre also ein potenzielles Sicherheitsloch. Du musst also eine der Tools nehmen die PHP bietet um den Dateityp herauszufinden. Ansonsten kannst du auch file -bi <dateiname> mittels exec() ausführen, dann ermittelt ein Programm den Content-Type (mit Zeichensatz [bei Zip binary]).
 
Werbung:
Ich möchte erstmal,dass das tool tut,was es soll und dann verändern....
Nur ich finde keinen fehler mehr im code.

PHP:
 <?php 
$target = "upload/"; 
$target = $target . basename( $_FILES['uploaded']['name']) ; 
$ok=1;
$uploaded_type = $_FILES['uploaded']['type'];
$uploaded_size = $_FILES['uploaded']['size'];

//This is our size condition 
if ($uploaded_size > 350000) 
{ 
echo "Ihre Datei ist zu groß.<br>"; 
$ok=0; 
} 

//This is our limit file type condition 
if ($uploaded_type =="file/apk" &&  $uploaded_type =="file/zip")  
{ 
echo "Datei wurde hochgeladen.<br>"; 
$ok=1; 
}
else
{
echo "Nur <b>.apk</b> und <b>.zip</b> Dateien erlaubt.<br>";
$ok=0;
}


//Here we check that $ok was not set to 0 by an error 
if ($ok==0) 
{ 
Echo "Sorry Ihre Datei wurde nicht hochgeladen"; 
} 

//If everything is ok we try to upload it 
else 
{ 
if(move_uploaded_file($_FILES['uploaded']['tmp_name'], $target)) 
{ 
echo "Die Datei ". basename( $_FILES['uploadedfile']['name']). " wurde hochgeladen"; 
} 
else 
{ 
echo "Sorry, es gab ein Problem beim hochladen ihrer Datei."; 
} 
} 
?>
 
PHP:
if ($uploaded_type =="file/apk" &&  $uploaded_type =="file/zip")

Du suchst ODER.

(Nach mehr habe ich nicht geschaut.)
 
Ich habe ihn nochmal neu geschrieben und nun klappt es soweit,dass er alles hochläd jedoch soll er nur .apkk und .zip zulassen was ist NOCH falsch??

PHP:
<?php
if($_POST['upload']){
$explode = explode('.', $HTTP_POST_FILES['ufile']['name']);
if($_POST['newname'] == ''){
$name = $HTTP_POST_FILES['ufile']['name'];
}else{
    if($explode[1] != 'apk' && $explode[1] != 'zip'){
        echo '<span style="color: red;">Es sind nur *.apk und *.zip Dateien erlaubt!</span><br />';
        //exit; beendet das Skript
        exit;
    }else{
        $name = $_POST['newname'].'.'.$explode[1];
    }
}
$path= "upload/".$name;
if($ufile !=none)
{
if(copy($HTTP_POST_FILES['ufile']['tmp_name'], $path))
{

echo '<span style="color: green;">Die Datei wurde erfolgreich hochgeladen!</span><br />';
echo 'Der Link zur Datei: <a href="upload/'.$name.'">http://android.bplaced.net/apps/upload/'.$name.'</a>';
}
else
{
echo "<span style=\"font-family: Arial, Helvetica, sans-serif; color: red;\">Fehler beim hochladen...</span>";
}
}

}
?>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<table>
    <tr>
        <td style="font-weight: bold;">Datei</td>
        <td>:</td>
        <td><input name="ufile" type="file" class="button" id="ufile" size="50" /></td>
    </tr>
    <tr>
        <td style="font-weight: bold;">Neuer Name<br /><small>(Kann leer bleiben; ohne Endung)</small></td>
        <td>:</td>
        <td><input name="newname" type="text" style="widh: 200px;"/></td>
    </tr>
    <tr>
        <td colspan="3"><input type="submit" name="upload" value="Hochladen" /></td>
    <td colspan="4"><input type=button onClick="window.location.href='upload/'" value="Dateien"></td>
    </tr>
</table>
</form>
 
Werbung:
if($explode[1] != 'apk' || $explode[1] != 'zip')
auf Dateiendungen prüft man besser mit strrchr($filename,'.'), sonst kann ist foobar.zip.exe hochladen.
 
Zurück
Oben