Скрипт для удаления "мертвых" картинок

Тема в разделе "Shop-script", создана пользователем Polyaxe, 16 июл 2008.

  1. Polyaxe

    Polyaxe Постоялец

    Регистр.:
    13 фев 2007
    Сообщения:
    100
    Симпатии:
    31
    В процессе работы магазина очень много остается "мертвых" картинок, которые висят в папке product_pictures, а толку от них нет. Давайте напишем скрипт (или программу), которая будет смотреть БД и папку на предмет ненужных изображений и удалять их.

    Я очень готов помочь, но не знаю PHP. Можно сделать Win32 клиента для этих целей. Прямо сейчас займусь. Если кому интересно, то давайте скооперируем усилия в этом направлении. Могу алгоритм составить и вообще.
     
  2. zirrax

    zirrax

    Регистр.:
    8 ноя 2006
    Сообщения:
    321
    Симпатии:
    141
    Скрипт оооооочень нужный. Мне постоянно приходится чистить картинки вручную.
    К сожалению, в силу своих знаний, не могу помочь в написании скрипта, но готов вложить немного денежки.
    --------
    Пользователь fominsa предложил мне такой скрипт за 30 долл. Кто готов скинуться?
     
  3. Polyaxe

    Polyaxe Постоялец

    Регистр.:
    13 фев 2007
    Сообщения:
    100
    Симпатии:
    31
    Мне тоже предлагал. Однако другой уважаемый пользователь предложил мне составить алгоритм, что я и сделал. Он в своб очередь обещал реализовать это на PHP. Так что по поводу покупки я рекомендую обождать.
     
  4. hofa

    hofa Создатель

    Регистр.:
    28 май 2008
    Сообщения:
    39
    Симпатии:
    24
    А запуск скрипта будет встроен в админку?
     
  5. Plushev

    Plushev Постоялец

    Регистр.:
    28 июл 2008
    Сообщения:
    57
    Симпатии:
    3
    Я как раз php знаю неплохо, вот shop-script только начал осваивать. Так что если что-то не получится, могу взяться за это дело. Денег не надо, в конце концов на этом форуме рулим общее дело :)
     
  6. Welho®

    Welho® Предвестник пьянки

    Регистр.:
    4 дек 2007
    Сообщения:
    855
    Симпатии:
    330
    а где собственно алгоритм, я его так и не получил :(
     
  7. Polyaxe

    Polyaxe Постоялец

    Регистр.:
    13 фев 2007
    Сообщения:
    100
    Симпатии:
    31
    К сожалению при оформлении выяснилось, что я ничерта не помню фигур блок-схем, поэтому приведу выкладки простым русским языком с использованием терминологии Delphi:

    1. Вход в скрипт.

    2. создаем динамический массив:

    fs_array=array of record
    filename: string[255]; //здесь будут храниться имена фалов картинок
    live: boolean //Здесь будем отмечать живые картинки
    end;


    3. Создаем динамический массив:
    db_array=array of record
    filename: string[255]; //здесь будут ссылки на картинки из БД
    live: boolean
    end;

    4. Массив fs_array заполняем соответсвенно именами файлов картинок в файловой системе.

    5. Массив db_array заполняем ссылками на файлы из базы данных

    6. Отмечаем те файлы, которые присутствуют и в БД, и в файловой системе

    for i:=0 to length(fs_array)-1 do
    for j:=0 to length(db_array)-1 do
    if fs_array.filename=db_array[j].filename then
    begin
    fs_array.live:=true;
    db_array[j].live:=true
    end;

    После выполнения этого цикла у нас все живые картинки в массиве fs_array будут иметь поле live равное true. Все ссылки на живые картинки в БД тоже.

    7. Удалять мертвые картинки не будем (что бы минимизировать потери от ошибок, будем переименовывать)

    for i=0 to length(fs_array)-1 do
    if not fs.array then
    begin

    Здесь мы переименовываем файл с именем fs_array.filename в, например, '~~~'+fs_array.filename. Тогда их можно легко отсортировать и удалить. Ну или сразу удаляем.

    end;

    Тот же самый цикл можно повторить для удаления мертвых ссылок на картинки из БД (такие тоже могут быть).

    8. Выход. (опционально можно сохранить лог работы)

    Я извиняюсь за отсутствие блок-схемы. Видимо состарился ((

    ЗЫ. И табуляция здесь не сохраняется.
     
  8. fominsa

    fominsa

    Регистр.:
    12 фев 2008
    Сообщения:
    234
    Симпатии:
    229
    Бред... не еб*те мозг друг другу

    $res=opendir("products_pictures");
    while ($file=readdir($res)) {
    $q=mysql_query("SELECT COUNT (*) FROM SS_product_pictures WHERE filename='$file' OR thumbnail='$file' OR enlarged='$file'");
    $q2=mysql_query("SELECT COUNT (*) FROM SS_categories WHERE picture='$file'");
    if (mysql_num_rows($q)==0&&mysql_num_rows($q2)==0)
    if (unlink("products_pictures/$file"))
    print "Файл $file удачно удален<br>\n";
    }

    что то вроде этого должно помочь пробуйте
     
    mariohs, nafanyaa и Phoenix_666 нравится это.
  9. vdi

    vdi Создатель

    Регистр.:
    23 янв 2008
    Сообщения:
    37
    Симпатии:
    13
    объясните по подробнее как именно удалить мертвые картинки,а то их уже тысячи 2 насобиралось
     
  10. Hmelex

    Hmelex

    Регистр.:
    15 апр 2008
    Сообщения:
    514
    Симпатии:
    119
    Я конечно не "бландинка"- но несовсем понятно куда (в какой файл) - этот код поставить или какой заменить?
    Пробовала искать хоть что то наподобие в
    - picture_functions.php
    - product_functions.php
    - products.php
    Но все безрезультатно - помогите пожалуйста!!!:ah: