Задать вопрос
  • Как лучше сделать базу данных?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    не затруднит ли в дальнейшем получение информации из базы?

    Затруднит. Причём не "в дальнейшем", а вот уже прямо сейчас.
    С нормальной таблицей получить данные пользователя и его баланс можно одним простым запросом. А с зоопарком из таблиц надо что-то колупать с именами таблиц.
    С нормальной таблицей получить аналитику по финансам в целом можно одним простым запросом. А с зоопарком из таблиц каждый раз придётся собирать запрос вручную в цикле и уродовать свой жесткий диск поскольку сразу БД не сможет получить все данные, а её придётся сначала слить все данные всё равно в одну таблицу, а потом уже по ней искать.
    Ответ написан
    Комментировать
  • Есть ли реальные проблемы с безопасностью windows 7 для домашнего использования?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я думаю, можно подытожить все данные здесь ответы:
    На данный момент о конкретных проблемах с безопасностью для Windows 7 сообществу ничего неизвестно.
    Ответ написан
    Комментировать
  • Выбор между SQL и NoSQL документооринтированной базой данных?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Тут нет никакого выбора.

    Первое, что надо понять - это что в "веб приложении", да ещё и с "архитектурой", должна быть база данных. Без неё просто не обойтись. А из всего перечисленного базой данных является только постргес.
    (те, кто почему-то до сих пор не избавился от иллюзий, или просто стал жертвой незамысловатой рекламы, могут почитать, почему MongoDB базой данных не является).

    Второе, что надо понимать - это что в нагруженных приложениях база данных никогда не используется одна сама по себе. Для выполнения различных дополнительных задач используются специализированные движки. Например
    • кликхаус для аналитики
    • редис для кэширования
    • эластик для поиска
    • сентри для логов
    • и так далее - вариантов масса

    Соответственно, если говорить про базу данных, то выбор очевиден - Постгрес.
    Но если речь про поиск, то так и надо формулировать - "что использовать для поиска по базе данных?". И тут ответ тоже будет очевидный - Эластик (ну или любой другой поисковый движок - солр, мантикора, и так далее). Который и будет искать по информации, хранящейся в базе данных.

    Но это только если у вас действительно веб-приложение. Если же у вас стильный энергичный молодёжный стартап, целью которого является проесть деньги инвестора, то Монго - а ещё лучше Равен - будет идеальным выбором. Это же мечта любого говнокодера маститого разработчика - не нужно корпеть над структурой базы данных, мучиться с внешними ключами, вдумчиво расставлять индексы - а просто валить всё в одну кучу!
    Ответ написан
  • Какой параметр php модуля отключает тему формы с сайта?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Проще починить саму форму, чем искать черную кошку в темной комнате. Тем более, что её там скорее всего и нет.
    Ответ написан
    Комментировать
  • Как лучше обновлять счётчик записей?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Лучше всего вообще ничего не обновлять.
    При наличии очевидного индекса на article_id, хоть какие-то проблемы подсчёт на лету начнёт создавать на объёмах уровня фейсбука.
    Так что я бы сначала не со счётными палочками колупался, а проверил наличие индекса.
    Ответ написан
    Комментировать
  • Какая конкретная модель адаптера Wi-Fi 5GHz заведётся под Ubuntu (24, если это важно)?

    ipatiev
    @ipatiev Автор вопроса
    Потомок старинного рода Ипатьевых-Колотитьевых
    В итоге догадался посмотреть отзывы в интернет-магазине, и взял ASUS PCE-AX58BT
    Ответ написан
    Комментировать
  • Авторизация PHP. Как исправить Warning: Undefined array key "login" in?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Данная ошибка может возникать в двух случаях:
    - если вы обращаетесь к этому скрипту напрямую, а не как к обработчику формы
    - если в форме были ошибки, и она тупо не передаёт поля login и pass методом POST.

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

    В целом же, эта авторизация будет бессмысленной, даже когда заработает. Поскольку любой придурок легко авторизуется без пароля, тупо через SQL инъекцию. Очердной пример того, что учить программирование "по видео из интернета" - это пустая трата времени
    Ответ написан
    1 комментарий
  • Изучение php с нуля для верстальщика?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Тут проблема скорее не в том, что 4-5 лет, а в том, что за редчайшими исключениями, любые видеокурсы - это отборный говнокод. Конкретно про Дмитрия Лаврика не скажу, но простая статистика говорит о том, что учить РНР по видеокурсам не стоит.

    Лучше потратьтесь на книжку, Джон Дакетт, PHP&MySQL. Там очень толково, на примерах даётся не только язык, но и все важные аспекты программирования - обработка ошибок, отладка, рефакторинг, структура приложения, SQL, обработка изображений, и куча всего остального. В последних главах весь материал даётся на примере создания простой но рабочей социальной сети.
    Ответ написан
    1 комментарий
  • Как правильно настроить права для веб-сервере apache2+php-fpm?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Самое первое, что стоит проверять в таких случаях - это selinux.
    Самое второе - что все папки в цепочке от корня читаемы для пользователя пхп.

    А если говорить в целом, запускать пхп от пользователя хттп довольно бессмысленно. Пользователь фпм должен совпадать с владельцем файлов. То есть запускать надо от девопса.

    Лично я делаю так: веб-сервер работает под своими группой/пользователем, а пхп - под SSH логином пользователя сайта. У вас это может быть видимо этот девопс.
    Чтобы их поженить, просто добавляем пользователя веб-сервера в группу пользователя, usermod -a -G devops www-data, а папочке веб-сервера соответственно выставляются права 750. Веб-серверу нужно только чтение, и он его имеет через группу. Таким образом можно соорудить такой мини-хостинг, разные ползователи не могут ходить в папки друг друга, и при этом нет обычной чехарды, когда пользователь ssh/ftp и пользователь пхп-фпм разные.
    Ответ написан
    2 комментария
  • Почему этот запрос выводит из строя mysql?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Первый уровень оптимизации запросов - это, разумеется, индексы.

    Но иногда даже если все нужные индексы есть, база тупит неимоверно. В этом случае надо сразу смотреть значение innodb_buffer_pool_size. По умолчанию значение этого параметра всего 128 мегабайт. А это, грубо говоря, максимальное значение памяти, доступное MySQL для работы.

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

    Разумеется, у mysql есть просто миллион разных настроек, которые тоже влияют на производительность. У Перконы, кажется, даже есть калькулятор, в который ты заливаешь информацию о своей базе, а он тебе выдаёт значения параметров конфигурации. Но это уже такая тонкая настройка, третий уровень. Ничего из этого не будет работать, если innodb_buffer_pool_size недостаточного размера. И его размер рекомендуется выставлять на максимально допустимое значение. Если это выделенный mysql сервер, то 80-90% от физической памяти. Если не выделенный - то столько, сколько не жалко, чтобы не мешать остальным приложениям.
    Ответ написан
    1 комментарий
  • Можно ли прикрутить нативную функцию?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Можно, но не нужно.

    Функция, которая пытается проискейпить все данные скопом сама по себе не нужна. Каждое значение надо форматировать отдельно.
    И уж тем более функция, которая портит исходные данные. Представим, что одну и ту же информацию мы отправляем по емейлу, и в СМС. Сначала проискейпим HTML для шаблона письма, а потом эти же данные отправим в SMS... И там будут эти "
    И уж тем более функция, которой требуется доступ к свойству объекта на запись, который далеко не всегда есть.
    Ответ написан
    3 комментария
  • Как выбрать максимальное значение во вложенных массивах?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    просто и красиво?

    Перебрать массив и получить максимальное значение - это три строчки. Куда проще-то?

    Есть какая-то функция или сочетание функций

    Есть поговорка. "Дурная голова ногам покою не даёт". И ещё есть принцип, KISS, который переводится как "не надо пытаться выглядеть умнее, чем ты есть, дурачок - опозоришься".

    Самый простой и красивый код - это тот который ты написал сам и понимаешь, как он работает. И сможешь в случае чего исправить. А не побежишь снова на Хабр, "мне тут пацаны дали красивое, а можно чтобы оно ещё и работало?"
    Ответ написан
    2 комментария
  • Что лучше использовать для связей в бд?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну разумеется, что в общем случае через SQL-запросы. Они для того и придуманы.
    Но есть нюансы, иногда связанные данные приходится доставать другими методами.
    Например, чтобы не делать 500 отдельных запросов, берутся id нужных записей и выбираются одним запросом через where in()

    Кстати, лучше всё-тиаки разделить код на модели и контроллеры. SQL убрать в модели, а в контроллерах оставить только вот это вот if ($pools) {
    Ответ написан
  • Deprecated: Implicit conversion from float to int loses precision in что не так?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Знаю, что надо как-то подставить (int) intval () floor() или round() на худой конец, но как?


    Предлагаю сразу два варианта
    1. разбить вызов imagecopy на строки, чтобы каждый операнд был на своей строке, включая и арифметические. ну то есть
    imagecopy (
    $img,
     $font,
     $x
     - 
    $shift,
    $y
    ...

    Так сразу будет видно, на какой строчке флот окопался.
    2. скопировать строчку, вместо imagecopy написать var_dump и заменить все минусы на запятые, с той же целью
    Ответ написан
  • Почему не работает Cron?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Почему не работает Cron?

    Наверное, вместо бессмысленного /dev/null надо указать путь к файлу, в котором появится ответ на этот вопрос?
    Ответ написан
    Комментировать
  • Положительно ли скажется на производительности перевод бд на utf8mb4 и удаление из after_connect_d7.php соответствующих директив?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Нет, неверно.

    character-set-server и collation-server вообще ни на что не влияют. А только задают умолчания, если при создании БД и таблиц ленивый программист не указал кодировку. Поэтому трогать их нет смысла вообще.

    Добавлять utf8mb4 в соединение также бессмысленно, если сами данные в utf8. Расширенные символы она всё равно сохранить не сможет.
    И наоборот - если таблицы в utf8mb4, то указывать её при соединении надо в обязательном порядке. Не потому что вдруг "конвертация на лету" а потому что если соединение будет utf8, то расширенные символы клиент не получит.

    (В теории, всё может работать нормально и без установки utf8mb4 для соединения, поскольку она в пыхе в какой-то момент начала использоваться по умолчанию, но лучше всё-таки задавать явно)
    Ответ написан
    Комментировать
  • В чем различие между phpMyAdmin, MySQL workbench и Microsoft SQL Server?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Это поговорка "В огороде бузина, а в Киеве дядька" по-айтишному.

    • Microsoft SQL Server - это сервер. То есть программа, которая постоянно висит в памяти и принимает запросы от клиентов. Условно говоря - то, что и называется базой данных. Ну или точнее - СУБД, системой управления базами данных
    • MySQL workbench и phpMyAdmin - это клиенты, то есть программы, которые могут посылать запросы на сервер. Но на Microsoft SQL Server они посылать запросы не могут, потому что работают с другим сервером - MySQL.
    • при этом отличия между MySQL workbench и phpMyAdmin минимальные - обе являются графическими клиентами для СУБД MySQL, позволяя администрировать базу данных, редактировать таблицы в визуальном редакторе и выполнять SQL запросы. Только первое это десктопная программа, а второе - убогий веб-интерфейс, которому для работы нужен веб-сервер. И вместо которого всегда надо использовать нормальный клиент, например DataGrip, ну или хотя бы тот же Workbench.
    Ответ написан
    5 комментариев
  • Как удалить записи входа?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Судя по всему, речь про логин. Вы его написали перед именем хоста через собаку, вот так

    elena@192.168.1.100 (ну или там elena@example.com)

    Загрузите сохранённое соединение и отредактируйте поле с хостом, либо убрав имя с собакой совсем (и тогда удалённый сервер будет каждый раз запрашивать логин), либо вписав другое имя (и тогда в дальнейшем будет подставляться уже оно).

    Ну или как вариант - нажмите Load и потом Delete - чтобы совсем удалить соединение и создать его заново.

    А тот accept, который вы нажали - он про другое. Это отпечаток сервера, который путти сохраняет чтобы отличать подделки. Но когда соединение происходит в первый раз, это окошко тоже показывается.
    Ответ написан
    3 комментария
  • Почему аутентификация возвращает форму авторизации?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Потому что выполняется одно из условий.
    Ответ написан
    Комментировать