2011-12-19 4 views
7

내 웹 사이트에 이미지 업로드와 함께 토론 양식을 제출했습니다. 이제 사용자가 이미지를 제출할 때 고유 한 파일 이름을 업로드하여 모든 이미지의 결과를 보여줄 수 있고 중복 된 파일 이름을 피할 수 있습니다. PHP로 어떻게 할 수 있습니까? 내 양식 프로세스 코드가 필요한 경우 업로드 할 것입니다.php 업로드 할 때 고유 한 파일 이름

감사합니다.

+1

http://stackoverflow.com/questions/8551763/stest-image-data-in-mysql-and-naming-conventions/8551813#8551813 – Richard

+1

'move_uploaded_file()으로 영구 파일의 이름을 지정하는'uniqid() ' –

답변

10

당신은 고유 ID를

/** 
* Generate a unique ID 
* @link http://www.php.net/manual/en/function.uniqid.php 
* @param prefix string[optional] <p> 
* Can be useful, for instance, if you generate identifiers 
* simultaneously on several hosts that might happen to generate the 
* identifier at the same microsecond. 
* </p> 
* <p> 
* With an empty prefix, the returned string will 
* be 13 characters long. If more_entropy is 
* true, it will be 23 characters. 
* </p> 
* @param more_entropy bool[optional] <p> 
* If set to true, uniqid will add additional 
* entropy (using the combined linear congruential generator) at the end 
* of the return value, which should make the results more unique. 
* </p> 
* @return string the unique identifier, as a string. 
*/ 
function uniqid ($prefix = null, $more_entropy = null) {} 
8

날짜에 타임 스탬프를 사용하면 동일한 파일 이름/시간을 두 번 얻지 못할 수 있습니다.

코드처럼 보이지만 당신이 이런 식으로 뭔가를 할 수 정확히하지 특정 :

$filename = uniqid() . $orig_filename; 

Read this documentation on the PHP docs about uniqid for more information. 고유 식별자 문자열을 출력하기 위해 datetime을 사용합니다.

+0

죄송합니다. 제발 좀 도와주세요 –

+0

글쎄, 그것은 고유 한 ID로 이름을 데이터베이스에 변경하는 것과 같습니다 : 4eef63add36881162_03.JPG.하지만 이미지 폴더에 원본 이미지 이름이 표시됩니다 (예 : 1162_03.jpg). 원본 이미지 이름을 정확하게 데이터베이스 이미지 이름으로 바꿀 수 있습니까? –

+0

이 문제가 해결되었습니다. 배트 킨 감사합니다. –

0

데이터베이스 필드에 이미지 이름을 저장 한 다음 사용자가 이미지를 업로드 할 때 기존 파일 이름과 비교하여 파일 이름이 고유하다는 것을 확인하는 것이 가장 간단한 방법이라고 생각합니다. 오류가 발생하거나 파일 이름을 변경하라는 메시지가 표시 될 때까지 양식을 제출할 때까지 기다리지 않으려면 ajax/jquery 인터페이스를 사용할 수 있습니다. 당신은 고유 한 이름이 필요하면, 당신은 uniqid을 사용할 수 있습니다

+0

음,하지만 더 좋은 방법이 있다고 생각합니다. –

+0

더 좋은 방법은 무엇을 의미합니까? 다른 의견에서 제안 된 것과 같이 unique_id를 사용하거나 사용자 이름을 사용하는 것이 2 가지 가장 좋은 방법이라고 생각합니다. 고객에게 이름을 표시하려는 경우 더 나은 방법은 사용자가 사용자에게 친숙한 이름으로 파일의 이름을 지정할 수있게하는 것입니다. 그렇지 않으면 고객에게 적합하지 않을 수있는 unique_id를 표시하게됩니다. – Robert

3

를 생성하는 uniqid() 기능을 사용할 수 있습니다.

$filename = uniqid() . '.jpeg'; 

그것은 단지 하나의 시스템에서 고유 것이다하지만, 경고 당신이 두 개의 서로 다른 시스템에 매우 동시에 실행할 경우이 같은 일을 생성 할 수 있습니다 즉합니다.

+0

+1 '한 대의 컴퓨터에서 유일 할뿐입니다. 즉 두 대의 다른 컴퓨터에서 동시에 실행할 경우 동일한 것을 생성 할 수 있습니다.'라는 경고를받습니다. –

1

가장 좋은 옵션은 IMO sha1_file을 사용하는 것입니다. 파일 내용을 기반으로 고유 한 해시를 생성합니다. 이것은 동일한 이미지 또는 해시 충돌이 1 2 in2^160의 확률 인 경우에만 충돌합니다. 그러나 파일에서 해시를 생성하면 이미지가 중복 될 수 있으므로이 방법으로 이미지가 중복되는 것을 방지 할 수 있습니다.

$filename = sha1_file($upload_file) . $ext; 


또 다른 옵션은 그것은 고유 한 이름와 임시 파일을 생성합니다 tempnam입니다.

참고 : PHP가 지정된 디렉토리 매개 변수 파일을 만들 수 없습니다 경우, 다시 시스템 기본에 떨어진다.

기본 예 :

$filename = tempnam($dir, $prefix); 
unlink($filename)//we don't need the tempfile just the name 

이 또한 참고 : 파일 이름을 변경하는 경우는 고유하지 않을 수 있습니다.

관련 문제