WebHard S2

개발 연혁 & 패치노트

10,000+
총 코드 라인
52+
PHP 소스 파일
10
메이저 업데이트
v3.0 2026년 3월 초
프로젝트 시작 — 기본 구조 구축

🏗️ 코어 시스템

  • PHP + MySQL 기반 웹하드 아키텍처 설계 NEW
  • MVC 구조: core(Auth, DB, FileManager, Security, bootstrap) + API 분리
  • 웹 설치 마법사 (install.php) — DB 연결부터 관리자 계정 생성까지 원클릭 설치
  • 세션 기반 회원 인증 시스템 (로그인/로그아웃/회원가입)
  • userid별 개인 폴더 기반 파일 격리 저장 구조

📁 파일 관리

  • 파일 업로드 / 다운로드 / 삭제
  • 폴더 생성 / 삭제 / 트리 구조
  • 파일·폴더 이름 변경
  • 휴지통 시스템 (삭제 → 휴지통 → 영구 삭제)
  • 드래그 앤 드롭 업로드 지원
  • 사용자별 용량 할당 및 사용량 추적

🔒 보안

  • CSRF 토큰 검증 SECURITY
  • 위험 확장자 절대 차단 (php, exe, bat 등 40종+)
  • 이중 확장자 차단 (file.php.jpg 방지)
  • MIME 타입 검증 (확장자 위조 방지)
  • PHP 코드 삽입 탐지
  • XSS 방어 (출력 이스케이프)
  • uploads/.htaccess 직접 접근 차단
v3.1 2026년 3월 말
미디어 플레이어 & 공유 시스템

🎵 음악 플레이어

  • 하단 뮤직바 UI — 재생/일시정지, 이전/다음곡 NEW
  • 프로그레스바 시킹 (원하는 위치로 이동)
  • 볼륨 조절 슬라이더
  • 셔플(랜덤) / 반복 재생 모드
  • 플레이리스트 패널 (폴더 내 음악 자동 수집)
  • 긴 제목 마퀴(흐르는 텍스트) 효과
  • Range 요청 기반 HTTP 스트리밍 (mp3, flac, wav, aac, m4a, ogg)

🎬 비디오 플레이어

  • 전체화면 비디오 플레이어 NEW
  • 에피소드 사이드바 (폴더 내 영상 목록)
  • 이어보기 기능 — 재생 위치 자동 저장/복원
  • 배속 조절 (0.5x ~ 2.0x)
  • 밝기 조절 오버레이 + 좌측 슬라이더
  • 볼륨 우측 슬라이더
  • 화면 잠금 기능 (터치 오작동 방지)
  • 모바일 스와이프 제스처 (좌우: 시킹, 상하: 밝기/볼륨)
  • 중앙 HUD 아이콘 (⏩ ⏪ ▶ ⏸ 등)
  • Range 요청 기반 스트리밍 (mp4, webm, mkv, avi, mov)

🔗 외부 공유

  • 파일 공유 링크 생성 (고유 코드 기반) NEW
  • 비밀번호 보호 공유
  • 다운로드 횟수 제한 / 기간 제한
  • 공유 페이지 내 미디어 인라인 재생
  • 공유 접근 로그 기록

💬 커뮤니티

  • 게시판 (공지사항) — 글 작성/읽기/삭제
  • 회원 간 쪽지 기능
v3.2 2026년 3월 말
회원 관리 & 보안 강화

👤 회원 시스템

  • 아이디 찾기 / 비밀번호 찾기 (이메일 기반) NEW
  • 프로필 수정 (이름, 이메일, 비밀번호 변경)
  • 회원가입 승인 제도 (관리자 승인 / 자동 승인 설정)
  • SMTP 이메일 설정 (비밀번호 찾기용)

⚙️ 관리자 패널

  • 회원 관리 — 승인, 차단, 비밀번호 초기화, 용량 조절 NEW
  • 공지사항 팝업 설정 (로그인 후 표시)
  • 허용 확장자 설정
  • 회원가입 허용/금지 토글
  • 기본 용량 설정
  • 사이트 이름 동적 변경
  • 공유 링크 기본 만료일 설정
  • 전체 휴지통 관리 (모든 회원 파일 정리)
  • 서버 디스크 사용량 모니터링
  • 저장 공간 관리 (디스크 최소 여유 공간 설정)

🛡️ 보안 강화

  • 로그인 실패 잠금 (N회 실패 시 차단) SECURITY
  • 공유 링크 비밀번호 시도 횟수 제한
  • API 레이트리밋 (분당 요청 수 제한)
  • 업로드 레이트리밋
  • Origin 헤더 검증
  • 서버 디스크 여유 공간 임계치 체크
v3.5 2026년 4월 초
UI/UX 개선 & 동기화

🎨 UI/UX

  • 다크/라이트 테마 전환 UI
  • PC/모바일 반응형 레이아웃
  • 모바일 전용 하단 네비게이션 바
  • 모바일 드로어 (사이드 메뉴)
  • 모바일 액션시트 (파일/폴더 컨텍스트 메뉴)
  • 모바일 카메라 업로드 지원
  • 파일 정렬 (이름, 크기, 날짜 / 오름차순·내림차순)
  • 홈 대시보드 — 파일/폴더/공유 수, 용량 통계
  • PWA 지원 (홈 화면 추가, 앱처럼 사용)

🔄 폴더 동기화

  • 물리 폴더 ↔ DB 자동 매칭 (재귀 스캔) NEW
  • 새 파일/폴더 자동 감지 및 등록
  • 유실 파일(DB에만 존재) 정리 옵션
  • 하위 폴더까지 재귀 동기화

📦 파일 이동

  • 파일/폴더 다중 선택 이동 NEW
  • 폴더 이동 시 하위 경로 일괄 업데이트
  • 이동 중 폴더명 중복 자동 처리
v4.0 2026년 4월 20일
폴더 공유 & 공유 관리

📂 폴더 공유

  • 폴더 단위 외부 공유 링크 NEW
  • 공유 페이지 내 미디어 플레이어 (사이드바 + 재생)
  • 폴더 공유 비밀번호 보호
  • 공유 옵션 업데이트 (기존 링크 재사용)

📋 공유 관리

  • 내 공유 목록 조회 NEW
  • 공유 링크 삭제 (비활성화)
  • 공유 URL 복사 기능
v4.5 2026년 4월 21일
파일 저장 방식 전환

🔧 핵심 변경

  • 물리 파일명: 랜덤 코드 → 원본 파일명으로 전환 NEW
  • 기존 파일 87개 일괄 마이그레이션 (오류 0건)
  • 서버 탐색기에서 파일 직접 식별 가능
  • 동일 이름 파일 자동 중복 처리: 파일명(1), 파일명(2)...

🔗 연동 수정

  • getPhysicalPath() 통합 헬퍼 함수 도입
  • 업로드/다운로드/스트리밍/공유/동기화/이동 — 전체 경로 로직 일괄 수정
  • 파일 이름 변경 시 물리 파일도 동시 리네임
  • 파일 이동 시 대상 폴더 중복 자동 처리
  • 마이그레이션 스크립트: 드라이런 / 실행 / 롤백 3단계 안전장치
v4.6 2026년 4월 22일
FFmpeg 영상 인코딩 기능 추가

🎬 영상 인코딩

  • 웹하드 내 FFmpeg 인코딩 기능 통합 NEW
  • 동영상 파일에 인코딩 버튼(🎬) 원클릭 실행
  • 저장 파일명 직접 입력 — 원하는 이름으로 자유롭게 지정
  • 저장 폴더 선택 — 원본 폴더 또는 다른 폴더에 저장
  • 코덱 선택: H.264(호환성 최고) / H.265(용량 40% 절감)
  • CRF 슬라이더(16~30) — 화질/용량 실시간 조절, 화질 설명 자동 표시
  • 인코딩 속도(preset) 선택: ultrafast ~ veryslow
  • 예상 결과 용량 · 예상 소요 시간 실시간 표시
  • 실시간 진행률 바 + 경과 시간 + 인코딩 속도(x배속) 표시
  • 완료 후 파일 목록 자동 갱신 및 DB 자동 등록
  • 모바일 액션시트에도 인코딩 메뉴 추가
  • 인코딩 로그 자동 저장 (uploads/encode_logs/)

⚙️ 설정

  • config.php에 FFMPEG_PATH 설정 추가 NEW
  • FFmpeg 실행 파일 경로를 서버 환경에 맞게 자유롭게 지정
  • api/file/encode.php 신규 API 엔드포인트 추가
v4.7 2026년 4월 23일
인코딩 트랙 선택 & 문서 뷰어 강화

🎵 MKV 오디오 / 자막 트랙 선택

  • 인코딩 모달에 오디오 트랙 선택 드롭다운 추가 NEW
  • 인코딩 모달에 자막 트랙 선택 드롭다운 추가 NEW
  • ffprobe로 MKV 내부 스트림 자동 분석 (오디오·자막 목록 실시간 로드)
  • 한국어 트랙(KOR) 자동 감지 및 우선 선택 ⭐
  • 선택한 오디오 트랙만 추출하여 MP4에 AAC로 재인코딩
  • 선택한 자막을 MP4 소프트 자막(mov_text)으로 포함
  • config에 FFPROBE_PATH 설정 추가 — ffprobe 경로 자유 지정
  • 한글 파일명 경로 처리: 배치파일(chcp 65001) 방식으로 안정화

📄 문서 뷰어 개선

  • 엑셀(xlsx/xls/csv) — SheetJS 브라우저 직접 렌더링으로 전환 NEW
  • 서버 변환(LibreOffice) 없이 즉시 열림 — 권한 문제 완전 해소
  • 시트 탭 UI — 다중 시트 클릭 전환 지원
  • 행/열 번호 헤더 표시 (A, B, C… / 1, 2, 3…)
  • 대용량 파일도 빠르게 렌더링
  • 한글 데이터 완벽 지원
  • PDF·docx·pptx는 기존 LibreOffice PDF 변환 유지
  • 문서 뷰어 iframe 초기 로드 오류(viewerIframeLoaded) 수정 FIX
v5.0 2026년 4월 24일
서버 부하 관리 & 인코딩 큐 시스템

🖥️ 서버 부하 관리 시스템

  • LoadManager 코어 클래스 신규 도입 — 서버 부하 측정·슬롯 관리·속도 제한 통합 NEW
  • 서버 CPU 부하 실시간 측정 (Windows wmic / Linux loadavg 자동 감지)
  • 관리자 패널에 🖥️ 서버관리 탭 추가 — 실시간 현황 대시보드
  • 업로드/다운로드/스트리밍/인코딩 활성 수 한눈에 확인
  • 서버 부하 임계값 설정 (기본 70%) — 초과 시 자동으로 제한 강화
  • wh_transfer_slot 테이블 — 동시 전송 세션 추적 NEW

📤 업로드 동시 제한 (서버 반응형)

  • 사용자당 동시 업로드 수 제한 — 서버 상태에 따라 자동 조절 NEW
  • 서버 부하 낮을 때: 최대치(기본 2개), 높을 때: 최소치(기본 1개)
  • 프론트엔드 업로드 큐 시스템 — 파일 자동 대기·순차 업로드
  • 슬롯 부족 시 자동 재시도 (3초 간격)
  • 업로드 상태 표시 (대기 중 / 업로드 중 / 완료)

📥 다운로드 / 스트리밍 제한 & Throttle

  • 사용자당 동시 다운로드 수 제한 (기본 3개) NEW
  • 사용자당 동시 스트리밍 수 제한 (기본 2개, 동영상만 적용)
  • 다운로드 속도 제한 (KB/s 단위, 0=무제한)
  • 스트리밍 속도 제한 (KB/s 단위, 0=무제한)
  • Throttle 전송 엔진 — 일반 readfile + Range 요청 모두 속도 제한 대응
  • 읽기 버퍼 최적화 (64KB → 256KB~1MB) — HDD 접근 횟수 감소
  • 음악(오디오) 파일은 슬롯 제한 제외 — 곡 넘기기 자유롭게 FIX
  • 동영상 전환 시 이전 슬롯 자동 해제
  • 다운로드 완료 시 슬롯 자동 반납 (shutdown 함수 보장)

🎬 인코딩 큐 시스템

  • 인코딩 대기열(큐) 방식으로 전환 — 요청 즉시 큐에 추가, 순서대로 자동 실행 NEW
  • wh_encode_queue 테이블 — 대기/실행/완료/오류 상태 추적
  • 동시 인코딩 수 제한 (기본 1개, 관리자 설정 가능)
  • 대기열 위치 실시간 표시 (대기열 N번째)
  • 완료 시 다음 대기 작업 자동 시작
  • 관리자 패널에서 인코딩 기능 사용/미사용 토글 NEW
  • 미사용 시 사용자 화면 인코딩 버튼 비활성화
  • 기존 진행 중 작업과 하위 호환 유지 (레거시 json 파일 기반 폴링)

⚙️ 관리자 설정 확장

  • 서버 부하 관리 설정 10개 항목 추가 NEW
  • 인코딩 기능: 사용/미사용 전환
  • 동시 인코딩 수: 1~5개
  • 업로드 최소/최대 동시 수 + 부하 임계값
  • 다운로드/스트리밍 동시 수 + 속도 제한(KB/s)
  • upgrade_server_load.sql — 기존 DB 업그레이드 SQL 제공
v5.1 2026년 4월 24일
PHP 7.4 ~ 8.3 완벽 호환

🔧 PHP 8 호환성 수정

  • PHP 8.0 전용 함수 제거 — str_starts_with() 직접 호출을 substr() 기반으로 교체 FIX
  • PHP 8.0 전용 타입 제거 — mixed 타입 힌트를 타입 미지정으로 변경 FIX
  • PHP 8.1 Deprecation 방어 — intval(null), htmlspecialchars(null), basename(null), pathinfo(null) 전달 방지 (총 8곳) FIX
  • Auth.php — intval(db→val() ?? 기본값) 패턴 3곳 수정 (로그인 실패 제한, 동시 세션, 세션 만료)
  • Security.php — htmlspecialchars() null 방어, mixed 타입 제거
  • FileManager.php — sanitizeName(), getFileIcon() null 방어

🛡️ PHP 8 함수 폴리필

  • bootstrap.php에 str_starts_with(), str_ends_with(), str_contains() 폴리필 추가 NEW
  • PHP 7.4 환경에서도 PHP 8 스타일 문자열 함수 사용 가능
  • PHP 8 이상에서는 네이티브 함수 우선 사용 (function_exists 체크)
  • PHP 7.4 / 8.0 / 8.1 / 8.2 / 8.3 모든 버전에서 동작 확인 COMPAT