프로그램/PHP(8)
-
초를 동영상 재생 시간 (ISO 8601 형식) 으로 변환하는 함수
PHP로 초를 ISO 8601 형식의 동영상 재생 시간으로 변환하는 함수는 다음과 같습니다.PHP diff($dt); $duration = 'PT'; if ($interval->h > 0) { $duration .= $interval->h . 'H'; } if ($interval->i > 0) { $duration .= $interval->i . 'M'; } if ($interval->s > 0 || ($interval->h === 0 && $interval->i === 0)) { // 0초인 경우에도 '0S'를 포함 $duration .= $interval->s . 'S'; } // 만약 H, M, S 아무것도 없는 0초인..
2025.06.08 -
방대한 자료를 LIKE 검색을 하는데 부하를 줄일수 있는 방법
데이터베이스 부하를 줄이는 몇 가지 효과적인 방법이 있습니다.특히 % (와일드카드)를 검색어 앞뒤에 사용하는 LIKE '%검색어%' 방식은 인덱스를 거의 사용하지 못하기 때문에 부하가 매우 커질 수 있습니다.1. 검색어 앞의 % 사용 최소화가장 먼저 고려해야 할 사항입니다. 만약 LIKE '검색어%' 처럼 검색어 뒤에만 와일드카드를 사용한다면, 해당 컬럼에 **인덱스(Index)**가 걸려 있을 경우 인덱스를 활용하여 검색 속도를 크게 향상시킬 수 있습니다.하지만 LIKE '%검색어' 나 LIKE '%검색어%' 는 대부분의 경우 인덱스를 활용하지 못하고 테이블 전체를 스캔(Full Table Scan)하게 됩니다. 이것이 부하의 주범입니다.해결 방안:검색 정책 변경 고려: 사용자에게 검색어 앞의 와일드카..
2025.06.06 -
macOS에서 파일 업로드 시 발생하는 한글 자소 분리 문제를 해결
문제의 주요 원인 및 버그:ChangeMacUTF8 함수 내 UTF-8 바이트 처리 오류:$c = $strName[$i].$strName[$i+1].$strName[$i+2]; // utf-8 은 3바이트. 이 부분은 한글 UTF-8 문자가 항상 3바이트라고 가정합니다. 하지만 UTF-8은 1바이트(ASCII), 2바이트(일부 유럽 문자), 3바이트(한글, 일본어, 중국어 등), 4바이트(이모지 등)까지 다양한 길이의 문자를 표현할 수 있습니다.$i = $i+2; // 3바이트니 +2 역시 3바이트 문자로 고정하고 인덱스를 건너뛰고 있습니다. 실제 문자의 바이트 길이를 확인하지 않고 고정적으로 3바이트씩 건너뛰면, 2바이트 또는 4바이트 문자를 만나면 잘못된 바이트를 읽어들이게 되어 문자 깨짐으로 이어집..
2025.06.04 -
PHP 함수가 있는지 체크하고 정의 하는 방법
PHP에서 함수가 정의되어 있지 않다면 그 함수를 정의하는 방법은 function_exists() 함수를 활용하여 조건부로 함수를 선언하는 것입니다. 이 방법은 특히 플러그인, 라이브러리, 또는 환경에 따라 특정 기능의 존재 여부가 달라질 수 있는 경우에 매우 유용합니다.왜 조건부 함수 정의가 필요할까요?중복 정의 방지: 같은 이름의 함수를 두 번 정의하면 PHP Fatal Error가 발생하여 스크립트 실행이 중단됩니다. function_exists()를 사용하면 이러한 오류를 피할 수 있습니다.하위 호환성: 특정 함수가 구버전 PHP에는 없지만 신버전에는 있을 때, function_exists()로 확인하여 구버전을 위한 폴백(fallback) 함수를 정의할 수 있습니다.확장성 및 유연성: 다른 개발..
2025.06.04 -
Content Security Policy (CSP)엄격하게 설정하는 방법
Content Security Policy (CSP)를 엄격하게 설정하는 것은 웹 애플리케이션의 크로스 사이트 스크립팅(XSS) 및 기타 콘텐츠 주입 공격을 방어하는 데 매우 효과적인 방법입니다. 엄격한 CSP는 기본적으로 모든 리소스를 차단하고, 필요한 리소스만 명시적으로 허용하는 "화이트리스트(Whitelist)" 방식을 취합니다.CSP의 기본 원리CSP는 웹 페이지가 로드할 수 있는 리소스(스크립트, 스타일시트, 이미지, 폰트, 미디어 등)의 출처(Source)를 웹 서버가 브라우저에게 알려주는 메커니즘입니다. 브라우저는 이 정책에 따라 허용되지 않은 출처의 리소스 로드를 차단합니다.CSP는 주로 HTTP 응답 헤더를 통해 설정하거나, HTML 태그를 통해 설정할 수 있습니다. HTTP 헤더를 통..
2025.06.04 -
PHP Path Combine 방법
PHP에는 Python의 os.path.join()이나 .NET의 Path.Combine()과 같이 운영체제에 관계없이 경로를 안전하게 결합해주는 내장 함수가 없습니다.하지만 직접 간단한 함수를 만들거나, 특정 라이브러리를 사용해서 이와 유사한 기능을 구현할 수 있습니다.직접 path_combine 함수 만들기가장 일반적인 방법은 슬래시(/)를 기준으로 경로를 결합하고, 불필요한 슬래시를 제거하거나 추가하는 방식입니다.PHP 라이브러리 사용 (Composer)만약 Composer를 사용하여 프로젝트를 관리하고 있다면, 이미 잘 만들어진 파일 시스템 관련 라이브러리들을 활용할 수 있습니다. 예를 들어, symfony/filesystem 또는 league/flysystem 같은 라이브러리들은 경로 결합 기능..
2025.06.04