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

0

Я пытаюсь удалить данный файл из каталога с помощью PHP. Вот код, который я пробовал:

// Get the file name
$id = '61514';

// Get the folder path
$uploads_folder_dir = 'some/dir';

// Check if the directory exists
if ( ! file_exists( $uploads_folder_dir ) )
    return false;

// Open the directory
if ( $dir = opendir( $uploads_folder_dir ) ) {

    // Loop through each file in the directory
    while ( false !== ( $file = readdir( $dir ) ) ) {

        // Target the file to be deleted and delete. All files in folder are .png
        if ( $file == ( $id . '.png' ) )
            @unlink( $uploads_folder_dir . '/' . $file );
    }
}
// Housekeeping
closedir( $dir );
@rmdir( $uploads_folder_dir );

Каждый раз, когда я запускаю код, конкретный файл, который я пытаюсь удалить, не удаляется.

Я предполагаю, что когда я перебираю каталог, моя логика, чтобы найти файл, не работает. Я могу подтвердить, что файл 61514.png определенно находится в каталоге some/dir

Надеюсь, кто-то может определить, где я здесь ошибся?

  • 0
    Можете ли вы сделать error_log вместо @unlink, чтобы увидеть, правильно ли указан путь к файлу, возможно, ваш скрипт находится в папке выше или ниже, где находится изображение
  • 2
    Вы пробовали помещать различные отладочные сообщения по всему коду, чтобы увидеть, не попали ли какие-либо разделы? Также попробуйте удалить @ из infront unlink, чтобы увидеть любые ошибки, которые выдает. Возможно, у PHP нет прав на удаление файла.
Показать ещё 3 комментария
Теги:

3 ответа

0
Лучший ответ

Сначала отладка вашего пути к файлу в порядке или не просто путем печати всего пути к файлу, например

// Target the file to be deleted and delete. All files in folder are .png
        if ( $file == ( $id . '.png' ) ){
             echo $uploads_folder_dir . '/' . $file; die;
             @unlink( $uploads_folder_dir . '/' . $file );
        }
    }
  • 0
    Мой путь действительно был проблемой. Отладка, которая помогла. Спасибо!
0

Почему вы просматриваете файлы? Это было бы намного проще:

// Get the file name
$id = '61514';
// Get the folder path
$uploads_folder_dir = 'some/dir';
// Check if the directory exists
if ( ! file_exists( $uploads_folder_dir ) )
    return false;

unlink("$uploads_folder_dir/$id.png");

// Housekeeping
@rmdir( $uploads_folder_dir );
  • 0
    Я также думаю, что он должен использовать unlink и проверять разрешения.
  • 0
    Хорошая точка зрения. Я удалил цикл while, поскольку ты прав, в этом не было необходимости
0

@unlink → используйте unlink, и если вы не видите проблему с разрешением отказа, файл и "dir" должны быть удалены.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню