PHP 파일 권한… "쓰기"를 받는가?
-
19-09-2019 - |
문제
작업중인 시스템에 대한 설치 스크립트를 작성하려고합니다. 스크립트는 한 위치에서 다른 위치로 일부 기본 파일을 복사하고 다양한 폴더를 만듭니다. 이 비트가 치료를 받고 있지만 유일한 문제는 FTP를 통해 로그인 할 때 편집 할 수 없거나 PHP가 이동 한 파일을 삭제할 수 없다는 것입니다.
터미널을 통해 로그인하면 행복하게 "sudo chmod -r 777 [dir]가 사라질 수 있습니다. 문제는 다음과 같습니다.
PHP 끝에서 무엇이 빠졌습니까?
내 권한 기능은 다음과 같습니다.
function set_permissions($file)
{
if (file_exists($file)):
chmod($file,0777);
endif;
}
권한을 777로 설정하는 것이 100% 이상적이지 않다는 것을 이해하지만 PHP가 나를 위해 이동 한 후 FTP를 통해 파일을 편집 할 수있는 결과를 얻으려고 노력하고 있습니다.
내가 충분히 분명해지기를 바랍니다. 이것은 지금 나를 당황하게하고 있으므로 어떤 도움을 주셔서 감사합니다 :)
톰
편집하다: 전체 프로세스는 다음과 같습니다.
mkdir($root_dir, 0777);
mkdir($images_dir, 0777);
if (!copy($orig_logo, $new_logo))
{
echo "failed to copy $orig_logo...";
}
// see function above for details on set_permissions...
$this->set_permissions($new_logo);
}
(모든 경로도 정확합니다)
편집하다: 터미널을 통해 로그인하기 전에 파일에는 다음과 같은 권한이 있습니다.
-rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01:45 base.css
로그인하고 변경 한 후 파일이 있습니다.
-rwxrwxrwx 1 www-data www-data 2739 2009-08-26 01:45 base.css
이 시스템은 관리 영역을 통해 파일을 편집하고 삭제할 수있는 컨텐츠 관리 시스템이며 이상하게도 충분히 작동합니다. 파일이 어떻게 든 다른 사람에게서 잠겨있는 것 같습니다. 아파치...하지만 파일 정보는 그렇지 않다고 제안합니다. 이상해 ...
해결책
디렉토리에도 쓰기 권한이 필요한 것 같습니다.
다른 팁
파일이 존재합니까 아니면 경로가 정확합니까?
가능하다면 chmod -R 777
그러면 터미널을 통해 문제를 해결합니다 실행하기 전에 PHP가 설정 한 권한은 무엇입니까? chmod
??? 분명히 777이 아닙니다. 내 추측은 PHP 코드가 실제로 권한을 변경하지 않는다는 것입니다.
코드를보고 파일이 존재하지 않으면 허가 변경 기능이 조용히 실패 할 수 있습니다. 예 : 유효하지 않은 파일 이름 (잘못된 폴더? 잘못된 상대 경로?)을 제공하지만 말할 수 없기 때문에 알 수 없습니다. set_permissions()
기능이 너무 무서워서 경고합니다. 다음과 같이 다시 작성해야합니다.
function set_permissions($file)
{
if (!file_exists($file))
throw new Exception(__FUNCTION__ . "() file doesn't exist! '$file'");
chmod($file,0777);
error_log("chmod 777 $file"); // debug
}
이를 통해 무슨 일이 일어나고 있는지 확인할 수 있으며 파일 이름이 올바른 경우 확실히 알 수 있습니다.