코딩게시판

첨부 미디어 처리 개선 보고서)PHP 7→8 전환 후 $view['link'] 존재 체크 미비로 Undefined index 오류 발생

작성자 정보

  • 최고관리자 작성
  • 192.♡.0.1 아이피
  • 작성일

컨텐츠 정보


  • 링크

  • 첨부


  • 본문

    전체 요약 — 첨부 미디어 처리 개선 보고서

    https://www.11q.kr/bbs/board.php?bo_table=cording2&wr_id=17
    제목: 그누보드_스킨보드)BS4-Basic-Webzine_11q _mp3_mp4_pdf_youtube_php82.7z

     

    ✅ 개요

    PHP 7.0 환경에서 작성된 G5 기반 게시판 첨부 미디어 처리 코드가
    PHP 8.2 환경에서 다음과 같은 문제를 일으켰음:

    • PHP 8.x에서 count(), isset(), pathinfo() 사용 방식 차이

    • 배열 존재 여부 / 타입 체크 누락

    • 일부 환경에서 브라우저 보안 정책(CORS, MIME) 또는 모바일 PDF 렌더링 실패

    • 자동 실행 및 토글 버튼의 JS 비동기 처리 문제

    • Deprecated: Optional parameter ... 관련 구문 경고

    이를 개선하여 유튜브, 일반 동영상, 오디오, PDF 첨부 파일을 자동 인식/표시 + 토글 버튼 제어 구조로 통합 및 안정화함.


     1️⃣ 유튜브 첨부 미디어 개선

    문제점

    • PHP 7→8 전환 후 $view['link'] 존재 체크 미비로 Undefined index 오류 발생

    • iframe embed 시 모바일 확대 오류

    • 브라우저별 autoplay 제한으로 인한 재생 실패

    개선 내용

    • isset($view['link']) && is_array($view['link']) 안전 체크 추가

    • iframe에 allowfullscreen, referrerpolicy="no-referrer" 옵션 추가

    • 클릭 시 열림/닫힘 구조(유튜브 보기 / 닫기) 추가

    • 모바일 반응형 width:100%; aspect-ratio:16/9; 적용

    ✅ 결과

    → PHP 8.2 호환, 모든 브라우저/모바일 반응형 자동 맞춤
    → 사용자 클릭 기반으로 안전한 재생


    2️⃣ 일반 동영상 첨부 개선 (mp4, webm 등)

    문제점

    • PHP 8.2에서 $file['source'] undefined 오류

    • video 태그의 autoplay 속성 제거 필요

    • Safari / iOS 호환성 문제

    개선 내용

    • pathinfo($file['source'], PATHINFO_EXTENSION) 전 안전체크 추가

    • 동영상 확장자 자동 필터링 (mp4, mov, avi, webm)

    • video 태그: controls preload="metadata"로 변경

    • “동영상 닫기 / 보기” 토글 버튼 추가

    ✅ 결과

    → PHP 8.2 호환, 모바일(iOS/Android) 재생 가능
    → 여러 첨부 시 자동 인덱스 부여로 충돌 방지


    3️⃣ MP3 오디오 첨부 개선

     문제점

    • 기존에는 오디오 여러 개 첨부 시 ID 충돌

    • 일부 브라우저에서 autoplay 블록

    • PHP 8.2에서 pathinfo undefined 경고

    개선 내용

    • $mp3Index로 고유 btnId, containerId 생성

    • “MP3 닫기 / 듣기 (파일명)” 토글 버튼 구조

    • audio controls preload="none" 적용 (페이지 로드시 자동 로딩 방지)

    • 다운로드 링크 추가

    • PHP 8.2 안전체크 (isset, is_array) 추가

    ✅ 결과

    → 다중 오디오 첨부도 독립 제어
    → PHP 8.2 완전 호환
    → 모바일/데스크탑 자동 인식


    4️⃣ PDF 첨부 보기 개선

    문제점

    • PHP 8.2에서 file_get_contents() base64 처리 중 경로 누락 오류

    • 모바일 PDF.js / PC PDFObject 구분 미비

    • base64 렌더링 실패 시 흰 화면 발생

    • 버튼 토글 시 중복 로딩 발생

    개선 내용

    • $pdfIndex로 개별 컨테이너 구분

    • file_exists() 체크 후 base64 인코딩

    • 모바일: pdf.js base64 기반 canvas 렌더링

    • PC: PDFObject.embed() 통한 빠른 표시

    • “PDF 닫기 / 바로보기 (파일명)” 토글 버튼 구현

    • try-catch 오류 메시지 처리

    ✅ 결과

    → 모바일/PC 완전 자동 대응
    → PHP 8.2 호환 및 중복 로딩 없음
    → PDF.js 최신 버전(2.10.377) 사용으로 안정성 확보


    ⚙️ 공통 개선 사항

    구분 개선 전 문제 개선 후 변경 내용
    PHP 버전 호환성 PHP 7 문법 의존 (isset, pathinfo, count) isset() + is_array() + strtolower() 안정 처리
    다중 첨부 동일한 ID 중복 $index 기반 고유 ID 생성
    UI 동작 자동 실행으로 불필요한 트래픽 클릭 시 토글 구조로 변경
    JS 구조 전역 변수 충돌 가능 즉시실행함수 (function(){ ... })() 로 스코프 분리
    사용자 경험 무조건 펼침 / 느린 로딩 초기 “펼침 상태” 유지, 클릭 시 닫기 기능 추가
    접근성 버튼명 불명확 “MP3 닫기(파일명)” / “PDF 바로보기(파일명)” 명확 표시

    PHP 8.2 호환 포인트 요약

    변경 사항 대응 방법
    pathinfo() undefined index 발생 isset($file['source']) 체크
    file_get_contents() 경로 에러 file_exists() 조건 추가
    count(null) 경고 is_array() 조건으로 감싸기
    Deprecated: Optional parameter 불필요한 기본값 파라미터 제거
    HTML 출력 시 Warning echo htmlspecialchars() 또는 안전한 echo 구조 적용

    결론

    ✅ 결과:
    모든 첨부 미디어(Youtube, MP4, MP3, PDF)가

    • PHP 8.2 완전 호환

    • PC/모바일 자동 대응

    • 독립 토글 구조로 중복/충돌 제거

    • 즉시 로딩 성능 개선

    • 사용자 친화적 인터페이스로 일관된 디자인 유지

    ???? 적용 시점:
    각 첨부 모듈은 독립적으로 유지보수 가능하며,
    view.skin.php 또는 view.file.php 내에 통합 구성 시
    향후 PHP 8.3/9.0에서도 문제 없이 확장 가능 구조.


    원하신다면 이 4개 모듈(유튜브, 동영상, MP3, PDF)을 하나의
    통합 미디어 렌더러 PHP 모듈 (예: view_media_block.php) 형태로
    자동 인식 구조로 묶어드릴 수도 있습니다.
    그렇게 정리해드릴까요?

     
    나의 말:
    예
     
    ChatGPT의 말:

    좋습니다 ????
    그럼 지금까지 개선된 4개 모듈(???? 유튜브 / ???? 동영상 / ???? MP3 / ???? PDF)을 하나로 통합한
    “view_media_block.php” 완전 호환 버전(PHP 8.2 대응, PC / 모바일 자동 구분)으로 정리드리겠습니다.


    ✅ 통합 미디어 렌더러 — view_media_block.php

    이 모듈은 $view['file']과 $view['link']를 자동 스캔하여
    파일 확장자나 링크 유형을 판별한 뒤,
    자동으로 적절한 플레이어(YouTube / Video / Audio / PDF)를 표시합니다.

     

    수정 정상화 php 8.2 입니다

    aab70-690c17fd9dea2-ade0c9b3cc2a4ccfe57600c258783bf5d9356f03.png

    첨부 파일을 스킨보드에 구성 PDF보기( W:\g5\skin\board\BS4-Basic-Webzine_11q_pdf_php82\view.skin.php + view_pdf.php구성)



    관련자료

    댓글 0
    등록된 댓글이 없습니다.

    최근글


    새댓글