Задать вопрос
  • Не приходят письма на почту, что делать?

    @Siverius
    Смех, улыбки, объятия и признания!
    Этого не изведать ей.
    Одинокая открывающая фигурная скобка...
    Ответ написан
    Комментировать
  • 404 ошибка nginx wordpress?

    gedev
    @gedev
    сисадмин-энтузиаст
    Поменяйте корневой локейшн, из-за него у вас не происходит роутинга запросов в CMS. Все запросы должны перенаправляться на index.php.
    location / {
        try_files $uri $uri/ =404 /index.php?$args;
    }
    Ответ написан
    Комментировать
  • Вопрос про модели и репозиторий php?

    @tukreb
    На ваш вопрос, если полностью разжёванный ответ:
    https://elisdn.ru/blog/104/domain-entities-modelling

    Да и вообще советую полистать там сайт, очень много подробной информации с отличными примерами.
    Ответ написан
    Комментировать
  • Как запустить бэк локально?

    @Drno
    Виртуальная машина с линукс. Той же ubuntu
    Далее несколько команд в консоли)
    Ответ написан
    7 комментариев
  • Как получить вывод команды с терминала в переменную?

    @q2digger
    никого не трогаю, починяю примус
    типа такого?

    [dmitryg@mos-linux-prn-01 ~]$ export AAA=$(ls -la | wc -l)
    [dmitryg@mos-linux-prn-01 ~]$ echo $AAA
    7


    Отредактированно:
    Соррян, я не углядел тэг про C++ , поэтому ответил с позиции обычного линуксоида ;)
    Ответ написан
    Комментировать
  • Правильно ли реализован класс для работы с базой данных по принципу SOLID?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Во-первых, это никакой не DatabaseManager , а CRUDManager. Работа с БД далеко не ограничивается этими 4 примитивными функциями.

    Отсюда мы делаем логичный вывод, что соединение с БД никаким местом не должно создаваться в конструкторе менеджера крудов. А должно точно так же передаваться в него в качестве зависимости. Это может быть либо ванильная ПДО, либо инстанс реального MySQLDatabase (но поскольку мы пока не знаем, как он должен выглядеть, то лучше остановиться на PDO).

    Сам по себе DatabaseManager выглядит избыточным. Непонятно, зачем он нужен, если любой потребитель DatabaseManager-а может просто написать
    public function __construct(CRUDInterface $crud) {
    }

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

    В-четвёртых, хоть это и не относится напрямую к теме SOLID, но для меня является очень важным: собственно, реализация методов CRUD-а. Что в них передаётся? Откуда берутся названия таблиц, полей? Передаются в параметрах методов? Это прямая дорога к SQL инъекции, не говоря уже о нарушении инкапсуляции. Поэтому, отвечая на вопрос "Как вы реализуете работу с базой данных", лично я всё больше в последнее время от развесистых ORM-ов склоняюсь к простым TableGateway-ам. Да, кода писать больше, но он строже и понятнее. И не встаёт колом в нестандартных ситуациях. Тем более что приведённый пример кода как раз очень и похож на этот паттерн. То есть
    abstract class MysqlTableGateway implements CrudInterface
    {
        protected $db;
        protected $table;
        protected $fields;
        protected $primary = 'id';
    
        public function __construct(\PDO $db)
        {
            $this->db = $db;
        }
        public function read($id): ?array
        {
            $stmt = $this->db->prepare("SELECT * FROM `$this->table` WHERE `$this->primary`=?");
            $stmt->execute([$id]);
            return $stmt->fetch();
        }
         // ну и так далее
    }

    И дальше уже классы по работе с отдельными табличками наследовать от него,
    final class UserGateway extends MysqlTableGateway {
        protected $table = 'users';
        protected $fields = ['email', 'password','phone'];
    }

    Соответственно, если мы захотим перейти с мускуля на какой-нибудь редис с джейсоном внутре, то надо будет создать новый абстрактный класс с тем же интерфейсом, и от него отнаследовать реализации. Соответственно, в интерфейсе надо нормально прописать входные и выходные параметры:
    interface CRUDInterface {
        public function create(array $data):int;
        public function read(int $id):?array;
        public function update(array $data);
        public function delete(int $id);
    }

    Другое дело, что в реальности такой шалтай-болтай будет сделать довольно сложно, поскольку классы для работы с отдельными таблицами будут расширяться запросами, специфичными для данной таблицы - то есть все их придется дописывать во все драйверы. То есть в реальности с D будут проблемы. Но чисто с теоретической точки зрения примерно вот так оно будет выглядеть.
    Ответ написан
    4 комментария
  • FTP не загружает файл на сервер, что делать?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Есть такая легаси штука как transfer mode. По умолчанию он может быть ascii и для бинарных файлов может быть какая-то фигня после передачи. Лучше сразу после подключения к серверу включить binary mode. На всякий случай.

    Вообще подключись консолью и посмотри размер файла.
    Ответ написан
    1 комментарий
  • Как одновременно запустить 1500 ботов, выполняющих http запросы?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Если с PHP, то я бы делал это в Swoole: там и свои таблицы-в-памяти, и корутины, чтобы «сон» не тормозил остальных, — и вообще полезный опыт.

    P.S. не надо заниматься спамом, накрутками и прочим абьюзерством!
    Ответ написан
    2 комментария
  • Получить NaN в результате деления на ноль, а не исключение и прерывание скрипта?

    Adamos
    @Adamos
    Вам же говорит английским по белому, что выброшено не перехваченное исключение.
    Перехватывайте и присваивайте, что хотите.
    Ответ написан
    Комментировать
  • Получить NaN в результате деления на ноль, а не исключение и прерывание скрипта?

    metallix
    @metallix
    Backend - developer
    try {
        echo (2 / 0);
    } catch (DivisionByZeroError $e) {
        // тут делаем что хотим
    }
    Ответ написан
    Комментировать
  • Что будет если слишком много ампер в БП?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Этот вопрос поднимался тут бесчисленное число раз.
    Ответ: ничего плохого не будет. 2А - это возможный максимальный для блока ток, т.е. в данном случае можно подключить 8 таких кулеров к 1 такому блоку.

    Аналогия:

    Если мотоцикл может ехать 300км/ч, это не значит, что на нём нельзя ездить 30км/ч по воскресеньям в церковь
    Ответ написан
    Комментировать
  • Как и где практиковать php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    У меня вот такой вопрос, как и где мне практиковать php?
    Как и все выучившие основы - пиши соц. сеть.

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

    DevMan
    @DevMan
    вот прямо у себя на компе.
    не могу написать – это ни о чем.
    есть конкретные затыки. их и нужно разбирать.

    выучив теорию езды на велосипеде невозможно на нем поехать пока не поедешь реально и несколько раз не упадешь.
    тут точно так же: знания закрепляются практикой, а не учебой.
    Ответ написан
    Комментировать
  • Как реализовать корректную систему удаления комментария?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    для того чтобы удалить конкретный комментарий, нужно передавать его id, ну и тогда запрос будет:
    DELETE FROM `comments` 
    WHERE `user_id` = :user_id 
    and `id` = :comment_id

    Кроме того, в куках держать айди пользователя нельзя (я спокойно могу напихать в свои куки любой айди и рулить всеми доступами рандомного пользователя). Для этого есть сессии. Так же, для удаления комментариев лучше использовать специальное поле, отвечающее за статус комментария, меняя его на (условно) "удален".

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

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Есть такой специальный символ в PHP (и не только!), который реализует операцию сложения. Называется "плюс", выглядит следующим образом: +.

    Если вы хотите вывести итог работы цикла, то делать это нужно за пределами этого самого цикла.

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

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    1. Нужно реализовать механизм аутентификации пользователя, чтобы вы могли быть уверены, что запрос поступает от пользователя с ID X. Это не обязательно должен быть логин и пароль, но какой-то механизм обязательно должен быть.
    2. У комментария должно быть поле "автор", в котором будет храниться ID пользователя.
    3. В коде редактирования нужно сделать проверку на совпадение ID автора с ID пользователя.


    В качестве альтернативы ID пользователя может быть IP, но это гораздо менее надёжная проверка.
    Ответ написан
    Комментировать
  • Пишу тг бота. Почему INSERT INTO дропает ошибку?

    @Redeve
    Веб-макаке не хватит и 640гБ
    INSERT IGNORE INTO product (user_id, user_name) VALUES (?, ?)
          ^

    Пропустили OR.
    INSERT OR IGNORE product ...
    https://www.sqlite.org/lang_insert.html
    Ответ написан
    Комментировать
  • PHP не создаёт запись MySQL, ошибки не выводит, что делать?

    SagePtr
    @SagePtr
    Еда - это святое
    Ответ написан
    Комментировать
  • Маленький но производительный ноутбук?

    yakovlev_13
    @yakovlev_13
    Шаманство, экзорцизм и некромантия.
    в такой ценовой категории только искать старые топ модели, добивать в них оперативы и смотреть возможность вбить туда проц посильнее. но вот 13" это хз.
    за (15000 грн)23к рублей ты особо дельного сейчас не найдёшь.
    Согласен с Владислав Лысков, если брать новое за такие деньги это сапёр играть / блокнот смотреть
    Ответ написан
    Комментировать
  • Как проскролить страницу после того как произошел hedaer(location)?

    Adamos
    @Adamos
    <a id="comment-12345">Тот коммент, до которого надо проскроллить</a>
    
    Location: /#comment-12345

    Или полностью на фронте - при отправке ставить куку, а при входе на страницу ее проверять и скроллить, если она установлена.
    Ответ написан
    3 комментария