2014-06-11 2 views
1

이미지를 S3에 업로드하고 업로드 된 각각에 대해 고유 한 이름을 만들고 싶습니다. 그런 다음해싱 이미지 이름

$img = Image::make($file->getRealPath()); 

내가 이미지를 해시 : : 나 이미지를 만들기 위해 개입을 사용하고

나도 같은 이미지를 업로드 할 때 문제는,이 같은 이름을 부여 것입니다

$name = hash('sha256', $img); 

.

어떻게이 문제를 해결할 수 있습니까?

+1

시도'$ 이름 = 해시 시도 할 수 있습니다 ('SHA256', $의 imgm을, false)를'확장이의 – SJD

답변

0

당신은에 소금을 추가하려고합니다. 날짜/시간을 추가하는 경우에도 고유 한 이름을 부여해야합니다. 건배!

PS (편집) :

$data = Image::make($file->getRealPath())->encode('data-url'); 

$name = hash('sha256', $data . strval(time())); 

먼저 우리는 "문자열 방식"의 데이터를 인코딩 그래서 우리는 문자열로 시간 값을 연결할 수 있습니다.

당신이 여분의 "임의성"사용자 쿠키를 추가, 사용자 이름 등

최종 해결하려면 다음

$ 데이터 = 내파 (''파일 ($ 파일 ->를 getRealPath()));

$ name = hash ('sha256', $ data. strval (time()));

+0

이 방법에 대한 예제를 보여 주시겠습니까? – user3729576

+0

$ data = Image :: make ($ file-> getRealPath()) -> encode ('data-url'); $ name = hash ('sha256', $ img. strval (time())); – Cucu

+0

최신 편집이 최적이 아니지만 작동해야합니다. 그것을 테스트하지 않았습니다! – Cucu

1

대신 com_create_guid()을 사용하여 글로벌 고유 식별자를 생성 해 보셨습니까? 이렇게하면 각 파일에 고유 한 이름이 부여됩니다. 예 :

$name = com_create_guid(); 
+0

를? 차라리 확장 프로그램을 사용하지 않을 것입니다. – user3729576

+0

오 예. 또한 기본 확장 인 uniqid() http://www.php.net//manual/en/function.uniqid.php가 있습니다. UUID를 사용하여 업로드 된 파일에 고유 한 파일 이름을 생성하는 것이 일반적입니다 (적어도 .NET 세계에서는). – user2444499

0

각 업로드마다 타임 스탬프를 사용하는 것이 가장 좋은 방법입니다. time() 기능을 사용하여 $ img와 현재 시간 소인을 결합하면됩니다. 예를 들어

:

hash('sha256', $img+time()); 
+0

이미지를 int로 변환 할 수 없습니다 – user3729576

-1

당신은 추가 할 랜드()

hash('sha256', $img . rand(1,100)); 
+0

이것은 여전히 ​​그에게 임의의 숫자가 선택 될 것이라고하는 사람을줍니다. 1 %라도 여전히 해결하려는 문제를 제거하지 않았습니다. –