2013-04-25 7 views
0

다음 PHP 함수 중 하나를 재귀 적으로 chmod 내 서버에 설치해야합니다.재귀 Chmod가 작동하지 않습니다. PHP

웬일인지 작동하지 않습니다. dir에있는 파일을 인쇄하는 빠른 스크립트로 테스트했을 때 dir의 경로가 정확하다는 것을 알고 있습니다.

$root_tmp = '/tmp/mixtape2'; 
chmod_r($root_tmp); 

function chmod_r($Path) { 
$dp = opendir($Path); 
while($File = readdir($dp)) { 
    if($File != "." AND $File != "..") { 
    if(is_dir($File)){ 
     chmod($File, 0777); 
     chmod_r($Path."/".$File); 
    }else{ 
     chmod($Path."/".$File, 0777); 
    } 
    } 
closedir($dp); 
} 

아이디어가 있으십니까?

+0

그냥 생각 ... 내가 서버의/tmp 디렉토리를 다루는 것이 중요합니까? 권한 문제인지 궁금합니다. 예를 들어, 터미널에 있다면'sudo'를해야합니까? 그렇다면 PHP 스크립트에서이 문제에 대해 어떻게 생각합니까? –

+0

좋아, 방금 확인한이 스크립트를 실행하는 파일의 소유자는 'nginx'이고 chmod를 시도하는 파일/폴더의 사용자는 '루트'입니다. 나는 어떻게 든 사용자를 변경해야 할 것 같니? 불행히도, 이것은 나에게 모두 새로운 것이므로 여기서부터 어디로 가야할지 모르겠다. –

답변

1
chmod($Path.'/'.$File, 0777); 

당신은

+0

빠른 답장을 보내 주셔서 감사합니다 ... 그래서, 현재 상대방에게 $ root_tmp의 dir을 전달합니다. 함수가 실행 중입니다. 이것을'$ root_tmp = '/ tmp/mixtape2'로 변경했으나 여전히 작동하지 않습니다. mixtape2 디렉토리 안에 하위 폴더가 있다는 것이 중요합니까? –

+0

'작동하지 않는다'는 것은 무엇을 의미합니까? 그것은 chmod 또는 뭔가 설정하지? 사용 var_dump (chmod (..)); 또한 문서에서 : "안전 모드가 활성화되면 PHP는 실행하려는 파일이나 디렉토리가 실행중인 스크립트와 동일한 UID (소유자)를 가지고 있는지 확인합니다. 또한 SUID를 설정할 수 없습니다. SGID와 스티키 비트. " –

+0

예, chmod가 설정되지 않았습니다. 'var_dump'에 추가하면 'bool (false) <경로/파일 이름>'이 표시됩니다. 내 원래 질문에 대한 내 의견대로 사용자 권한 문제 일 수 있습니다. –

0

귀하의 PHP 스크립트는 아마 대부분의 시스템에 자신의 사용자가 웹 서버에 의해 실행되는 chmod를하는 전체 경로를 넣어해야합니다. chmod()에 넣으려는 파일은 root가 소유하고 있으므로 chmod를 사용할 권한이 없습니다. 먼저 파일 시스템에 들어가서이 파일들을 올바른 사용자와 그룹에 할당해야합니다.

+0

답장을 보내 주셔서 감사합니다. .. 나는 방금 Google을 검색하고'chown' 기능을 발견했습니다. 필자는 표준'chown ($ root_tmp, 'nginx');를 시도해 보았습니다. 내 머리 속에서 앞서 언급 한 실행 파일의 것으로 변경해야합니다. 그러나 이것은 작동하지 않았습니다. 나는 또한'exec ('chown nginx/tmp/mixtape2');도 시도했으나 작동하지 않았다. 나는이 스크립트를 웹 서버 사용자로부터 실행하기 때문에 다시이 스크립트를 사용합니다. 여기에서 어디로 가야합니까? –

+0

실제로 서버에 로그인하고 파일 관리자를 사용하여 명령 줄을 사용하여이 파일을 변경해야합니다. "chown -R nginx : nginx FILENAME"트릭을해야합니다. – Borniet

+0

문제는 이것이 우리 사이트에서 특정 기능을 실행할 때마다 생성되는 파일이있는 tmp 디렉토리라는 것입니다. 커맨드 라인을 통해 실행하면 현재 존재하는 파일 만''chown됩니다 ... 생성 된 새로운 파일은 'root'에 의해 다시 생성됩니다. 그래서 내가 chown, chmod의 함수를 빌드하고 파일의 링크를 해제 할 때 PHP 솔루션을 찾고있었습니다. –

관련 문제