>백엔드 개발 >PHP 튜토리얼 >쓰기 권한이 없는 PHP mkdir() 문제에 대한 솔루션

쓰기 권한이 없는 PHP mkdir() 문제에 대한 솔루션

高洛峰
高洛峰원래의
2016-12-21 15:18:381457검색

mkdir을 사용하여 폴더를 생성할 때 이 함수에 두 개의 매개변수가 있다는 것을 발견했습니다. 두 번째 매개변수는 새로 생성된 폴더에 대한 권한을 지정합니다.

그런데 mkdir('file address', 0777); 을 직접 사용해보면 새 폴더의 권한이 777이 아닌 보통 022인 것을 알 수 있습니다.

mkdir은 폴더에 대한 권한을 설정할 때 현재 운영 체제에 로그인한 사용자의 umask(사용자 기본 권한 속성) 값과 비트 AND를 수행하여 그 결과 값이 최종 권한 값이 되기 때문입니다. .

umask란 무엇인가요?

우리가 생성한 파일에 대한 기본 권한을 어떻게 얻나요? 이 기본 권한을 변경하는 방법은 무엇입니까?

시스템에 로그인하여 파일을 생성하면 항상 기본 권한이 있습니다. 그렇다면 이 권한은 어디서 오는 걸까요? 이것이 umask가 하는 일입니다.

umask는 사용자가 생성한 파일에 대한 기본 권한을 설정합니다. chmod와 반대 효과가 있습니다. umask는 "보완 코드" 권한을 설정하고 chmod는 파일 권한 코드를 설정합니다. 일반적으로 umask 값은 /etc/profile, $HOME/.bash_profile 또는 $HOME/.profile에 설정됩니다.

umask 값을 어떻게 계산하나요?

umask 명령을 사용하면 파일을 생성할 때 기본 모드를 설정할 수 있습니다. umask 값에는 각 사용자 유형(파일 소유자, 동일한 그룹의 사용자, 기타 사용자)에 해당하는 숫자가 있습니다. 파일의 경우 이 숫자의 최대값은 6입니다. 시스템에서는 텍스트 파일을 생성할 때 텍스트 파일에 실행 권한을 부여하는 것을 허용하지 않습니다. 생성 후 이 권한을 높이려면 chmod 명령을 사용해야 합니다. 디렉터리에서는 실행 권한을 설정할 수 있으므로 디렉터리의 경우 umask의 최대 개수는 7개까지 가능합니다.

이 명령의 일반적인 형식은 umask nnn입니다. 여기서 nnn은 000 - 777일 수 있습니다.

umask는 권한에서 해당 비트를 "제거"한다는 점만 기억하면 됩니다.

예: umask 값이 022인 경우 기본 디렉터리 권한은 755이고 기본 파일 권한은 644입니다.
따라서 사용자 umask가 022(보통 이것이 기본값)인 경우, 즉 000 010 010은 mkdir에서 지정한 777, 즉 111 111 111과 같습니다. "AND" 다음에 실제 권한을 얻습니다. 022입니다.

새 폴더의 권한을 최대화하려면 두 가지 방법이 있습니다. (물론 현재 사용자가 가장 높은 권한을 부여할 수 있다는 조건 하에서)

1 .사용자 umask, php 수정 umask 함수가 제공됩니다:

$oldumask=umask(0); 
mkdir('test',0777); 
umask($oldumask);

이 방법은 스크립트의 시작 파일에 umask 값을 지정한 다음 직접 mkdir을 사용합니다. 권한 제어 다음 사항에 유의해야 합니다. 다중 스레드 서버에서 umask 기능을 사용할 때 여러 스레드가 umask를 공유하므로 혼란이 발생할 수 있습니다.

2. 가장 일반적으로 사용되는 방법이기도 한 chmod 함수를 사용합니다.

mkdir('文件地址', 0777); 
chmod('文件地址', 0777);

마지막으로 권한 값은 다음으로 시작하는 8진수로 가장 잘 표현됩니다. "0"이어야 하며 따옴표를 넣지 마십시오.

쓰기 권한 없이 PHP mkdir() 문제를 해결하는 방법에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트에 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.