Avatar billede nexo Nybegynder
23. februar 2009 - 17:49 Der er 4 kommentarer og
1 løsning

File upload script overskriver filer

Hej alle sammen.

Jeg har kigget på noget infuison til php-fusion og lavet et script der kan uploade filer. Jeg har bare et problem, den overskriver filen hvis den eksister i stedet for at sige at den eksister. Nogen af jer der ved hvad jeg har gjordt galt? :)

<?php
/*--------------------------------------------+
| PHP-Fusion 5 - Content Management System    |
|---------------------------------------------|
| author: Nick Jones (Digitanium) © 2002-2005 |
| web: http://www.php-fusion.co.uk            |
| email: nick@php-fusion.co.uk                |
|---------------------------------------------|
| Released under the terms and conditions of  |
| the GNU General Public License (Version 2)  |
+--------------------------------------------*/
require_once "../../maincore.php";
require_once BASEDIR."subheader.php";
require_once ADMIN."navigation.php";

if (file_exists(INFUSIONS."demo_uploads/locale/".$settings['locale'].".php")) {
    include INFUSIONS."demo_uploads/locale/".$settings['locale'].".php";
} else {
    include INFUSIONS."demo_uploads/locale/English.php";
}

// Settings
$upload_maxsize = 20969952;
$upload_extensions = array(
    ".dem",
    ".zip",
    ".rar",
    ".tar",
);
$upload_folder = BASEDIR."demo/";

if (isset($del)) {
    unlink($upload_folder."$del");
    opentable($locale['dup110']);
    echo "<center><br>
".$locale['dup111']."<br><br>
<a href='".FUSION_SELF."'>".$locale['dup112']."</a><br><br>
<a href='".ADMIN."index.php'>".$locale['dup113']."</a><br><br>
</center>\n";
    closetable();
} else if (isset($_POST['upload_file'])) {
    $upload = $_FILES['upload'];
    if ($upload['name'] != "" && !empty($upload['name']) && is_uploaded_file($upload['tmp_name']) && $upload['size'] <= $upload_maxsize) {
        $upload_ext = strrchr($upload['name'],".");
        if (in_array($upload_ext, $upload_extensions)) {
            $upload_name = $upload['name'];
            move_uploaded_file($upload['tmp_name'], $upload_folder.$upload_name);
            chmod($upload_folder.$upload_name,0644);
        } else {
            $upload_error = $locale['dup124'];
        }
    } else {
        $upload_error = $locale['dup125'];
    }
    opentable($locale['dup130']);
    echo "<center><br>
".(!isset($upload_error) ? $locale['dup123'] : $upload_error)."<br><br>
<a href='".FUSION_SELF."'>".$locale['dup112']."</a><br><br>
<a href='".ADMIN."index.php'>".$locale['dup113']."</a><br><br>
</center>\n";
    closetable();
} else {
    opentable($locale['dup120']);
    echo "<form name='uploadform' method='post' action='".FUSION_SELF."' enctype='multipart/form-data'>
<table align='center' width='350' cellspacing='0' cellpadding='0'>
<tr>
<td width='80' class='tbl'>".$locale['dup121']."</td>
<td class='tbl'><input type='file' name='upload' class='textbox' style='width:250px;'></td>
</tr>
<tr>
<td align='center' colspan='2' class='tbl'>
<input type='submit' name='upload_file' value='".$locale['dup120']."' class='button' style='width:100px;'><br><br>
".$locale['dup122'].parseByteSize($upload_maxsize)."</td>
</tr>
</table>
</form>\n";
    closetable();
    tablebreak();
    opentable($locale['dup130']);
    echo "<table width='500' align='center' cellpadding='0' cellspacing='1' class='tbl-border'>
<tr>
<td class='tbl2'>".$locale['dup131']."</td>
<td class='tbl2'>".$locale['dup132']."</td>
<td align='right' class='tbl2'>".$locale['dup133']."</td>
</tr>\n";
    $file_list = makefilelist($upload_folder, ".|..|index.php", true);
    if (!isset($file_list)) { $file_count = 0; } else { $file_count = count($file_list); }
    for ($i=0;$i < $file_count;$i++) {
        $file_size = filesize($upload_folder.$file_list[$i]);
        if ($i % 2 == 0) { $row_color = "tbl1"; } else { $row_color = "tbl2"; }
        echo "<tr>
<td class='$row_color'>$file_list[$i]</td>
<td class='$row_color'>".($file_size > 0 ? parseByteSize($file_size) : "-----")."</td>
</tr>\n";
    }
    echo "</table>\n";
    closetable();
}

echo "</td>\n";
require_once BASEDIR."footer.php";
?>
Avatar billede coderdk Praktikant
23. februar 2009 - 22:07 #1
Før move_uploaded_file check

if ( file_exists( $upload_folder.$upload_name ) )
{
  echo "Damn. Filen findes. Nu bliver den overskrevet.";
}
Avatar billede nexo Nybegynder
23. februar 2009 - 22:53 #2
Det hjalp ikke den overskriver stadig og siger intet om det :(
Avatar billede coderdk Praktikant
23. februar 2009 - 23:11 #3
Den burde nu skrive noget. Prøv at erstatte

move_uploaded_file($upload['tmp_name'], $upload_folder.$upload_name);

med:

if ( file_exists( $upload_folder.$upload_name ) )
{
  die("Filen eksisterer. Giv den et andet navn, og upload igen");
}
move_uploaded_file($upload['tmp_name'], $upload_folder.$upload_name);
Avatar billede nexo Nybegynder
24. februar 2009 - 00:04 #4
Coderdk Det funger :D gider du skrive et svar så får du points :)
Avatar billede coderdk Praktikant
24. februar 2009 - 00:05 #5
Ok :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester