PHP가 777 권한을 가진 디렉토리를 만들 수 없는 이유는 무엇입니까?
다음 명령으로 PHP를 사용하여 서버에 디렉토리를 작성하려고 합니다.
mkdir("test", 0777);
그러나 다음과 같은 권한만 부여합니다.
rwxr-xr-x
모드는 현재에 따라 변경됩니다.umask
,어느 것이022
이 경우는,
그 방법umask
works는 뺄셈입니다.다음에 대해 부여된 초기 허가를 받습니다.mkdir
뺄셈을 하다umask
실제 권한을 얻으려면:
0777
- 0022
======
0755 = rwxr-xr-x.
이 일이 일어나지 않도록 하려면 , 다음의 설정을 실시할 필요가 있습니다.umask
일시적으로 0이 되기 때문에 효과가 없습니다.이것은, 다음의 스니펫을 사용해 실시할 수 있습니다.
$oldmask = umask(0);
mkdir("test", 0777);
umask($oldmask);
첫 번째 줄에 따라umask
(앞의 것을) 저장하면서 0으로 하다$oldmask
. 두 번째 행은 디렉토리가 원하는 권한을 사용하여 (지금은 관련이 없음)umask
. 세 번째 행이 복원됩니다.umask
원래대로 되돌리려고 했어요.
자세한 내용은 PHP doco에서 umask 및 mkdir를 참조하십시오.
파일 및 디렉토리의 작성은 umask 설정의 영향을 받습니다.다음과 같이 umask를 조작하여 특정 권한 세트를 가진 파일을 만들 수 있습니다.-
$old = umask(0);
mkdir("test", 0777);
umask($old);
멀티스레드 웹 서버에서는 이 기능을 사용하지 마십시오.파일 작성 후 파일 권한을 chmod()로 변경하는 것이 좋습니다.
예:
$dir = "test";
$permit = 0777;
mkdir($dir);
chmod($dir, $permit);
노력하신 분들을 위해
mkdir('path', 777);
효과가 없었습니다.
이는 파일 모드 앞에0이 붙어 있는 것이 매우 중요하기 때문에 chmod에게 전달된 번호를 10진수가 아닌 8진수로 해석하도록 지시합니다.
추신. 이 문제는 해결 방법이 아니라 승인된 anwser에 대한 추가 기능일 뿐입니다.
아마도 umask는 다음 항목을 제외하도록 설정되어 있을 것입니다.
제 경우 centos7은 다음과 같은 방법으로 문제를 해결했습니다.
$oldmask = umask(000);//it will set the new umask and returns the old one
mkdir("test", 0777);
umask($oldmask);//reset the old umask
상세한 것에 대하여는, https://www.php.net/manual/en/function.umask.php 를 참조해 주세요.
언급URL : https://stackoverflow.com/questions/3997641/why-cant-php-create-a-directory-with-777-permissions
'itsource' 카테고리의 다른 글
React JS -JS와 .JSX의 비교 (0) | 2022.12.24 |
---|---|
Mysql 1050 오류 "테이블은 이미 존재합니다" 실제로는 존재하지 않습니다. (0) | 2022.12.24 |
함수가 정의되어 있는 장소를 확인하는 방법 (0) | 2022.12.04 |
PHP 메모리 프로파일링 (0) | 2022.12.04 |
node.js에 사용할 수 있는 MySQL 드라이버는 무엇입니까? (0) | 2022.12.04 |