2014-05-09 1 views
0

파일의 이름을 바꾸고 사용자 ID와 함께 이름에서 고유 한 이름을 생성하는 함수를 만들고 싶습니다. 아래 기능은 제대로 작동하지만 만족스럽지 않아 친절하게도 나에게 비슷한 기능을 제공합니다.고유 한 파일 이름에 대한 함수를 만들 수있는 방법

if(is_array($file) and $file['name'] != '') 
     { 
      // getting unique file name 
      $file['name'] = getUniqueFilename($file); 

      $file_path = $file_root_path.$file['name']; 
      if(move_uploaded_file($file['tmp_name'], $file_path)){$filename = $file['name'];} 
      // 
      if($oldfile != ''){delete_file($file_root_path.$oldfile);} 
      return $filename; 
     } // if ends 
     else 
     { 
      return $oldfile; 
     } // else ends 

function getUniqueFilename($file) 
    { 
     if(is_array($file) and $file['name'] != '') 
     { 
      // getting file extension 
      $fnarr   = explode(".", $file['name']); 
      $file_extension = strtolower($fnarr[count($fnarr)-1]); 

      // getting unique file name 
      $file_name = substr(md5($file['name'].time()), 5, 15).".".$file_extension; 
      return $file_name; 
     } // ends for is_array check 
     else 
     { 
      return ''; 
     } // else ends 
    } // ends 
+3

어떻게 기능을 다르게 사용 하시겠습니까? – ioseph

+1

현재 기능에 만족하지 않으신 이유는 무엇입니까? 어떤 요구 사항이 정확히 채워지지 않는가? – akhilless

+0

나는 파일 이름을 바꾸고 사용자 ID에 대해 데이터베이스 테이블에 파일 이름을 삽입하고 업데이트하는 기능을 만들고 싶기 때문에. –

답변

0

를 생성하는

+0

고맙습니다. –

0

이 코드를 사용하십시오, 그것은 당신에게

<?php 
    function tempdir($dir, $prefix='', $mode=0700) 
    { 
    if (substr($dir, -1) != '/') $dir .= '/'; 

    do 
    { 
     $path = $dir.$prefix.mt_rand(0, 9999999); 
    } while (!mkdir($path, $mode)); 

    return $path; 
    } 
?> 

참조 링크를 도움이 될 수 http://www.php.net/manual/en/function.tempnam.php

+0

응답을 주셔서 감사합니다. –

0

당신은 [timestamp][2] 및 난수의 현재와 소금에 절인 [md5][1] 해시와 파일 이름을 만들 수 있습니다.

뭔가 같은 :

function getUniqueFilename($file) 
{ 
    do { 
    $name = md5(time().rand().$file['name']); 
    } while (file_exists($path.$name); 
    return $name; 
} 

path 당신이 당신의 파일은 파일 내용의 해시를 가지고 고유 ID http://php.net/manual/en/function.uniqid.php

function getUniqueFilename($file) 
{ 
    if(is_array($file) and $file['name'] != '') 
    { 
     // getting file extension 
     $file_extension = pathinfo($file['name'], PATHINFO_EXTENSION); 

     // getting unique file name 
     $file_name = uniqid().".".$file_extension; 

     while(file_exists('PATH_TO_WHERE_YOU_SAVE_FILE/'.$file_name)) { 
      $file_name = uniqid().".".$file_extension; 
     } 

     return $file_name; 
    } // ends for is_array check 
    else 
    { 
     return ''; 
    } // else ends 
} // ends 
+0

엔트로피가 좋지 않습니다. 무작위로 갈 계획이라면'/ dev/random' (* NIX)와 같이 괜찮은 PRNG로 가지 않을까요? – deceze

+0

나는 @deceze에 동의하지만, PHP가 * NIX 시스템에 대한 요구가 없으므로 시스템 의존적 인 리소스를 신뢰할 수 없다는 것을 명심해야한다. –

+1

'openssl_random_pseudo_bytes'와 같은 시스템 간 래퍼가 있습니다. 좋은 PRNG를 선택하는 것은 분명히 고려해야 할 것이지만, * random *을 사용한다면,'time.rand'는 꽤 약한 소스입니다. – deceze

1

PHP를 사용 uniqid()를 생성 할 폴더 인 , 예. sha1_file. 이는 각각의 고유 한 파일에 대해 고유 한 이름을 보장합니다. 동일한 파일이 두 번 업로드되면 동일한 해시가 생성되므로 동일한 파일의 중복 파일을 저장하지 않아도됩니다.

관련 문제