Переименование дубликата

Discussion in 'PHP' started by Vinsik, 12 Jan 2009.

  1. Vinsik

    Vinsik Elder - Старейшина

    Joined:
    4 Oct 2008
    Messages:
    189
    Likes Received:
    4
    Reputations:
    -5
    вот возник опять вопрос, например файл 1.mp3 есть на шаре. Кто то пытаеца залить 1.mp3 =) шара перезапишет файл :( а содержание то может различатся! :( Как сделать чтобы шара переименовывала дубликаты?
    Например переименовала этот файл в 1(copy).mp3
    PHP:
    <?
        include(
    "include/common.php");
        
        if(
    $loggedin){
            include(
    "include/accmenu.php");
        }
        if( 
    $_POST['submit'] && $_FILES['attached']['name'] ){
            
    $ok_filetypes explode("|",$att_filetypes);
            if (!
    $_FILES['attached']['error'] && $_FILES['attached']['size'] > $att_max_size*1024){
                
    errform('<CENTER>Извините, слишком большой размер файла!</CENTER><BR><BR>'); // #err
                
    $step 1;
            }
            
    $filename = (!$_FILES['attached']['error'] ? substrbasename($_FILES['attached']['name']), -30 ) : '');
            
    $x strtolowersubstr($_FILES['attached']['name'], -3));
            if(
    $filename && !in_array($x$ok_filetypes) ){
                
    errform('<CENTER>Не поддерживаемый тип файла!!!</CENTER><BR><BR>');
                
    $step 1;
            }
            if(!
    $posterr){
                if(!isset(
    $_GET["ipaddress"]) || ($_GET["ipaddress"] == "")) {
                    
    $ipaddress $_SERVER['REMOTE_ADDR'];
                    
    $local 1;
                } else {
                    
    $ipaddress $_GET["ipaddress"];
                    
    $local 0;
                }
        

                      
    $ru=array("а","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
                      
    $tr=array("a","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja");
                      
    $uniq strtolower(str_replace($ru,$tr,$_FILES['attached']['name']));

                
    move_uploaded_file($_FILES['attached']['tmp_name'], $att_path."/".$uniq.".".$ext );
                
    $strQuery  "INSERT INTO images25 SET ";
                  
    $strQuery .= "filename='($uniq)',"
                if(
    $myuid){
                    
    $strQuery .= "user='{$myuid}',";
                }
                
    $strQuery .= "status='1'";
                
    $result mysql_query($strQuery) or die( mysql_error() );
                
    $aid mysql_insert_id();
                if(
    $aid){
                    
    $filen $siteurl."/".str_replace('./'''$att_path)."/".$uniq."";
                    
    $filen str_replace('http://','%%',$filen);
                    
    $filen str_replace('//','/',$filen);
                    
    $filen str_replace('%%','http://',$filen);

                    
                    
    //ITS AN IMAGE
                    
    if($x=="jpg" or $x=="jpeg" or $x=="gif" or $x=="png" or $x=="jif" or $x=="jfif")
                    {
                        
    $filenx=$filen;
                    }
                    else
                    {
                        include(
    "include/const.inc.php");
                        
    $filenx $siteurl."/icons/".$Icons[$ext];
                    }


                    
    $step 2;
                }else{
                    
    $step 1;
                }
            }
        }else{
            
    $step 1;
        }
        if(
    $step == 1){
        
    ?>
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Проверяй наличие используя скажем file_exists и добавляй к имени файла префикс или присваивай файлам имя самостоятельно, а в бд храни оригинальные названия
     
    _________________________
  3. Vinsik

    Vinsik Elder - Старейшина

    Joined:
    4 Oct 2008
    Messages:
    189
    Likes Received:
    4
    Reputations:
    -5
    а хотяб пример кода можно?
     
  4. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Обрати внимание на хак в виде кода:

    Code:
    if (file_exists($att_path."/".$uniq.".".$ext)) $uniq = $uniq . '(copy)';
    PHP:
    <?
        include(
    "include/common.php");
        
        if(
    $loggedin){
            include(
    "include/accmenu.php");
        }
        if( 
    $_POST['submit'] && $_FILES['attached']['name'] ){
            
    $ok_filetypes explode("|",$att_filetypes);
            if (!
    $_FILES['attached']['error'] && $_FILES['attached']['size'] > $att_max_size*1024){
                
    errform('<CENTER>Извините, слишком большой размер файла!</CENTER><BR><BR>'); // #err
                
    $step 1;
            }
            
    $filename = (!$_FILES['attached']['error'] ? substrbasename($_FILES['attached']['name']), -30 ) : '');
            
    $x strtolowersubstr($_FILES['attached']['name'], -3));
            if(
    $filename && !in_array($x$ok_filetypes) ){
                
    errform('<CENTER>Не поддерживаемый тип файла!!!</CENTER><BR><BR>');
                
    $step 1;
            }
            if(!
    $posterr){
                if(!isset(
    $_GET["ipaddress"]) || ($_GET["ipaddress"] == "")) {
                    
    $ipaddress $_SERVER['REMOTE_ADDR'];
                    
    $local 1;
                } else {
                    
    $ipaddress $_GET["ipaddress"];
                    
    $local 0;
                }
        

                      
    $ru=array("а","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
                      
    $tr=array("a","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja");
                      
    $uniq strtolower(str_replace($ru,$tr,$_FILES['attached']['name']));
                if (
    file_exists($att_path."/".$uniq.".".$ext)) $uniq $uniq '(copy)';
                
    move_uploaded_file($_FILES['attached']['tmp_name'], $att_path."/".$uniq.".".$ext );
                
    $strQuery  "INSERT INTO images25 SET ";
                  
    $strQuery .= "filename='($uniq)',"
                if(
    $myuid){
                    
    $strQuery .= "user='{$myuid}',";
                }
                
    $strQuery .= "status='1'";
                
    $result mysql_query($strQuery) or die( mysql_error() );
                
    $aid mysql_insert_id();
                if(
    $aid){
                    
    $filen $siteurl."/".str_replace('./'''$att_path)."/".$uniq."";
                    
    $filen str_replace('http://','%%',$filen);
                    
    $filen str_replace('//','/',$filen);
                    
    $filen str_replace('%%','http://',$filen);

                    
                    
    //ITS AN IMAGE
                    
    if($x=="jpg" or $x=="jpeg" or $x=="gif" or $x=="png" or $x=="jif" or $x=="jfif")
                    {
                        
    $filenx=$filen;
                    }
                    else
                    {
                        include(
    "include/const.inc.php");
                        
    $filenx $siteurl."/icons/".$Icons[$ext];
                    }


                    
    $step 2;
                }else{
                    
    $step 1;
                }
            }
        }else{
            
    $step 1;
        }
        if(
    $step == 1){
        
    ?>
     
    1 person likes this.
  5. Vinsik

    Vinsik Elder - Старейшина

    Joined:
    4 Oct 2008
    Messages:
    189
    Likes Received:
    4
    Reputations:
    -5
    спасибо! держи заслуженый + только вот как сделать чтобы строка
    PHP:
    if (file_exists($att_path."/".$uniq.".".$ext)) $uniq $uniq '(copy)'
    Переименовывала не в j._timberlake_-_rock_your_body.mp3(copy) а в j._timberlake_-_rock_your_body(copy).mp3
     
    #5 Vinsik, 13 Jan 2009
    Last edited: 13 Jan 2009
  6. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    А мое мнение что файлы нужно хранить изначально под уникальными именами, а уже при загрузке из базы тянуть его реальное имя
     
  7. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Навскидку
    $uniq = preg_replace('/\.mp3/', '(copy).mp3', $uniq);
     
    _________________________
  8. Vinsik

    Vinsik Elder - Старейшина

    Joined:
    4 Oct 2008
    Messages:
    189
    Likes Received:
    4
    Reputations:
    -5
    согласен, так в этом коде и было изначально. только при загрузке тоже было кривое имя) И мне не удобно смареть выкладывали этот файл на форум или нет. И удалять лишнее.
     
  9. Vinsik

    Vinsik Elder - Старейшина

    Joined:
    4 Oct 2008
    Messages:
    189
    Likes Received:
    4
    Reputations:
    -5
    так любому файлу приписка (copy) ставится
     
  10. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Извини, не видел что скрипт кривой и не формирует расширение файла. Хак в строчках:

    Code:
    $attach_name = substr($_FILES['attached']['name'], 0, strrpos($_FILES['attached']['name'], '.') - 1);
    $uniq = strtolower(str_replace($ru,$tr,$attach_name));
    $ext = substr($_FILES['attached']['name'], strrpos($_FILES['attached']['name'], '.') + 1);
    if (file_exists($att_path."/".$uniq.".".$ext)) $uniq = $uniq . '(copy)';
    PHP:
    <?
        include(
    "include/common.php");
        
        if(
    $loggedin){
            include(
    "include/accmenu.php");
        }
        if( 
    $_POST['submit'] && $_FILES['attached']['name'] ){
            
    $ok_filetypes explode("|",$att_filetypes);
            if (!
    $_FILES['attached']['error'] && $_FILES['attached']['size'] > $att_max_size*1024){
                
    errform('<CENTER>Извините, слишком большой размер файла!</CENTER><BR><BR>'); // #err
                
    $step 1;
            }
            
    $filename = (!$_FILES['attached']['error'] ? substrbasename($_FILES['attached']['name']), -30 ) : '');
            
    $x strtolowersubstr($_FILES['attached']['name'], -3));
            if(
    $filename && !in_array($x$ok_filetypes) ){
                
    errform('<CENTER>Не поддерживаемый тип файла!!!</CENTER><BR><BR>');
                
    $step 1;
            }
            if(!
    $posterr){
                if(!isset(
    $_GET["ipaddress"]) || ($_GET["ipaddress"] == "")) {
                    
    $ipaddress $_SERVER['REMOTE_ADDR'];
                    
    $local 1;
                } else {
                    
    $ipaddress $_GET["ipaddress"];
                    
    $local 0;
                }
        

                    
    $ru=array("а","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
                    
    $tr=array("a","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja");
                    
    $attach_name substr($_FILES['attached']['name'], 0strrpos($_FILES['attached']['name'], '.') - 1);
                    
    $uniq strtolower(str_replace($ru,$tr,$attach_name));
                    
    $ext substr($_FILES['attached']['name'], strrpos($_FILES['attached']['name'], '.') + 1);

                if (
    file_exists($att_path."/".$uniq.".".$ext)) $uniq $uniq '(copy)';
                
    move_uploaded_file($_FILES['attached']['tmp_name'], $att_path."/".$uniq.".".$ext );

                
    $strQuery  "INSERT INTO images25 SET ";
                  
    $strQuery .= "filename='($uniq)',"
                if(
    $myuid){
                    
    $strQuery .= "user='{$myuid}',";
                }
                
    $strQuery .= "status='1'";
                
    $result mysql_query($strQuery) or die( mysql_error() );
                
    $aid mysql_insert_id();
                if(
    $aid){
                    
    $filen $siteurl."/".str_replace('./'''$att_path)."/".$uniq."";
                    
    $filen str_replace('http://','%%',$filen);
                    
    $filen str_replace('//','/',$filen);
                    
    $filen str_replace('%%','http://',$filen);

                    
                    
    //ITS AN IMAGE
                    
    if($x=="jpg" or $x=="jpeg" or $x=="gif" or $x=="png" or $x=="jif" or $x=="jfif")
                    {
                        
    $filenx=$filen;
                    }
                    else
                    {
                        include(
    "include/const.inc.php");
                        
    $filenx $siteurl."/icons/".$Icons[$ext];
                    }


                    
    $step 2;
                }else{
                    
    $step 1;
                }
            }
        }else{
            
    $step 1;
        }
        if(
    $step == 1){
        
    ?>
     
  11. Vinsik

    Vinsik Elder - Старейшина

    Joined:
    4 Oct 2008
    Messages:
    189
    Likes Received:
    4
    Reputations:
    -5
    теперь после загрузки файла я я.mp3 он переименовался в ja_(copy).mp3 хоть и должен был переименоватся в ja_ja(copy).mp3 . И шара выдала ошибку
    "Файл удачно загружен!

    Unable to open ./uploads/ja_(copy) "
    а вообще вот нормальный вид шары) http://uploaded.to/?id=tizq10
     
  12. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Так ты перед реплейсом проверяй на уникальность
     
    _________________________
  13. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    В жизни не видел такого кривого скрипта... Кто его писал? Попробуй так...

    PHP:
    <?
        include(
    "include/common.php");
        
        if(
    $loggedin){
            include(
    "include/accmenu.php");
        }
        if( 
    $_POST['submit'] && $_FILES['attached']['name'] ){
            
    $ok_filetypes explode("|",$att_filetypes);
            if (!
    $_FILES['attached']['error'] && $_FILES['attached']['size'] > $att_max_size*1024){
                
    errform('<CENTER>Извините, слишком большой размер файла!</CENTER><BR><BR>'); // #err
                
    $step 1;
            }
            
    $filename = (!$_FILES['attached']['error'] ? substrbasename($_FILES['attached']['name']), -30 ) : '');
            
    $x strtolowersubstr($_FILES['attached']['name'], -3));
            if(
    $filename && !in_array($x$ok_filetypes) ){
                
    errform('<CENTER>Не поддерживаемый тип файла!!!</CENTER><BR><BR>');
                
    $step 1;
            }
            if(!
    $posterr){
                if(!isset(
    $_GET["ipaddress"]) || ($_GET["ipaddress"] == "")) {
                    
    $ipaddress $_SERVER['REMOTE_ADDR'];
                    
    $local 1;
                } else {
                    
    $ipaddress $_GET["ipaddress"];
                    
    $local 0;
                }
        

                    
    $ru=array("а","б","в"," ","г","д","е","ё","ж","з","и","й","к","л","м","н","о","п","р","с","т","у","ф","х","ц","ч","ш","щ","ъ","ы","ь","э","ю","я");
                    
    $tr=array("a","b","v","_","g","d","e","oh","zh","z","i","j","k","l","m","n","o","p","r","s","t","u","f","x","c","ch","sh","w","qh","y","q","eh","ju","ja");
                    
    $attach_name substr($_FILES['attached']['name'], 0strrpos($_FILES['attached']['name'], '.') - 1);
                    
    $uniq strtolower(str_replace($ru,$tr,$attach_name));
                    
    $ext substr($_FILES['attached']['name'], strrpos($_FILES['attached']['name'], '.') + 1);

                if (
    file_exists($att_path."/".$uniq.".".$ext)) $uniq $uniq '(copy)';
                
    move_uploaded_file($_FILES['attached']['tmp_name'], $att_path."/".$uniq.".".$ext );

                
    $strQuery  "INSERT INTO images25 SET ";
                  
    $strQuery .= "filename='($uniq.$ext)',"
                if(
    $myuid){
                    
    $strQuery .= "user='{$myuid}',";
                }
                
    $strQuery .= "status='1'";
                
    $result mysql_query($strQuery) or die( mysql_error() );
                
    $aid mysql_insert_id();
                if(
    $aid){
                    
    $filen $siteurl."/".str_replace('./'''$att_path)."/".$uniq.".".$ext;
                    
    $filen str_replace('http://','%%',$filen);
                    
    $filen str_replace('//','/',$filen);
                    
    $filen str_replace('%%','http://',$filen);

                    
                    
    //ITS AN IMAGE
                    
    if($x=="jpg" or $x=="jpeg" or $x=="gif" or $x=="png" or $x=="jif" or $x=="jfif")
                    {
                        
    $filenx=$filen;
                    }
                    else
                    {
                        include(
    "include/const.inc.php");
                        
    $filenx $siteurl."/icons/".$Icons[$ext];
                    }


                    
    $step 2;
                }else{
                    
    $step 1;
                }
            }
        }else{
            
    $step 1;
        }
        if(
    $step == 1){
        
    ?>
     
  14. Vinsik

    Vinsik Elder - Старейшина

    Joined:
    4 Oct 2008
    Messages:
    189
    Likes Received:
    4
    Reputations:
    -5
    Файл удачно загружен!

    Unable to open ./uploads/7-mc_zhan__dj_riga-0

    Частично я, и весь Ачат.... =)))) Опять ошибка =(
     
  15. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Слуш, дай доступы я тебе сделаю... Просто вслепую такой скрипт отлаживать трудно... Пиши в ПМ
     
  16. Vinsik

    Vinsik Elder - Старейшина

    Joined:
    4 Oct 2008
    Messages:
    189
    Likes Received:
    4
    Reputations:
    -5
    не получится.... все хранится на локальном сервере... во внеху выхода нет.
     
  17. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    заверни тогда скрипты + БД с которой он работает
     
    1 person likes this.
  18. Vinsik

    Vinsik Elder - Старейшина

    Joined:
    4 Oct 2008
    Messages:
    189
    Likes Received:
    4
    Reputations:
    -5
    окей, ток там все криво) Я не чистил ниче) Попозже прям сюда выложу) Это серовно уже достояние обществености.
     
  19. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ок, напиши только потом в ПМ, чтобы я знал :) А то за темой могу не уследить...
     
  20. Vinsik

    Vinsik Elder - Старейшина

    Joined:
    4 Oct 2008
    Messages:
    189
    Likes Received:
    4
    Reputations:
    -5
    сразу говорю) Скрипт частично урезал и переписывал я из целого файлообменного движка) Поэтому оч много ненужных *.php файлов, мне некада их убирать.
    http://depositfiles.com/files/7zsdpmku4