2011-02-23 2 views
31

주어진 PHP 배열의 파일 이름이 안전한 해시를 만드는 방법을 찾고 있습니다.전체 PHP 배열을 고유 한 값으로 해싱

$filename = md5(print_r($someArray, true)); 

을 ...하지만 각 배열에 고유 한 문자열을 생성하는 인 print_r()를 사용하여 "해키"느낌 : 나는 현재하고 있어요.

더 깨끗한 방법으로 해결할 수있는 아이디어가 있습니까?

편집 글쎄, 모든 사람들이 직렬화가 작업에 더 적합하다고 생각하는 것 같습니다. 이유가 뭐야? 나는 그것이 해시 된 후에도 변수에 대한 정보를 검색하는 것에 대해 걱정하지 않는다. (단방향 해시이기 때문에 좋다). 답장을 보내 주셔서 감사합니다!

+1

를 사용할 수 있습니다. – Dutchie432

+0

두 방법 모두 똑같이 효과적이라고 말할 수 있습니다. 그러나 그들의 목적이 다른 점을 고려하여 print_r 대신 serialize를 사용하는 것이 더 정확합니다. 하지만 그것은 프로그래머 강박증이 나와 같은 경우에만 해당됩니다. :) – OCDev

답변

51

print_r() 대신 md5(serialize())을 사용하십시오. serialize() 데이터베이스 또는 세션 스토리지 지속성위한 소형 텍스트 문자열 (또는 다른 지속성기구)으로서 배열 또는 객체의 표현을 인코딩하는 반면

print_r()의 목적은, 주로 디버그 함수이고 평문 디스플레이 포맷된다. 당신이 등 유형을 유지하려는 경우

+0

답해 주셔서 감사합니다. 모든 이유가 직렬화되면 더 좋을까요? – loneboat

+0

고마워! 답변으로 표시되었습니다. – loneboat

+0

이 방법에 대한 벤치 마크를보고 싶습니다. 대안이 있습니다. –

6

serialize() 잘 작동합니다.

오브젝트에 __sleep 마법 메소드를 호출하고 PHP 전체에서 사용할 수있는 가장 깨끗한 직렬화 메소드라는 추가적인 이점이 있습니다.

+0

입력 해 주셔서 감사합니다! – loneboat

2

serialize()를 사용하면 ...

5

무엇 직렬화에 대해 더 보수적 될 수 있을까요?

$filename = md5(serialize($someArray));

관련 문제