막무가내 삽질 블로그

PHP에서 디렉토리 생성시 문제점 해결 본문

PHP

PHP에서 디렉토리 생성시 문제점 해결

joong~ 2019. 12. 18. 15:25
728x90

클라이언트에서 값이 들어오면 해당값으로 디렉토리를 생성해주고 디렉토리 안에 이미지를 넣는 구조였다.

디렉토리를 생성할때 755로 생성을 하였다.

  if (!is_dir($dir)) {
    echo "없으니 생성하자";
    mkdir($dir, 0755, true);
     if (move_uploaded_file($_FILES["upload"]["tmp_name"], $target_mkdir)) {
       echo "생성 후 이동완료";
     }
  } else {
    echo "폴더 있다";
     if (move_uploaded_file($_FILES["upload"]["tmp_name"], $target_mkdir)) {
       echo "있는 폴더로 이동완료";
     }
  }

 

 

생성 후 문제가 안될줄 알았는데 php에서 디렉토리를 생성하게 되면 서버계정의 소유주가 아니라 apache가 소유주가 되어서 www-data가 되는 걸 발견했다. 원격접속 후 해당 디렉토리를 삭제도 안되었다.(sudo는 가능) 내가 손쉽게 수정삭제를 할 수 있게 777로 바꿔서 해보았다.

  if (!is_dir($dir)) {
    echo "없으니 생성하자";
    mkdir($dir, 0777, true);
     if (move_uploaded_file($_FILES["upload"]["tmp_name"], $target_mkdir)) {
       echo "생성 후 이동완료";
     }
  } else {
    echo "폴더 있다";
     if (move_uploaded_file($_FILES["upload"]["tmp_name"], $target_mkdir)) {
       echo "있는 폴더로 이동완료";
     }
  }

777로 생성

777로 생성해도 755가 되는걸 발견했다. 원인을 찾던 도중 umask라는 걸 발견했다.

 

umask란?

권한을 설정할 때 수동적으로 권한을 주지 않고 파일이나 디렉토리가 생성됨가 동시에 지정된 권한이 주어주도록 함

 

리눅스 umask 설정값이 0022로 잡혀 있어서 0777로 디렉토리를 생성해도 0755값으로 나온 것이다.

이를 해결하기 위해 umask값의 옵션을 변경해서 생성하니 해결 되었다.

 

$oldumask = umask(0);


  if (!is_dir($dir)) {
    echo "없으니 생성하자";
    mkdir($dir, 0777, true);
     if (move_uploaded_file($_FILES["upload"]["tmp_name"], $target_mkdir)) {
       echo "생성 후 이동완료";
     }
     umask($oldumask);
  } else {
    echo "폴더 있다";
     if (move_uploaded_file($_FILES["upload"]["tmp_name"], $target_mkdir)) {
       echo "있는 폴더로 이동완료";
     }
  }

참:https://dus815.tistory.com/entry/PHP-mkdir-%EA%B6%8C%ED%95%9C-%EB%AC%B8%EC%A0%9Cumask

참:https://webdir.tistory.com/231

'PHP' 카테고리의 다른 글

php git ignore 특정 파일 또는 폴더 제외  (0) 2020.02.04
PHP 디렉토리 안에 파일 가져오는 방법  (0) 2019.12.24
php 이미지 업로드  (0) 2019.07.22
Comments