φ

PHP Serialize 변환 php

JSON과 PHP serialize() 형식을 서로 변환합니다. 세션이나 DB에 저장된 직렬화 문자열을 확인할 때 사용합니다.

mode
INPUTdata
0 lines 0 chars
1
OUTPUTresult
0 lines 0 chars
1
도구 설명

이 도구가 하는 일

PHP의 serialize() 함수는 배열이나 객체를 문자열로 바꿔 저장할 수 있게 만듭니다. 결과 문자열은 타입과 길이 정보를 함께 담기 때문에 특유의 형태를 가집니다. 예를 들어 s:5:"alice" 는 길이 5인 문자열 alice를, i:30 은 정수 30을, a:2:{...} 는 원소가 2개인 배열을 뜻합니다. b:1 은 true, N; 은 null입니다.

이런 값은 세션 파일, 데이터베이스 컬럼, 캐시, 워드프레스의 옵션 테이블 같은 곳에 그대로 저장되어 있는 경우가 많습니다. 사람이 눈으로 읽기는 불편하지만 구조가 규칙적이라 JSON으로 변환하면 훨씬 파악하기 쉽습니다.

이 도구는 두 방향 변환을 모두 지원합니다. 문자열, 숫자, 불리언, null, 순차 배열, 연관 배열을 처리하며 중첩된 구조도 그대로 유지합니다.

언제 사용하나요

데이터베이스에 저장된 직렬화 값의 내용을 확인할 때, 워드프레스 옵션이나 메타 값을 검토할 때, 세션 데이터가 어떤 구조로 저장되어 있는지 볼 때, PHP 코드에 넣을 테스트 데이터를 JSON으로부터 만들 때 사용합니다.

입력과 출력 예시

입력 {"name":"alice","age":30}
출력 a:2:{s:4:"name";s:5:"alice";s:3:"age";i:30;}

s:4 는 키 name의 길이 4를, i:30 은 정수 타입을 의미합니다.

입력 a:1:{s:4:"tags";a:2:{i:0;s:1:"a";i:1;s:1:"b";}}
출력 {"tags":["a","b"]}

중첩 배열도 그대로 변환됩니다. 순차 배열은 인덱스가 i:0, i:1 로 기록됩니다.

주의사항

직렬화 문자열은 문자열 길이를 바이트 수로 기록합니다. 따라서 한글이 포함된 값을 텍스트 편집기로 직접 수정하면 길이 정보가 맞지 않아 역직렬화가 실패합니다. 값을 고쳐야 한다면 반드시 도구나 코드를 통해 다시 직렬화하십시오. 또한 PHP 객체(O: 로 시작하는 형태)의 역직렬화는 클래스 정의에 의존하고 보안 위험이 있어 이 도구는 배열과 기본 타입 중심으로 처리합니다. 신뢰할 수 없는 입력을 서버에서 unserialize 하는 것은 원격 코드 실행으로 이어질 수 있는 알려진 취약점입니다.

자주 묻는 질문

값을 직접 수정했더니 오류가 납니다.

문자열 앞의 길이 숫자가 실제 바이트 수와 맞지 않기 때문입니다. 특히 한글은 글자당 3바이트라 글자 수와 바이트 수가 다릅니다. 도구로 다시 변환하십시오.

JSON 대신 serialize를 쓰는 이유가 있나요?

PHP 전용 타입 정보를 보존할 수 있다는 장점이 있지만, 다른 언어와 데이터를 주고받을 수 없고 보안 위험도 있어 최근에는 JSON을 사용하는 것이 일반적입니다.

Copied