개인적 엑셀파일만 업로드 하는데 잘안되네요

개인적 엑셀파일만 업로드 하는데 잘안되네요

QA

개인적 엑셀파일만 업로드 하는데 잘안되네요

본문

안녕하세요 여러분~! 더우신데 수고들 많으 십니다. 이번 비피해 많이 없으신지요.. 

질문거리 들고 왔네요==;;

요점은 이렇습니다. 개인적으로 엑셀파일을 데이타 처리하는데는 성공했습니다.

파일자체를 특정한 저장공간에 두고 사용을 하고자 업그레이드 하고자 하는데 잘안되네요 ..

한번 자세히 좀 봐주세요 형식상은 분명 맞는것 같은데;;;;무족건 접근만 하면 서버오류가 괴롭해요;; ;;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 폼에서 업로드한 파일을 저장할 디렉토리 경로
    $uploadDir = G5_ADMIN_PATH . '/admin_myhome/';
    $uploadedFile = $uploadDir . basename($_FILES['file']['name']);
    $uploadOk = true;

    // 파일 유형 확인 (.xlsx 확장자인지 확인)
    $fileType = strtolower(pathinfo($uploadedFile, PATHINFO_EXTENSION));
    if ($fileType != 'xlsx') {
        echo "올바른 파일 형식이 아닙니다. .xlsx 파일을 선택해주세요.";
        $uploadOk = false;
    }

    // 파일 업로드가 성공적인지 확인
    if ($uploadOk && !move_uploaded_file($_FILES['file']['tmp_name'], $uploadedFile)) {
        echo "파일 업로드 실패";
        $uploadOk = false;
    }

 

딱 요부분인데 요부분만 접근을 하면 바로 서버오류 로 나와버리는데.. 아무리 디버그해서 못찾겠고..특정한 오류도나오지도않고 ..그래요;;; 혹시 그누에 맞지않는 보안이 있나싶기도하고..;; 암튼 ...몰르겠음요 ㅋㅋ

또한 다른업로드 처리 방식이 있다면 추천도 괸찮습니다.;; 

이 질문에 댓글 쓰기 :

답변 2

다음은 기본적인 동작확인을 위한 테스트 코드입니다.

문제 해결에 도움이 될지 모르겠습니다.


<?php
define('G5_ADMIN_PATH', __DIR__);
 
// if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (empty($_FILES['file']) == false) {
    // 폼에서 업로드한 파일을 저장할 디렉토리 경로
    $uploadDir = G5_ADMIN_PATH . '/admin_myhome/';
    $uploadedFile = $uploadDir . basename($_FILES['file']['name']);
    $uploadOk = true;
 
    // 업로드 디렉토리 없는 경우 생성
    if (is_dir($uploadDir) == false) {
        mkdir($uploadDir);
    }
 
    // 파일 유형 확인 (.xlsx 확장자인지 확인)
    $fileType = strtolower(pathinfo($uploadedFile, PATHINFO_EXTENSION));
    if ($fileType != 'xlsx') {
        echo "올바른 파일 형식이 아닙니다. .xlsx 파일을 선택해주세요.";
        $uploadOk = false;
    }
 
    // 파일 업로드가 성공적인지 확인
    if ($uploadOk && !move_uploaded_file($_FILES['file']['tmp_name'], $uploadedFile)) {
        echo "파일 업로드 실패";
        $uploadOk = false;
    }
}
?>
<form method="post" enctype="multipart/form-data">
<input type="file" name="file" accept=".xls,.xlsx" />
<input type="submit" />
</form>

그런데 여기서 궁금 한게 있는데요;;;
왜 $_SERVER['REQUEST_METHOD'] === 'POST' 이 부분은HTTP로 파일 업로드를 처리하는 로직이 POST 요청일 때만 실행되도록 하는 것인데 이게 왜 않되는거죠?

안되지 않습니다.

포스트 방식으로 요청시 실행은 되지만
코드의 내용이 업로드 파일의 처리를 담고 있었기 때문에
조건문의 체크를 용도에 맞게 변경한것 뿐입니다.

조건이 $_SERVER['REQUEST_METHOD'] === 'POST' 인 경우
클라이언트로부터 업로드된 파일이 없이 POST 방식 요청이 발생하면
서버에서는 업로드 처리부가 동작할텐데

없는 파일을 체크하려고 시도하면서 Undefined Index 같은 메세지를 볼수 있고
코드의 밸리데이션이 잘못되거나 느슨한 경우 의도하지 않았던 심각한 오류가 사이드 이펙트처럼 터질수 있습니다.

소스상으로는 크게 문제는 없어 보입니다.

G5_ADMIN_PATH . '/admin_myhome/'

이 경로에 쓰기 권한은 있으신건가요?

답변을 작성하시기 전에 로그인 해주세요.
전체 16,822
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT