itsource

PHP가 777 권한을 가진 디렉토리를 만들 수 없는 이유는 무엇입니까?

mycopycode 2022. 12. 24. 17:24
반응형

PHP가 777 권한을 가진 디렉토리를 만들 수 없는 이유는 무엇입니까?

다음 명령으로 PHP를 사용하여 서버에 디렉토리를 작성하려고 합니다.

mkdir("test", 0777);

그러나 다음과 같은 권한만 부여합니다.

rwxr-xr-x

모드는 현재에 따라 변경됩니다.umask,어느 것이022이 경우는,

그 방법umaskworks는 뺄셈입니다.다음에 대해 부여된 초기 허가를 받습니다.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

반응형