Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 우분투 mysql 비밀번호 없이 로그인 될때
- 파라미터 & 오류
- apple push notification service (apns) is changing
- PHP 구글 OTP 인증
- sha-2 root
- (using password: YES)" when trying to connect
- 자바스크립트비밀번호검증
- wkhtmltopdf 실행 오류
- httpd.conf 보안 설정
- 비밀번호정규식
- svn 충돌 해결 resolved
- javascript
- bootstrap
- svn 충돌 해결 resolve
- 구글 OTP 인증
- mysql root 비밀번호 변경
- libxrender1
- PHP 구글 OTP 연동
- bootstrap modal
- apache mod rewrite
- PHP 정규식 예제
- 아파치 웹 서버의 정보 숨기기
- 비밀번호검증정규식
- usb efi 시스템 파티션 삭제
- php 배열제거
- mysqldump: Got error: 1045
- mariadb upgrade
- group_concat 구분자
- html pdf 변환
- modsecurity 설치
Archives
- Today
- Total
투덜이 개발자
PHP 5.3.27 구버전 에디터 내 base64 인코딩 이미지 파일로 저장하기 본문
반응형
PHP 5.3.27 구버전 에디터 내 base64 인코딩 이미지 파일로 저장하기
summernote 내 이미지 첨부하면 base64 인코딩 되어 저장된다.
이것을 파일로 저장할려고 한다.
php 버전을 업데이트 하면 좋겠지만 상황이 여의치 않아 php 버전이 오래된 버전이라 상당히 힘들었다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Summernote</title>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/summernote@0.9.0/dist/summernote.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/summernote@0.9.0/dist/summernote.min.js"></script>
</head>
<body>
<form name="theForm" method="post" action="./write.php" ENCTYPE="multipart/form-data" onsubmit="return false;">
<INPUT TYPE="hidden" name='mode' value='save'>
<textarea name="content" id="summernote">
<p>Hello Summernote</p>
</textarea>
<div>
<input type="button" class="submit2" value=" 전 송 " onclick="form_submit(this.form); return false;">
</div>
</form>
<script>
$(document).ready(function () {
$('#summernote').summernote({
height: 300, // 에디터 높이
minHeight: null, // 최소 높이
maxHeight: null, // 최대 높이
focus: true, // 에디터 로딩후 포커스를 맞출지 여부
lang: "ko-KR", // 한글 설정
placeholder: '내용을 입력하세요.' //placeholder 설정
});
});
function form_submit(f) {
if (confirm("전송하시겠습니까?")) {
f.submit();
return true;
}
}
</script>
</body>
</html>
<?php
header("Content-Type: text/html; charset=UTF-8");
$content = $_POST['content'];
if (get_magic_quotes_gpc()) {
$content = stripslashes($content);
}
$uploadDir = 'uploads/';
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
$pos = strpos($content, '<img');
while ($pos !== false) {
$endPos = strpos($content, '>', $pos);
if ($endPos === false || $endPos >= strlen($content)) break; // 태그 닫힘 위치가 없거나 비정상적이면 중단
$imgTag = substr($content, $pos, $endPos - $pos + 1);
$srcPos = strpos($imgTag, 'src="');
if ($srcPos !== false) {
$srcStart = $srcPos + 5; // src=" 이후 시작 위치
$srcEnd = strpos($imgTag, '"', $srcStart); // 닫는 따옴표 위치 찾기
if ($srcEnd !== false) {
$imgSrc = substr($imgTag, $srcStart, $srcEnd - $srcStart);
// Base64 데이터인지 확인
if (strpos($imgSrc, 'data:image') === 0 && strpos($imgSrc, ';base64,') !== false) {
// MIME 타입 및 데이터 추출
$base64Parts = explode(';base64,', $imgSrc);
$mimeType = str_replace('data:', '', $base64Parts[0]); // 예: image/jpeg
$base64Data = trim($base64Parts[1]); // 공백 제거
// 파일 확장자 확인
$extension = '';
if (strpos($mimeType, 'jpeg') !== false || strpos($mimeType, 'jpg') !== false) {
$extension = 'jpg';
} elseif (strpos($mimeType, 'png') !== false) {
$extension = 'png';
} elseif (strpos($mimeType, 'gif') !== false) {
$extension = 'gif';
} elseif (strpos($mimeType, 'bmp') !== false) {
$extension = 'bmp';
} elseif (strpos($mimeType, 'webp') !== false) {
$extension = 'webp';
} else {
$pos = strpos($content, '<img', $pos + 1); // 다음 검색 위치 정확히 지정
continue;
}
// Base64 데이터 디코딩 및 파일 저장
$imageData = base64_decode($base64Data);
if ($imageData === false) {
$pos = strpos($content, '<img', $pos + 1);
continue; // 디코딩 실패 시 건너뜀
}
// 고유한 파일 이름 생성
$fileName = uniqid() . '.' . $extension;
$filePath = $uploadDir . $fileName;
// 파일 저장
if (file_put_contents($filePath, $imageData) !== false) {
// HTML 콘텐츠 내의 src 파일 경로 변경
$content = str_replace($imgSrc, $filePath, $content);
}
}
}
}
// 다음 <img> 태그 찾기 (공백/개행 고려)
if (preg_match('/<img\s/i', $content, $match, PREG_OFFSET_CAPTURE, $pos + 1)) {
$pos = $match[0][1];
} else {
break; // 더 이상 <img> 태그가 없으면 루프 종료
}
}
// 결과 반환
header('Content-Type: application/json');
echo json_encode(array(
'status' => 'success',
'content' => $content
));
?>
반응형
'Program Language > PHP' 카테고리의 다른 글
preg_match_all 길이 문제 (0) | 2025.02.07 |
---|---|
PHP 배열 제거 (0) | 2024.12.17 |
우분투 APACHE2 + PHP8 + MariaDB 설치 (2) | 2024.11.18 |
PHP 동영상 파일에서 썸네일 추출하는 방법 (0) | 2024.11.11 |
PHP를 사용하여 동영상 인코딩을 수행하는 일반적인 방법 (0) | 2024.11.11 |