[php] PHP를 통해 파일을 삭제하는 방법?

파일이 다른 디렉토리에있는 경우 PHP로 서버에서 파일을 어떻게 삭제합니까?

내 페이지 레이아웃은 다음과 같습니다.

  • projects/backend/removeProjectData.php (이 파일은 데이터베이스에 대한 모든 항목을 삭제하며 관련 파일도 삭제해야합니다)
  • public_files/22.pdf (파일이있는 장소)

나는 unlink기능을 사용하고 있습니다 :

unlink('../../public_files/' . $fileName);

그러나 이것은 항상 파일이 존재하지 않는다는 오류를줍니다. 어떤 아이디어?



답변

다음은 도움이 될 것입니다

  • realpath — 정규화 된 절대 경로 이름을 반환합니다.
  • is_writable — 파일 이름이 쓰기 가능한지 알려줍니다
  • unlink — 파일을 삭제합니다

realpath를 통해 파일 경로를 실행 한 다음 반환 된 경로가 쓰기 가능한지 확인하고 연결되어 있으면 연결을 해제하십시오.


답변

$files = [
    './first.jpg',
    './second.jpg',
    './third.jpg'
];

foreach ($files as $file) {
    if (file_exists($file)) {
        unlink($file);
    } else {
        // File not found.
    }
}


답변

파일에서 먼저 권한을 확인하여 a) 스크립트에서 볼 수 있고 b) 삭제할 수 있는지 확인하십시오.

현재 스크립트를 실행중인 디렉토리에서 계산 된 경로를 사용할 수도 있습니다. 예 :

unlink(dirname(__FILE__) . "/../../public_files/" . $filename);

(PHP 5.3에서는 __DIR__상수 대신 사용할 수 있다고 생각 dirname()하지만 아직 직접 사용하지는 않았습니다)


답변

사용하여 파일을 삭제할 수 있습니다

unlink($Your_file_path);

그러나 파일을 http 경로에서 삭제하면이 연결 해제가 제대로 작동하지 않습니다. 올바른 파일 경로를 제공해야합니다.


답변

AIO 솔루션은 모든 것을 처리합니다. 그것은 내 일이 아니지만 단지 나 자신을 개선했습니다. 즐겨!

/**
 * Unlink a file, which handles symlinks.
 * @see https://github.com/luyadev/luya/blob/master/core/helpers/FileHelper.php
 * @param string $filename The file path to the file to delete.
 * @return boolean Whether the file has been removed or not.
 */
function unlinkFile ( $filename ) {
    // try to force symlinks
    if ( is_link ($filename) ) {
        $sym = @readlink ($filename);
        if ( $sym ) {
            return is_writable ($filename) && @unlink ($filename);
        }
    }

    // try to use real path
    if ( realpath ($filename) && realpath ($filename) !== $filename ) {
        return is_writable ($filename) && @unlink (realpath ($filename));
    }

    // default unlink
    return is_writable ($filename) && @unlink ($filename);
}


답변

나는이 질문이 조금 오래되었다는 것을 알고 있지만 이것은 내가 작업중 인 프로젝트에서 이미지를 삭제하는 데 매우 효과적입니다.

unlink(dirname(__FILE__) . "/img/tasks/" . 'image.jpg');

dirname(__FILE__)섹션은 프로젝트의 기본 경로를 인쇄합니다. 는 /img/tasks/내 기본 경로에서이 개 폴더를 다운. 마지막으로, 삭제하고 싶은 이미지가 있습니다. 필요한 이미지를 만들 수 있습니다.

이것으로 서버의 파일을 가져 와서 삭제하는 데 아무런 문제가 없었습니다.


답변