2013-02-21 10 views
4

PHP unlink()를 사용하여 우분투에서 파일을 삭제하는 것에 대해 좌절감을 느낍니다.unlink 파일을 삭제할 수 없습니다

  1. 은 766 허가라는 이름의 폴더 "파일"아래의/var/www가를 만듭니다

    나는 다음과 같은 매우 간단한 시뮬레이션을 만들었습니다.
  2. , 해당 폴더 &에서 "의 image.png는"delete.php라는 이름의 PHP 파일을 만들 수 666
  3. 에 권한을 설정한다고 가정 해 봅시다 파일을 업로드 (644)에 권한을 설정하고는/var/www 디렉토리에 업로드
  4. : 브라우저에서 파일 (I localhost를 사용)이

은 "image.png를은"아직 "파일"에 존재하는 디렉토리 여기

전화

  • 것은 delete.php의 PHP 스크립트입니다

    은 또한 다음 스크립트 시도 :

    $filename = 'image.png'; 
    $dir = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'files'; 
    chdir($dir); 
    unlink($filename); 
    

    을하지만 여전히 파일을 삭제할 수 없습니다.

  • +5

    image.png를 만든 사용자가 www-data와 동일한 사용자입니까? (또는 누가 아파치를 실행합니까?) –

    답변

    2

    디렉토리의 폴더/소유자는 php를 실행하는 데 사용되는 사용자와 다른 사용자 일 수 있습니다.

    사용자 php가 할당 된 폴더를 만들어야합니다. 그렇게 할 수 없다면 ISP에 문의하십시오. 이것이 내가 비슷한 문제를 해결 한 방법이다.

    한 사용자는 유닉스 시스템에서 다른 사용자의 파일을 삭제할 수 없습니다. 777로 설정하면 삭제할 수 있습니다.

    +1

    시스템에 SSH 할 수 있다면'll' 명령을 실행하여 해당 시스템의 소유권을 볼 수 있습니다. 삭제하려는 파일과 삭제할 파일을 선택하십시오. 일반적으로 PHP 스크립트는 ftp 사용자가 소유하고 루트 사용자가 업로드 한 파일입니다. 하나의 사용자 그룹 안에 둘 다 가져 오는 것이 도움이 될 것입니다. – Khuram

    +0

    소유권을 www-data로 변경하면 파일을 삭제할 수 있습니다. 모든 도움에 감사드립니다. – user1134475

    5

    Unlink은 실패시 경고 메시지를 표시합니다. E_WARNING이 보이는지 확인하여 진행 상황을 확인하십시오.

    일반적으로 사용자 권한으로 귀결됩니다. 스크립트가 브라우저에 의해 실행되는 경우 대개 사용자 이름이 wwwrun 또는 wwwdata (또는 이와 비슷한 사용자)이 서버에서 실행됩니다.

    이 사용자에게 삭제할 권한이 있는지 확인한 다음 다시 시도하십시오.

    관련 문제