Avatar billede phpbegynder2004 Nybegynder
29. oktober 2005 - 19:01 Der er 1 kommentar og
2 løsninger

Omdøb ens filnavne

Hej,

jeg har et upload script er virker fint. Desværre overskriver det filerne, hvis de har ens filnavne. Jeg har prøvet at få det til at ændre filnavnet til et andet, hvis det allerede findes. Det virker desværre ikke.

På forhånd tak!

Kode:
<?php
$upload_dir = "../xxxupload/".$_GET[mappe];
$max_size = 1500000;
$createsubfolders = "true";

/*error_reporting(0);*/
$message ="";
if (!is_dir($upload_dir))
{
  if (!recursiveMkdir($upload_dir)) die ("cannot access upload directory");
  if (!chmod($upload_dir,0755)) die ("change permission to 755 failed.");
}

if ($_POST['todo']=="upload")
{
  $target_folder=$upload_dir;
  // relalivefilename support for folders and subfolders creation.
  $relative = $_POST['relativefilename'];
  if (($createsubfolders == "true") && ($relative != ""))
  {
    $file_name = $_FILES['uploadfile']['name'];
    $inda=strlen($relative);
    $indb=strlen($file_name);
    if ($inda > $indb)
    {
        $subfolder = substr($relative,0,($inda-$indb)-1);
        $subfolder = str_replace("\\","/",$subfolder);
        $target_folder = $upload_dir."/".$subfolder;
        recursiveMkdir($target_folder);
    }
  }
  if ($_FILES['uploadfile'])
  {
    $message = do_upload($target_folder,$max_size);
    // Recompose file from chunks (if any).
    $chunkid = $_POST['chunkid'];
    $chunkamount = $_POST['chunkamount'];
    $chunkbaseStr = $_POST['chunkbase'];
    if (($chunkid != "") && ($chunkamount != "") && ($chunkbaseStr != ""))
    {
        if ($chunkid == $chunkamount)
        {
            // recompose file.
            $fname = $target_folder."/".$chunkbaseStr;
            if (file_exists($fname)) $fname = $fname.".".time();
            $fout = fopen ($fname, "wb");
            for ($c=1;$c<=$chunkamount;$c++)
            {
                $filein = $target_folder."/".$chunkbaseStr.".".$c;
                $fin = fopen ($filein, "rb");
                while (!feof($fin))
                {
                  $read = fread($fin,4096);
                  fwrite($fout,$read);
                }
                fclose($fin);
                unlink($filein);
            }
            fclose($fout);
        }
    }
  }
  else $message = "No uploaded file(s).";
}

function do_upload($upload_dir,$max_size)
{
    $temp_name = $_FILES['uploadfile']['tmp_name'];
    $file_name = $_FILES['uploadfile']['name'];
    $file_size = $_FILES['uploadfile']['size'];
    $file_type = $_FILES['uploadfile']['type'];
    $file_name = str_replace("\\","/",$file_name);
    $file_name = str_replace("'","",$file_name);
    $file_path = $upload_dir."/".$file_name;

    // Check filename.
    if ($file_name =="")
    {
        $message = "Error - Invalid filename";
        return $message;
    }

    // Check file size.
    if ($file_size > $max_size)
    {
      $errormsg = "- File size is over ".$max_size." bytes";
      header("HTTP/1.1 405");
      header("custommessage: ".$errormsg);
      $message = "Error ".$errormsg;
      return $message;
    }

    $result = move_uploaded_file($temp_name, $file_path);
    if ($result)
    {
      chmod($file_path,0755);
      $message = "$file_name uploaded successfully.";
      return $message;
    }
    else
    {
      $errormsg = "- PHP upload failed";
      header("HTTP/1.1 405");
      header("custommessage: ".$errormsg);
      $message = "Error ".$errormsg;
      return $message;
    }
}

function recursiveMkdir($path)
{
    if (!file_exists($path))
    {
        recursiveMkdir(dirname($path));
        return mkdir($path, 0755);
    }
    else return true;
}
?>
Avatar billede nizo Nybegynder
29. oktober 2005 - 20:15 #1
Giv dem i stedet navnet $file_name = time() . "_" . $_FILES['uploadfile']['name'];

Saa bliver der genereret et unikt navn paa sekundet. Kun hvis en fil med samme navn prøver at blive uploaded paa det samme sekund vil den ene erstatte den anden.
Avatar billede phpbegynder2004 Nybegynder
30. oktober 2005 - 10:44 #2
Okay, tak for hjælpen. Er det okay hvis vi deler pointene 50/50 da jeg synes det er lidt mange point for sådan et svar? Lå selv og baksede med at få det på plads pænt lang tid...
Avatar billede nizo Nybegynder
30. oktober 2005 - 11:57 #3
Fair nok :)
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