|
|
|
| Доброго всем времни суток! Данный скрипт сопоставляет названия файлов с теми что в бд. если названия файла в бд нет, файл удаляется с сервера. Поле pictures TEXT и в нем храняется названия типа 34sfnsd034534|23423sdf345435vfd546| и тд. Но почему то ничего не удаляется и ошибки нету. Расширение картинок, хранящихся на сервере - jpg.
<?
$dir = opendir("car_img/medium/");
while(($file = readdir($dir)))
{
if(is_file($file))
{
$file = substr($file, 0, -4);
$query = "SELECT * FROM umc_cars WHERE pictures LIKE '$file'";
$result = mysql_query($query);
if (mysql_num_rows($result) == '0')
{
unlink ("car_img/medium/".$file.".jpg");
}
}
}
closedir($dir);
?>
|
| |
|
|
|
|
|
|
|
для: Buhen
(04.07.2008 в 10:16)
| | что по вашему делает эта строчка?
$query = "SELECT * FROM umc_cars WHERE pictures LIKE '$file'"; | |
|
|
|
|
|
|
|
для: Miha_Kregoff
(04.07.2008 в 11:37)
| | выбирает из таблицы umc_cars все строки с полем pictures где есть совпадение переменной $file.
Я решил сделать так но не получается почему то(
<?
$query = "SELECT * FROM umc_cars";
$result = mysql_query($query);
$row=mysql_fetch_assoc($result);
$pics = explode("|", $row["pictures"]);
$dir = opendir("car_img/medium/");
while(($file = readdir($dir)))
{
if(is_file($file))
{
$file = substr($file, 0, -4);
//if (mysql_num_rows($result) == '0')
if($file != $pics)
{
unlink ("car_img/medium/".$file.".jpg");
}
}
}
closedir($dir);
?>
|
В рез-те ничего не удаляется((( | |
|
|
|
|
|
|
|
для: Buhen
(04.07.2008 в 11:47)
| | Вы бы объяснили, что содержит поле pictures в этой таблице, и почему его нужно резать по | .
В последнем скрипте Вы пытаетесь сравнивать строку ($file) с массивом ($pics).
Само собой - ничего не выходит. | |
|
|
|
|
|
|
|
для: Trianon
(04.07.2008 в 11:54)
| | тогда что такое LIKE ? не очень понятна структура базы и именно данный запрос | |
|
|
|
|
|
|
|
для: Miha_Kregoff
(04.07.2008 в 11:58)
| | я просто хотел запросом выбрать все записи с полем pictures где встречается переменная $file. | |
|
|
|
|
|
|
|
для: Trianon
(04.07.2008 в 11:54)
| | а как надо сделать??? напишите
Поле pictures тип TEXT содержит названия изображений только без расширений ну например:
1880943c61b854c9b89fbc5ba0cb2e2f|de0450e568ef4de8f4dbc97d600ce82d|3367b23947c6ef344bdd08c0631cd772|04e17d89cda21ca08669c7db1d286595|
ну и так далее. Надо разбить на разделетели что я сделал и затем подставить расширение и сделать условие - если файл на сервере есть а названия в поле pictures нету то удалить данный файл с сервера. Ибо много всяких ненужных файлов вроде. | |
|
|
|
|
|
|
|
для: Buhen
(04.07.2008 в 11:59)
| | Сделал так но ничего не удаляется.
<?
$query = "SELECT * FROM umc_cars";
$result = mysql_query($query);
$row=mysql_fetch_assoc($result);
$pics = explode("|", $row["pictures"]);
$dir = opendir("car_img/medium/");
while(($file = readdir($dir)))
{
if(is_file($file))
{
$file = substr($file, 0, -4);
if (!in_array($file, $pics))
{
unlink ("car_img/medium/".$file.".jpg");
}
}
}
closedir($dir);
?>
|
| |
|
|
|
|
|
|
|
для: Buhen
(04.07.2008 в 11:59)
| | >а как надо сделать??? напишите
>
>Поле pictures тип TEXT содержит названия изображений только без расширений ну например:
>1880943c61b854c9b89fbc5ba0cb2e2f|de0450e568ef4de8f4dbc97d600ce82d|3367b23947c6ef344bdd08c0631cd772|04e17d89cda21ca08669c7db1d286595|
>ну и так далее. Надо разбить на разделетели что я сделал и затем подставить расширение и сделать условие - если файл на сервере есть а названия в поле pictures нету то удалить данный файл с сервера. Ибо много всяких ненужных файлов вроде.
Вот судя по тому, что у Вас тут изображено никаких названий это поле не содержит.
Оно содержит строки являющиеся перечислением имен файлов (без расширений) с разделителем в виде вертикальной черты. Методика хранения в БД - на редкость неудобная.
запрос, который проверил бы наличие имени в таком списке, будет выглядеть как-то так:
$query = "SELECT COUNT(*) FROM umc_cars
WHERE pictures = '$file'
OR pictures LIKE '%|$file|%'
OR pictures LIKE '$file|%'
OR pictures LIKE '%|$file' " ;
$res = mysql_query($query) OR die( "error in $query: ". mysql_error());
if(mysql_result($res, 0) == 0) //если ни одной строки нет
удаляем файл.
|
потому что имя может быть в середине, в начале , в конце списка, так и единственным вообще.
Работать эта конструкция должна изрядно долго.
А всё потому, что кучу элементов данных в одной ячейке таблицы в БД не хранят.
Хранят отдельными строками.
PS. Я Вам настоятельно советую, пока не завершите отладку подобного рода скриптов, вместо unlink писать echo. Чтобы сперва посмотреть, что именно вы собираетесь грохнуть. Иначе снесете нахрех весь каталог из-за какой-нибудь мелочи. | |
|
|
|
|
|
|
|
для: Trianon
(04.07.2008 в 12:20)
| | странно вообще белая страница и ничего не удаляет(
поставил счетчик на цикл - ниразу не выполнился((( | |
|
|
|
|
|
|
|
для: Buhen
(04.07.2008 в 12:49)
| | так может у Вас там и нет лишних файлов?
Код Вы не показали. | |
|
|
|
|
|
|
|
для: Buhen
(04.07.2008 в 12:49)
| | Все работает:) только почему то ошибка
Warning: unlink(car_img/medium/Thumb.jpg) [function.unlink]: No such file or directory
у меня и так его нету | |
|
|
|
|
|
|
|
для: Buhen
(04.07.2008 в 12:54)
| | может он не jpg?
Вы так спокойно ото всех имен отдираете расширения и приклеиваете jpg, что могли под гребенку еще какой-нибудь тип замести. | |
|
|
|