Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Очистка сервера от не нужных файлов

Сообщения:  [1-10]    [11-20]  [21-27] 

 
 автор: psychomc   (02.04.2014 в 13:20)   письмо автору
 
   для: segazav   (02.04.2014 в 12:07)
 

в phpmyadmin жмете Export и выбираете нужные поля в таблице

  Ответить  
 
 автор: psychomc   (02.04.2014 в 13:16)   письмо автору
 
   для: 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:40)   письмо автору
 
   для: segazav   (02.04.2014 в 12:07)
 

А что если все имена файлов занести во временную таблицу и сравнить с таблицей путей к ним?

  Ответить  
 
 автор: segazav   (02.04.2014 в 12:07)   письмо автору
 
   для: psychomc   (02.04.2014 в 11:58)
 

А как создать дамп таблицы только некоторых полей?

  Ответить  
 
 автор: psychomc   (02.04.2014 в 11:58)   письмо автору
 
   для: segazav   (02.04.2014 в 11:41)
 

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

  Ответить  
 
 автор: segazav   (02.04.2014 в 11:41)   письмо автору
 
   для: psychomc   (02.04.2014 в 11:22)
 

Дамп таблицы с фото выложить не могу, т.к. там хранятся так же и контактные данные пользователей.
Функцией in_array() пробовал, не хватает памяти для обработки массива, т.к. файлов около 500 000 шт.

  Ответить  
 
 автор: psychomc   (02.04.2014 в 11:22)   письмо автору
 
   для: 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", чтобы было видно как в ней хранятся пути к изображениям и вам могли помочь. и желательно полный путь к папке с изображениями на сервере тоже. вы же упёрлись и ищете "менее мощные решения"

  Ответить  
 
 автор: segazav   (02.04.2014 в 02:52)   письмо автору
 
   для: 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?

  Ответить  
 
 автор: psychomc   (31.03.2014 в 11:12)   письмо автору
 
   для: segazav   (31.03.2014 в 11:00)
 

есть 2 пути
1) правильный: идити в документацию, внимательно читайте про то что я написал и смотрите примеры
2) не совсем правильный: выкладывайте здесь дамп таблицы "doska" и немного данных и ждите, может быть вам помогут и перепишут. у меня в данный момент нет на это времени

  Ответить  
 
 автор: segazav   (31.03.2014 в 11:00)   письмо автору
 
   для: psychomc   (31.03.2014 в 01:03)
 

Если бы я знал что нужно исправить, я бы исправил.

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-27] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования