|
|
|
|
|
для: segazav
(02.04.2014 в 12:07)
| | в phpmyadmin жмете Export и выбираете нужные поля в таблице | |
|
|
|
|
|
|
|
для: segazav
(02.04.2014 в 12:40)
| | извините, но вы больны, честное слово. вам в голову приходят какие-то ужасные решения, не имеющие ничего общего с реальностью и вы отвергаете всё что вам предлагают
еще раз, пошагово напишу что нужно делать, раз вам всё-таки нужен алгоритм.
1) открываем директорию с файлами изображений и обходим каждый файл по отдельности
2) при обходе для каждого файла ищем запись в базе данных, запрос будет вида:
"SELECT COUNT(*) FROM doska WHERE foto_mini1 = '" . mysql_real_escape_string($image_name_from_directory) . "' OR foto_mini2='" . mysql_real_escape_string($image_name_from_directory) . "' ......
3) если количество возвращаемых записей = 0 - удаляем изображение, если нет - ничего не делаем
ВСЁ. ЭТО ВСЁ ЧТО НУЖНО СДЕЛАТЬ!
какие сравнения, какие временные таблицы? да даже если у вас не хватит ресурсов на первый запуск - запустите еще 1 раз, запустите 2 раза. НЕУЖЕЛИ ТАК СЛОЖНО ПОНЯТЬ, ЧТО С КАЖДЫМ РАЗОМ КАРТИНОК В ДИРЕКТОРИИ БУДЕТ СТАНОВИТЬСЯ ВСЁ МЕНЬШЕ ПОТОМУ ЧТО ОНИ БУДУТ УДАЛЯТЬСЯ И ЗНАЧИТ РЕСУРСОВ С КАЖДЫМ РАЗОМ НУЖНО БУДЕТ ВСЁ МЕНЬШЕ? | |
|
|
|
|
|
|
|
для: segazav
(02.04.2014 в 12:07)
| | А что если все имена файлов занести во временную таблицу и сравнить с таблицей путей к ним? | |
|
|
|
|
|
|
|
для: psychomc
(02.04.2014 в 11:58)
| | А как создать дамп таблицы только некоторых полей? | |
|
|
|
|
|
|
|
для: segazav
(02.04.2014 в 11:41)
| | ну так не надо выкладывать все поля, выложите только первичный ключи поля с фото. | |
|
|
|
|
|
|
|
для: psychomc
(02.04.2014 в 11:22)
| | Дамп таблицы с фото выложить не могу, т.к. там хранятся так же и контактные данные пользователей.
Функцией in_array() пробовал, не хватает памяти для обработки массива, т.к. файлов около 500 000 шт. | |
|
|
|
|
|
|
|
для: segazav
(02.04.2014 в 02:52)
| | здесь всё неправильно. вот эта конструкция
$result = mysql_query ("SELECT foto_mini1,foto_mini2,foto_mini3,foto_mini4,foto_mini5,foto_mini6,foto_big1,foto_big2,foto_big3,foto_ big4,foto_big5,foto_big6 FROM doska",$db);
$myrow = mysql_fetch_array ($result);
|
выбирает только первую по счету строку из таблицы doska а дальше вы выбираете ВСЕ картинки из директории. естественно, если и посчитается какое-то расхождение, то только с первой записью и на выходе получится абы что. так можно удалить почти все картинки из папки.
никакие расхождения тут не нужны. если так уж хочется сначала выбрать все записи из базы данных в массив и потом в цике обходить директорию, то достаточно просто проверять на каждом проходе существует ли в этом массиве такое изображение с помощью in_array. я же написал что нужно сделать. выложите здесь дамп таблицы базы данных "doska", чтобы было видно как в ней хранятся пути к изображениям и вам могли помочь. и желательно полный путь к папке с изображениями на сервере тоже. вы же упёрлись и ищете "менее мощные решения" | |
|
|
|
|
|
|
|
для: psychomc
(31.03.2014 в 11:12)
| | Нашел более оптимальное и менее мощное решение.
$result = mysql_query ("SELECT foto_mini1,foto_mini2,foto_mini3,foto_mini4,foto_mini5,foto_mini6,foto_big1,foto_big2,foto_big3,foto_ big4,foto_big5,foto_big6 FROM doska",$db);
$myrow = mysql_fetch_array ($result);
$dh = opendir('podaty_obyavlenie/foto/'); // Открыть папку
while (false !== ($filename = readdir($dh))) {
// собрать все файлы
if ( $filename != "." && $filename != ".."){
$file_dir[] = "foto/". $filename;
}
}
closedir($dh);
// Расхождение массивов
$raznica = array_diff($file_dir, $myrow); // сравниваем массивы
if (is_array($raznica)) // если файл является массивом
{
foreach ($raznica as $del_foto)
{
echo "$del_foto<br><br>"; // удаляем файлы
}
}
|
Ресурсов вроде хватает, но разные результаты массивов print_r($myrow);
Array ( [0] => [foto_mini1] => [1] => [foto_mini2] => [2] => [foto_mini3] => [3] => [foto_mini4] => [4] => [foto_mini5] => [5] => [foto_mini6] => [6] => [foto_big1] =>
[7] => [foto_big2] => [8] => [foto_big3] => [9] => [foto_big4] => [10] =>
[foto_big5] => [11] => [foto_big6] => )
А результат print_r($file_dir):
Array ( [0] => foto/0.11298200 1332744739.jpg [1] => foto/0.98137800 1373571971.jpg [2] => foto/0.22620400 1361369943.jpg [3] => foto/0.33276300 1378456558.jpg [4] => foto/0.67648100 1394874976.jpg [5] => foto/0.82936300 1322641887.jpg [6] => foto/0.98386900 1394688107.jpg [7] => foto/0.71861900 1332954448.jpg [8] =>
Как привести массивы к одинаковому виду, чтобы получить $raznica? | |
|
|
|
|
|
|
|
для: segazav
(31.03.2014 в 11:00)
| | есть 2 пути
1) правильный: идити в документацию, внимательно читайте про то что я написал и смотрите примеры
2) не совсем правильный: выкладывайте здесь дамп таблицы "doska" и немного данных и ждите, может быть вам помогут и перепишут. у меня в данный момент нет на это времени | |
|
|
|
|
|
|
|
для: psychomc
(31.03.2014 в 01:03)
| | Если бы я знал что нужно исправить, я бы исправил. | |
|
|
|
|