ФорумПрограммированиеPHP для идиотов → Вопрос по структуре реализации и снова регулярка

Вопрос по структуре реализации и снова регулярка

  • developer

    Сообщения: 241 Репутация: N Группа: Кто попало

    Spritz 27 декабря 2010 г. 7:04

    Уже были где-то вопросы по одной регулярке, я её успешно заюзал, было всё отлично доколе не заметил такого вот говна:
    регулярка:

    preg_match_all( &quot;/<br \\/>([0-9]{1,2}\.).*?(?=<br \\/>)/i&quot;, $row[&#39;full_story&#39;], $track);


    строка: 21. Respect - Aretha Franklin, получаем Respect - Aretha Franklin, все отлично, идём дальше
    строка: 17. The world&#39;s greatest - R. Kelly и получаем The world&#39;s greatest - R омг!?!?

    Вопросец по структуре. Таблице dle_post есть поле full_story из которого мы регуляркой выше берем треки. Всё отлично работает, теперь мне как-то нужно организовать всю систему до кучи. Поясняю в чём подвох, албомы музыки хоть и разные все, но в некоторых встречаются одинаковые треки, если на тупом без использования базы отправлять юзеров на другие страницы, то могут получаться дубли (любой пробел, апостроф, тире не такое, добавление feat и других мелочей может повлиять на страницу).

    Плюс используя ЧПУ и передачи данных на след страницу для дальнейшего скачивания трека или прослушивания делаем урл вида /track/Jamie+Foxx+-+Unpredictable/, в случае использования спецсимволов получаем и такие варианты /track/Brandy+-+Sittin%5C+Up+In+My+Room/, трек Brandy - Sittin&#39; Up In My Room, вот наглядный пример потери апострофа.

    Используем:

    $track[1] = preg_replace(&quot;#(.*?)\(.*?\)(.*?)#is&quot;, &quot;\\1\\3&quot;, $track[1]);
    $url = urlencode(trim(str_replace(array(&quot;&#39;&quot;, &quot;S &quot;, &quot;S&quot;,&quot;\&quot;&quot;), &quot;&quot;, $track[1])));

    (выше в коде кстати S - это shift+7 на eng, спецсимвол не пропускает)

    ну и потом заменяем данные при выводе в новости:

    $replace_track = str_replace(&quot;<br />&quot;, &quot;<br /><a href=\&quot;/track/&quot;.$url.&quot;/\&quot;><img src=\&quot;/templates/Default/style/download_.png\&quot; onmouseover=\&quot;this.src=&#39;/templates/Default/style/download.png&#39;\&quot; onmouseout=\&quot;this.src=&#39;/templates/Default/style/download_.png&#39;\&quot; width=\&quot;20\&quot; height=\&quot;20\&quot; alt=\&quot;Скачать &quot;.trim($track[1]).&quot;\&quot; title=\&quot;Скачать &quot;.trim($track[1]).&quot;\&quot; border=\&quot;0\&quot; vspace=\&quot;1\&quot; align=\&quot;middle\&quot; /></a> <a href=\&quot;#\&quot;><img src=\&quot;/templates/Default/style/play.png\&quot; onmouseover=\&quot;this.src=&#39;/templates/Default/style/play_on.png&#39;\&quot; onmouseout=\&quot;this.src=&#39;/templates/Default/style/play.png&#39;\&quot; width=\&quot;20\&quot; height=\&quot;20\&quot; alt=\&quot;Слушать &quot;.trim($track[1]).&quot;\&quot; title=\&quot;Слушать &quot;.trim($track[1]).&quot;\&quot; border=\&quot;0\&quot; vspace=\&quot;1\&quot; align=\&quot;middle\&quot; /></a> &quot;, $val);


    Ввиду таких извращений подумал об использовании для треков отдельной таблицы, чтобы в дальнейшем можно было мониторить что чаще слушают, скачивают собственно и выводить это всё куда нибудь, а так же чтобы можно было комментировать не только сам альбом, но и отдельную песню.

    В принципе ничего не поменяется, та же регулярка, вносим данные в отдельную таблицу данные с предварительной проверкой на наличие и затем делаем автозамену треков в альбоме, подставляя ссылку с id либо свеже добавленного либо уже ранее добавленного трека, вида: /track/название-трека-id/ или ещё проще /track/id/. Плюс такого действия на лицо, во первых проверка базы на наличие трека, во вторых адекватный вывод названия трека на странице и его дальнейший поиск через api или парсер.

    Теперь о нагрузке на сервер и поиске треков по базе: сейчас 5000 альбовом в базе, ежедневно добавляется до 20-50 альбомов, в каждом от 12 до 100 треков (в среднем возмем 25), простые подсчеты подскажут что в базе будет 125 000 треков и каждый раз при открытии любого из альбомов будет идти поиск по базе 25 раз по 125 000 записям, это понятное дело маразм. Выслушаю предложения по структурной реализации и регулярке в первой части поста (чтобы не тормозило на точке).
  • developer

    Сообщения: 241 Репутация: N Группа: Кто попало

    Spritz 29 декабря 2010 г. 3:15, спустя 1 день 20 часов 10 минут

    за два дня ни одного поста, хоть бы говнеца кто-то подросил.
  • md5

    Сообщения: 11951 Репутация: N Группа: в ухо

    Spritz 29 декабря 2010 г. 3:41, спустя 25 минут 35 секунд

    ты и так подбросил достаточно гавнеца своим кодом))
    все умрут, а я изумруд
  • Mars

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 29 декабря 2010 г. 5:23, спустя 1 час 42 минуты 3 секунды


    ты и так подбросил достаточно гавнеца своим кодом))


    +1
  • phpdude

    Сообщения: 26618 Репутация: N Группа: в ухо

    Spritz 29 декабря 2010 г. 5:43, спустя 19 минут 53 секунды

    дле, этим все насрано
    Сапожник без сапог
  • developer

    Сообщения: 241 Репутация: N Группа: Кто попало

    Spritz 29 декабря 2010 г. 9:45, спустя 4 часа 2 минуты 38 секунд

    вторую часть вопроса решил, осталась первая, про регулярку. как сделать так чтобы не тормозило на точке?
  • artoodetoo

    Сообщения: 5138 Репутация: N Группа: в ухо

    Spritz 29 декабря 2010 г. 23:51, спустя 14 часов 5 минут 39 секунд

    читать книжки по регуляркам. например Jeffrey E. F. Friedl. Mastering Regular Expressions - в интернетах полно электронных версий {+++282+++} а вообще твоя регулярка выглядит так, как будто ты ищешь не названия, а НОМЕРА. следи за скобками
    ιιlllιlllι унц-унц
  • artoodetoo

    Сообщения: 5138 Репутация: N Группа: в ухо

    Spritz 30 декабря 2010 г. 0:08, спустя 17 минут 17 секунд

    /(?:&lt;br.*>[0-9\.\s]*?)(.+)(?:&lt;br.*>)/iU

    как? квотирующие слеши сам добавишь
    click
    ιιlllιlllι унц-унц
  • developer

    Сообщения: 241 Репутация: N Группа: Кто попало

    Spritz 30 декабря 2010 г. 15:08, спустя 14 часов 59 минут 22 секунды

    я отделяю названия потом. решил по другому:
    $tracking = trim($track[1] . $track[2] . $track[3]);

    сурово!
  • Frukts

    Сообщения: ? Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 14:54, спустя 596 дней 22 часа 46 минут

    Да, при всей своей схожести, люди очень разные.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!