Задать вопрос
  • Устанавливать ли в php таймзону пользователя?

    @artem-dainov
    Php, java, js. Boot spring, jquery, git
    Когда я начинал изучение языков программирование, ко мне пристала одна проблема, из-за которой мне говорили, что я полный нуб.
    Я время, в базе, хранил как метку в секундах, да и до сих пор так делаю. А если надо в человеко-понятный уровень превратить, так в PHP есть date(), и в js new Date()
    А когда хранят в базе что-то подобное 2025-01-31t12:55:43, то это какой-то мрак.
    Конечно, такой подход убирает сложность работы с датами, но я люблю, когда дата представлена как 31 янв 12:55, причем год должен появиться только тогда, когда нынешний и в дате сохранения не совпали.
    Да, это лишняя обработка на фронте, но ведь красиво же и еще доступней для пользователей.

    А теперь к сути вопроса.
    1. Сервер должен иметь постоянный часовой пояс. Клиенту отправлять даты именно в этом часовом поясе. Я бы выбрал нулевой пояс. Просто мне проще в голове представлять как отнимать или прибавлять.
    2. На клиенте обрабатывать данные и выставлять часовой пояс соответствуя данным из браузера.
    3. Если такая настройка есть, чтобы пользователь изменил часовой пояс, то тут должен произойти просто пересчет и всё.
    У вас, на клиенте, должен быть объект js, который должен хранить некоторые глобальные настройки аккаунта, которые должны всегда загружаться вместе со страницей.
    Ответ написан
    23 комментария
  • Устанавливать ли в php таймзону пользователя?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    5) Какие главные минусы против чтобы временную метку хранить просто как число unixtimestamp? То что выборки , когда нужны всякие DATE специфичные функции, потребуют преобразования в тип дату в каждой строке? (это преобразование может не сложное?, ведь datetime и так хранится как число)
    Как минимум то что у вас дата не хранится как дата. Про то что не будут работать стандартные функции работы с датами типа разницы в год, месяц, неделю и прочие весьма неочевидные преобразования я вообще молчу, чего стоит банальное вычисление количества дней до, например, конца месяца, с учетом того что каждый месяц имеет разную длину, не говоря уже про високосные года, ну и всякие расписания, где работа с минутами/часами без готовых функций тоже так себе удовольствие. Кроме того, таймстамп имеет свои ограничения, например в нем нельзя хранить даты раньше чем 1970 год, то есть пользователи старше 55 лет дату рождения сохранить не смогут. Ну и горизонт планирования до 2038 года, дальше все. Алсо, вы теряете защиту от кривых данных на уровне типа поля, что тоже +1 в копилку встроенных типов.
    В целом, таймстампы это именно метки, то есть "тогда-то произошло такое-то событие, относящееся к текущему времени", со своими ограничениями.
    Ответ написан
    Комментировать
  • Устанавливать ли в php таймзону пользователя?

    @alexalexes
    Проблем с временными зонами вообще не будет, если их представление выдавить максимально ближе к модели представления данных на интерфейсе пользователя.
    Нужно конвертировать в строку только непосредственно перед отрисовкой дату и время из UTC, и обратно загонять время в UTC, если забираете пользовательский ввод.
    Весь бек должен работать в одной временной зоне, а от пользователя знать, что он в такой-то временной зоне, только в контексте сессионной переменной, если это необходимо.
    Ответ написан
    Комментировать
  • Как сделать запрос к БД по средствам Yii2 на php?

    MLDevelop
    @MLDevelop
    Что касается код до слова "Тишина": это код взяли из конфига как есть? Если это действительно так, то выполнение запроса в
    Yii::$app->db->createCommand('SELECT text FROM pictures WHERE id=356')
               ->queryOne();
    не будет работать по нескольким причинам:
    1. Выполнение запроса после команды return $config;, потому этот код даже не выполнялся (оттого и тишина)
    2. Непосредственно в файлах конфигов не будут выполняться запросы, так как приложение еще не инициализировано. Для тестирования запросов - лучше использовать экшены в контроллерах.
    Ответ написан
    Комментировать
  • Как в yii2 сделать дополнительную обработку только видимых данных в ArrayDataProvider?

    IvanU7n
    @IvanU7n
    nothing interesting here
    собственно, где вызов setModels(), чтобы обновить данные в объекте?

    потуги со ссылками не работают, т.к. getModels() возвращает массив без ссылки
    Ответ написан
    Комментировать
  • Почему в Go вакансиях требование знания PHP?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Или это просто такое количество кодовой базы на PHP накопилось, которую все дружно решили переписывать на Go

    Скорее всего.

    если да, то почему именно на Go?

    Если компания решилась вложиться в переписывание продукта на другом языке, то у неё на это точно очень веские причины, вероятнее всего - проблемы производительности. В этом случае Go - очевидный выбор. Python, Ruby и JS не дадут никакого выигрыша относительно PHP. Хоть на языках из мира jvm и .net можно писать высокопроизводительный софт, но они скорее решают проблемы сложности огромных кодовых баз. С++ и Rust очень сложны и для прикладного софта применяются только в крайнем случае. Всякая экзотика, типа Erlang, Elixir и Haskell - это вообще редкий случай в энтерпрайзе. Go же одновременно очень прост и ориентирован на высокую производительности.
    Ответ написан
    7 комментариев
  • Поэтапный переход фронтового приложения на другой стэк?

    Sanes
    @Sanes
    Реально. Для этого вам нужен разработчик.
    Ответ написан
    3 комментария
  • Появляется ошибка, не понимаю как её исправить Setting unknown property: yii\bootstrap5\ActiveForm::model?

    kawabanga
    @kawabanga
    ActiveForm::begin(['id' => 'form-booking', 'model' => $bookingForm]);

    Модель вызываете в ActiveForm. Удалите model тут.
    Ответ написан
    2 комментария
  • Какие есть годные альтернативы OpenServer?

    motokraft
    @motokraft
    Кратко о себе
    Docker - он конечно будет сложнее чем OpenServer, но если научиться то думаю оно того стоит
    Ответ написан
    4 комментария
  • Как сделать права 777 по умолчанию для общих папок Virtualbox?

    @pfg21
    ex-турист
    смонтируй vboxsf с правильными правами и будет она тебе везде доступна
    https://manpages.ubuntu.com/manpages/trusty/man8/m...
    это ж линукс
    uid=UID              set the default file owner user id to UID
    gid=GID              set the default file owner group id to GID
    dmode=MODE             override the mode of all directories to (octal) MODE
    fmode=MODE              override the mode of all regular files to (octal) MODE
    umask=UMASK            set the umask to (octal) UMASK
    dmask=UMASK            set the umask applied to directories only
    fmask=UMASK             set the umask applied to regular files only
    Ответ написан
    9 комментариев
  • Почему не назначаются разрешения на папку в volume-е?

    rqdkmndh
    @rqdkmndh
    Web-разработчик
    Изменение прав доступа к папке в Dockerfile с помощью RUN chmod не действует на тома (volumes), примонтированные при помощи инструкции volumes в docker-compose.yml. Это связано с тем, что тома подключаются после выполнения всех команд указанных в Dockerfile, и их содержимое не изменяется в процессе построения образа, что означает, что фактические данные тома и права доступа управляются внешним хостом.

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

    Если же настройка прав доступа должна выполняться внутри контейнера (например, при инициализации или запуске), вы можете использовать команду entrypoint или command в docker-compose.yml для запуска скрипта, который будет устанавливать нужные права доступа при запуске контейнера каждый раз. Пример такого скрипта:
    # Dockerfile
    ...
    
    # Установка прав доступа в скрипте инициализации
    COPY ./set-permissions.sh /usr/local/bin/set-permissions.sh
    RUN chmod +x /usr/local/bin/set-permissions.sh
    
    # Запуск скрипта при старте контейнера
    ENTRYPOINT ["set-permissions.sh"]
    CMD ["apache2-foreground"]

    bash:
    # set-permissions.sh
    #!/bin/bash
    chmod o+w /app/web/uploads
    chmod o+w /app/web/uploads/result
    exec "$@"

    Этот скрипт изменит права на каталоги при каждом запуске контейнера, не зависимо от прав на машине хоста.
    Ответ написан
    Комментировать
  • Создание коротких ссылок, как хранить?

    @spaceatmoon
    Вопрос с чувствительностью регистра решается переводом utf8 в utf8_bin. Также задай для поля флаг unique. Я даже проверил и это действительно работает так как надо.
    https://stackoverflow.com/a/6448861/17078920
    Ответ написан
    2 комментария
  • Какой самый простой для пользователей вариант управления аватаркой?

    OAPrilepa
    @OAPrilepa
    Frontend developer
    Вот неплохой редактор: https://github.com/mosch/react-avatar-editor

    Т.е. делаем UI выбора файла, данные передаем в редактор, на выходе получим blob данные из canvas и их уже можно отправлять на back для записи.
    Ответ написан
    3 комментария
  • Select MIN MAX в activerecord yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    $min_price = SomeModel::find()->min('price');
    Если надо просто минимальное значение получать. Зачем оно в select по вопросу не понятно.
    Ответ написан
    1 комментарий
  • Насколько правильно так перезаписывать свойство?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Не надо бессмысленных переприсваиваний, давайте изменим порядок проверок на обратный и будем сразу записывать наиболее приоритетное значение. Какие тут есть варианты:

    Наиболее очевидный.

    Вспоминаем про существование оператора else:

    if (state) {
      this.x = 'c';
    } else if (route) {
      this.x = 'b';
    } else if (prop) {
      this.x = 'a';
    }

    К чёрту условные операторы.

    Складываем данные в массив и ищем в нём подходящее значение:

    this.x = [
      [ state, 'c' ],
      [ route, 'b' ],
      [  prop, 'a' ],
    ].find(n => n[0])?.[1] ?? this.x;

    Тернарная дичь.

    this.x = 
      state ? 'c' :
      route ? 'b' :
      prop  ? 'a' :
              this.x;

    Ещё дичь - switch.

    switch (true) {
      case !!state: this.x = 'c'; break;
      case !!route: this.x = 'b'; break;
      case  !!prop: this.x = 'a'; break;
    }


    mounted () {
      ...

    Вот это непонятный момент - а что, если какое-то из проверяемых значений изменится уже после монтирования экземпляра компонента? Наверное, следует сделать ваш x вычисляемым свойством.
    Ответ написан
    Комментировать
  • Чем отличается oop php от oop javascript?

    Snova_s_vami
    @Snova_s_vami
    JavaScript ES5-8, TypeScript, Angular
    Если коротко, то JS это прототипный язык, само ядро отличается от других ООП языков.
    Те же классы это синтаксический сахар над функциями-конструкторами с их прототипами.
    Нет поддержки интерфейсов, типов, абстрактных классов, отсутствует инкапсуляция по умолчанию без танцов с бубном в виде модулей.
    Если интересует frontend с полноценным ООП, используйте TypeScript. В результате это будет тот же JS, но в процессе работы вы сможете пользоваться всеми прелестями ООП.
    Ответ написан
    5 комментариев
  • Как сделать авторизацию на React и бек на php?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    где сохронять данные когда пользовател авторизовался?

    Гугли Сессии и куки на php.
    Ответ написан
    3 комментария
  • Как проектировать сайт на vue, чтобы его можно было потом сделать приложением?

    kleinmaximus
    @kleinmaximus
    Senior Full-stack Javascript Developer
    Посмотрите https://quasar.dev/ - можно разрабатывать SPA, SSR, PWA, мобильные (через Cordova/Capacitor) и desktop (через Electron) приложения на Vue.
    Ответ написан
    Комментировать
  • При выборе PHP фреймворка стоит ли обращать внимания на тесты скорости?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    В текущий момент поддерживаю достаточно большой проект на фалконе, который был написан до меня. Так вот, всем кто там дрочил на сишные либы фалкона, мое вам имхо, основаное на годе поддержки этого проекта:

    1) Оно мегахреново переносится и очень криво становится на свежие системы. Корме того что половина гайдов по установке устарела, но все еще лежит на оф. сайте, гайды сообщества противоречат друг-другу, 90% из них не работает, а про некоторые дистрибутивы можете просто забыть, там они работать просто не будут.

    2) Оно все работает as is и хрен ты посмотришь как работает родная вьюшка/конторллер "внутри", а доки не сказать чтобы хорошо описаны, комьюнити слабенькое, многие вещи сделаны спорно, а поправить или что-то подкрутить дело неблагодарное.

    3) Теперь про самое интересное - скорость работы. Так вот, вся это мутотень про память и прочие плюшки на нормальном сервере не ощущается вообще, то есть переходя определенный предел мощности/вооруженности сервера скорость практически сравнялась с нативом (использовался ларавел и Уии на том же сервере, по замерам - плюс-минус то же по скорости, и чуть больше по памяти (центос, 64гб оперативы, 4 проца, нжинкс, пхп 7.2). Короче выгода была на ветке пхп 5.+, сейчас его актуальность практически равна нулю.

    4) В моем случае по приходу сервер регулярно падал при "серьезной" нагрузке (20-30рпс), в чем я изначально предположил вину старых модулей фалкона, но по факту оказалось что 99% нагрузки вносили ожидания запросов к бд, некоторые из которых были по 7-15 минут, а некоторые куски кода создавали по 80+ запросов с 1 страницы, просто дозапрашивая какие-то данные для вьюшки в цикле. Предыдущий "кудесник" кормил руководство отмазками типа - "мало памяти, железо слабое, все плохо, а то бы летало...". "Магия плохого железа" закончилась после оптимизации запросов и доведения самых тяжелых до 0,5 секунды, а так же выборки всех данных в 1-2 запроса с нормальными джоинами.

    5) Основной вопрос всегда сводится к жадности - взять что-то побыстрее из софта, сэкономив на хостинге/оборудовании. И оно всегда не работает так, по ряду факторов, которые достаточно очевидны.
    Ответ написан
    5 комментариев