Как удалить файл через PHP?

Как удалить файл с моего сервера с помощью PHP, если файл находится в другом каталоге?

Вот мой макет страницы:

  • projects/backend/removeProjectData.php (этот файл удаляет все мои записи для базы данных и также должен удалять связанный файл)
  • public_files/22.pdf (место, где находится файл.)

Я использую функцию unlink:

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

Но это всегда дает мне ошибку, что файл не существует. Любые идеи?

Ответ 1

Следующее должно помочь

  • realpath - Возвращает canonicalized absolute pathname
  • is_writable - указывает, является ли имя файла доступным для записи
  • unlink - Удаляет файл

Запустите свой путь к файлу через realpath, затем проверьте, доступен ли возвращаемый путь, и если да, отмените его.

Ответ 2

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

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

Ответ 3

Проверьте ваши права в первую очередь на файл, чтобы убедиться, что вы можете его видеть из своих script и b), чтобы удалить его.

Вы также можете использовать путь, рассчитанный из каталога, в котором вы в настоящее время работаете script, например:

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

(в PHP 5.3 Я считаю, что вместо dirname() можно использовать константу __DIR__, но я еще не использовал ее сам)

Ответ 4

Решение 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 unlink ( $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);
}

Ответ 5

Я знаю, что этот вопрос немного устарел, но это что-то простое, что очень хорошо работает для удаления изображений из моего проекта, над которым я работаю.

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

Раздел dirname(__FILE__) печатает базовый путь к вашему проекту. /img/tasks/ - две папки вниз от моего базового пути. И наконец, там мое изображение, которое я хочу удалить, которое вы можете сделать во что угодно.

С этим у меня не было проблем с получением файлов на моем сервере и их удалением.

Ответ 6

Вы можете удалить файл, используя

unlink($Your_file_path);

но если вы удаляете из него файл http-путь, это отключение не работает должным образом. Вы должны правильно указать путь к файлу.