Задать вопрос
@game802

Каким образом реализовать удаление записи из БД?

Добрый день уважаемые знатоки!
На сервере имеется куча файлов, которые хранятся в одной папке. Все названия файлов, находящиеся в этой папке перетаскиваются в БД.
Как сделать так, чтобы при удалении файла на сервере, удалялась запись из БД?
Спасибо!
  • Вопрос задан
  • 312 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 3
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
Порядок действий такой:
1. Берём inotify
2. Ставим на мониторинг нужную папку
3. При наступлении события "файл N удалён" запускаем скрипт, который будет удалять соотв. запись из БД
4. Enjoy!
Ответ написан
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Написать функцию / метод для удаления всего одним махом, что-то типа этого:
function delete_file( $filename ) {

    // Удаляем файл
    $deleted = unlink ( '/path/to/your/files/dir/' . $filename );

    // Удаляем запись в БД если файл был успешно удален
    if ( $deleted ) {
        $sql = "DELETE from my_table WHERE filename=`$filename`";
        // тут выполняете запрос в БД тем путем, которым вы это делаете
        // результат запроса тоже можно в переменную и потом проверить, если удаление ок - вывести сообщение (если это надо)
    }

}
Ответ написан
@game802 Автор вопроса
Реализовал след. образом:
PHP:
// mysql files array
$file_bd_items = array();
$bd_files_name = mysqli_query($connect, "SELECT * FROM files");
while($row = mysqli_fetch_array($bd_files_name)) {
	$file_bd_items[] = $row['filename'];
}

// server files array
$file_server_items = array();
foreach (scandir(ATTACHMENT_DIRECTORY) as $filename) {
	$filepath = ATTACHMENT_DIRECTORY.$filename;

	if (!is_file($filepath)) {
		continue;
	}

	$file_server_items[] = $filename;
}

$result = array_values(array_diff($file_bd_items, $file_server_items));
$result_lenght = count($result);

for ($i = 0; $i < $result_lenght; $i++) {
	$result_string_filename = $result[$i];
	$bd_files_name = mysqli_query($connect, "DELETE FROM files WHERE filename in ('".$result_string_filename."');");
}

Cron:
find ~/sitename.ru/public_html/mailfile -type f -mtime +15 -print0 | xargs -0 rm -f
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы