막무가내 삽질 블로그
PHP에서 디렉토리 생성시 문제점 해결 본문
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로 생성해도 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
'PHP' 카테고리의 다른 글
php git ignore 특정 파일 또는 폴더 제외 (0) | 2020.02.04 |
---|---|
PHP 디렉토리 안에 파일 가져오는 방법 (0) | 2019.12.24 |
php 이미지 업로드 (0) | 2019.07.22 |
Comments