За последние 24 часа нас посетили 87292 программиста и 4639 роботов. Сейчас ищут 2040 программистов ...

Приложение на php и распозновании кириллицы

Тема в разделе "PHP для новичков", создана пользователем nadaru, 18 июл 2018.

  1. nadaru

    nadaru Новичок

    С нами с:
    18 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    Добрый день. Разрабатывается приложение на php. Есть к нему документация с требованиями. В приложении имеется функция по нахождению определенных файлов в заданном каталоге, но при этом в требованиях не указано, что файлы/пути к каталогу могут или не могут содержать кириллицу.

    Т.к. я не являюсь программистом и не владею техническими знаниями в разработке ПО на php, я хочу узнать, стоит ли вносить поправки в документацию с требованиями о том, что разрабатываемое приложение на php должно поддерживать имена путей и распознавать файлы используемые в названиях кириллицу? Или же приложение написанное на php по умолчанию распознает символы как на латинице так и на кириллице и не надо использовать доп. инструменты / команды при создании ПО?
     
  2. nadaru

    nadaru Новичок

    С нами с:
    18 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    P.S. В доп. информации прописано, что для работы приложения необходимо установленное и включенное расширение mbstring. Это значит что php приложение сможет распознавать и работать не с ASCII символами в любом виде и месте?
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    а нахрена файлы на кириллице называть в хранилище? какая цель?
     
  4. nadaru

    nadaru Новичок

    С нами с:
    18 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    Это не дело разработчиков как они будут называться, а дело тех кто будет пользоваться приложением. И надо заранее все моменты прописать.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    если это юзерские файлы и важно сохранить название, то файлы можно хранить под некими другими именами, а оригинальное имя держать в базе данных. Обычно так и делают.

    Если вообще не важно, как файлы назывались, и важно только прочитать их, то можно при загрузке менять им имя.
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    Если есть двоякое толкование и возможность сделать не так - то обязательно пропишите все нюансы, в том числе и кодировку
     
  7. nadaru

    nadaru Новичок

    С нами с:
    18 июл 2018
    Сообщения:
    4
    Симпатии:
    0
    Файлы могут называться с исп. англ. и русского символов. Названия менять нельзя. Надо чтобы приложение могло распознавать эти символы и пути к ним, если они использовали русский алфавит.

    Это да, но как написал выше уже прописано, что необходимо использовать расширение mbstring. Вопрос в том подразумевает ли оно уже то, что приложение сможет читать русский символы? Просто если да, то я укажу избыточные требования, которые уже были заложены в необходимости использования данного расширения (это про читаемость русского алфавита).

    Или наличие данного расширения не дает возможность работы php приложению с русскими символами, я имею ввиду что все равно надо дополнительно "кодить" эту фичу, просто mbstring инструмент который дает эту возможно реализовать, либо же сам по себе установленный как расширение mbstring уже позволяет работать с символами русского алфавита?
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    оригинальное название сохраняется в бд и файл можно будет скачать с оригинальным названием
    но хранится файл на сервере под номером допустим
    --- Добавлено ---
    да, mbstrings позволят конвертить одну кодировку в другую.
    тут фишка в том, что хyй знает, что там на сервере в файловой системе творится
    т.е. файл присылается и отдельно присылается его название. ты обычно можешь его сохранить в папочку, но вот выживет ли оригинальное название при этом - не факт.
    это раз

    два, это дико несекурно хранить пользовательские файлы под оригинальным названием. это вообще очень опасно.

    три, они могут друг друга перезаписать случайно, ведь ты сохраняешь название!

    четыре, напихивание в одну папку много файлов - плохо. файлы надо размазывать по нескольким папкам так, чтобы в каждой не копилось больше нескольких тысяч файлов. Это удобно делать имея возможность изменять имя файла.

    Поэтому я рекомендую тебе изначально настроиться на то, что файлы ложатся на хард под техническим названием, а пользовательское идёт в бд, где хранится для этого файла, этого юзера, этого проекта и т.п.
    Когда юзер просит список - ты ему отдаёшь его оригинальные названия и дальше он с ними работает. и всё.
    а на серваке они лежат под хешами или юникидами, распиханные по папкам ровным слоем.
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    И таки mb_string ничего не гарантируеи
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.129
    Симпатии:
    1.223
    Адрес:
    там-сям
    Программисты не используют кириллицу в именах своих файлов. ПМСМ, не обязательно писать об этом если речь об исходных файлах проекта.

    Что касается пользовательских файлов, т.е. загружаемых через браузер, нельзя сохранять файл на диск с именем, полученным из браузера хотябы потому, что это имя может повториться. Вы же не хотите перезаписать файл чем-то новым?!!! Есть и другие очень неприятные нежданчики.

    Вывод:
    Оригинальное имя сохраняется только в базе, а файл записывается с искусственным именем, типа af2e387d1.dat. Об этом можно написать, если выши разрабы не очень опытны.

    Когда нужно отдать файл пользователю на скачивание, подставляют оригинальное имя в заголовке.
    PHP:
    1. header('Content-Disposition: attachment; filename=' . $originalFilename);
    Ну или используются готовые библиотеки/фреймворки где всё это уже решено.

    Да прибудет с вами сила!
    --- Добавлено ---
    Да, приложение сможет читать руссие символы. Однако в именах файлов русские символы лучше не использовать, а ограничиться набором ASCII.