Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как удалить запись в БД если нет файла в upload?

Как удалить запись в БД если нет файла в upload?


     28.06.2017    upload, MySQL, удаление    Общие вопросы по PHP, MySQL    1253

вопрос
Не могу нигде найти ответ на интересующий вопрос, точнее находил но где не могу вспомнить.
Суть в том,что есть папка upload куда грузятся файлы(изображения или аудио без разницы суть одна). Запись о файлах делается в БД. Был момент когда файлов становилось много и приходилось перекидывать на поддомен (к примеру audio.site.com). Потом некоторые файлы приходилось удалять через фтп, но записи о них остались в БД. Интересует вопрос как составить запрос правильно,чтобы удалить записи в БД, если файла нет в папке upload?
Решение которые я находил (запомнилось только одна правильная мысль в тексте) осуществить проверку по ссылке в БД и если код 404 будет выдаваться удалить запись,если 200 - искать дальше. Чтобы понимать структуру БД и расположение файлов - CMS похожа на DLE 9.8. В принципе не было бы проблем, если бы файлы лежали на основном сайте, но файлы лежат и на site.com и на audio.site.com . Записи(БД) в строке url имеют вид http://audio.site.com/upload.... ; http://site.com/upload... ; /upload/.... - т.е. три вида ссылок.Что затрудняет сделать проверку чисто по ссылке так как первые две могут выдать как код 200(если файл есть) так и код 404(если файла нет) - это норм, а вот третья ссылка будет выдать только код 404 так как ему надо прописать http://site.com . Я думаю данный код помог бы многим, так как часто такие проблемы встречаются и на DLE.

Ответил: Definder


Проверьте файлы на существование с этим кодом

if (@fopen($url_audio, "r")) {
echo "good! files found";
} else {
echo "files not found :(";
}

3 комментария

estverum
Юзер

estverum - 28 июня 2017 12:10 -

P.S. Прописал код
<?php
$ip='localhost';
$user='root';
$password='root';
$namedb='test';

if ($connect=mysql_connect($ip,$user,$password)) {
if (mysql_select_db($namedb,$connect)) {
	mysql_query('SET NAMES utf8;',$connect);
	
	$query=mysql_query("select * from table_audio");
	//Начинаем проверку всех файлов
	while ($array=mysql_fetch_array($query)) {
		//Путь к файлу
		$url= __DIR__.$array['url'];
		//Проверка на существование файла
		if (!file_exists ($url)) {
			//Если нашли не первый не существующий фаил
			if (isset($id_del)) {
				$id_del.=','.$array['aid'];
			} else {
				$id_del=$array['aid'];
			}
		}
	}
	//Если нашли не существующие файлы
	if (isset($id_del)) {
		if (mysql_query("delete from table_audio where aid in (".$id_del.")")) {
			echo "Все гуд удалилось";
		} else {
			echo "Ошибка при удалении";
		}
	} else {
		echo "Нет записей для удаления";
	}
} else {
	echo "Несмогли войти в базу данных";
}
} else {
	echo "Несмогли подключиться к mysql серверу";
}
?>


Работает отлично...но только если в таблице БД имеется ссылка вида /upload/ ....если в url таблицы БД ссылки имеют ввид http;//site.com или http://audio.site.com - он их удаляет.
Сейчас проверил БД, есть ссылки также с стороних ресурсов

vitnet
PHP-developer

vitnet - 1 июля 2017 10:39 -

Значит ищите альтернативу функции file_exists с проверкой на удаленном сервере.

estverum
Юзер

estverum - 4 июля 2017 13:15 -

vitnet,альтернатива есть....но проблема в том,что я не знаю как поставить условие для проверки нескольких доменов....так как я уже писал,что есть ссылки вида site.com; audio.site.com и просто ссылка на папку /uploads/

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

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

наверх