За последние 24 часа нас посетили 16186 программистов и 1553 робота. Сейчас ищут 936 программистов ...

Поиск файлов

Тема в разделе "PHP для новичков", создана пользователем mrgd, 27 мар 2008.

  1. mrgd

    mrgd Активный пользователь

    С нами с:
    27 мар 2008
    Сообщения:
    3
    Симпатии:
    0
    Ману курил, но так и не нашел в пхп возможности поиска файлов по заданным параметрам. Помогите пожалуйста решить следующие задачи:

    1) Найти в папке 10 последних закачанных *.gif файлов.
    2) Найти файл, следующий за заданным по алфавиту.

    (Про существование scandir знаю. В конце концов, он может и помочь для 2 задачи, но не для 1)
     
  2. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    как пробовал?
     
  3. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    встроенных возможностей действительно нет.
    +1
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    ИМХО, если в папку записывает какая-то сторонняя штуковина, то выход для скрипта есть один - сканировать все файлы и выявлять последний десяток по дате изменения.
     
  5. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    а если записывает свой скрипт то хранить данные о закаченном файле в отдельном месте, например в бд или каком-ть файле
     
  6. mrgd

    mrgd Активный пользователь

    С нами с:
    27 мар 2008
    Сообщения:
    3
    Симпатии:
    0
    > как пробовал?

    Никак :) Просто много думал.
    Раз возможностей нет, спасибо за ответы, буду мучить readdir.

    Последний вопрос: какая функция возвращает дату изменения файла?
     
  7. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    filemtime()
     
  8. dAllonE

    dAllonE Guest

    Хм... а если через system запустить ls -la -t и выбрать первые 10 строчек?
     
  9. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Вашу мать, твою дивизию, чтоб мне якорь в задницу, ....

    mrgd
    glob для поиска самих фаиов, дальше пробегаемся по каждому фаилу и определяем его дату создания/модификации. Это кросс платформенно и будет нормально работать везде.

    Для *nix систем есть более продвинутый вариант с консольной командой find. Почитайте комментарии в мануале по glob - там куча разных вариантов как похожих на мною выше предложенное так и с find - 100% можно что-то найти + немного почитать man find
     
  10. mrgd

    mrgd Активный пользователь

    С нами с:
    27 мар 2008
    Сообщения:
    3
    Симпатии:
    0
    Psih, респектище!

    Получилось вот что (насечет поиска 10 посл. файлов):
    Код (Text):
    1. <?php
    2. for($folder=2000; $folder<=2008; $folder++) {
    3.   foreach (glob($folder.'/*.gif') as $filename) {
    4.     $files['name'][] = $filename;
    5.     $files['date'][] = filemtime($filename);
    6.   }
    7. }
    8. arsort($files['date'], SORT_NUMERIC);
    9. $i=0;
    10. foreach($files['date'] as $key=>$date) {
    11.   echo($files['name'][$key].'<br>');
    12.   if (++$i==10) {break;}
    13. }
    14. ?>
    (2000, 2001 .. 2008 - это папки, в который файлв хранятся)

    Вроде код со своими обязанностями справляется, но все-таки меня коробит создание массива размером в 2000 элементов, в случае если в папках будет 2000 файлов.

    Как можно улучшить?
     
  11. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Не использовать встроенную сортировку. Это вообще дибилизм в данном случае.
    Ты бежишь по файлам - отбирай сразу 10 шт. самых свежих. Должна получится своя полу-сортировка, полу-пробег по файлам. Всего лишь одним циклом и массив только результирующий.