파일이 다른 디렉토리에있는 경우 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/
내 기본 경로에서이 개 폴더를 다운. 마지막으로, 삭제하고 싶은 이미지가 있습니다. 필요한 이미지를 만들 수 있습니다.
이것으로 서버의 파일을 가져 와서 삭제하는 데 아무런 문제가 없었습니다.