• Какое приложение есть для развертывания базы данных в памяти?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Приложение, которое позволяет посмотреть таблицы по дампу, называется СУБД
    Ответ написан
    2 комментария
  • Хранить файлы в базе данных (blob ) или просто в папке storage?

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

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Правильно будет не объединять запросы в один без необходимости.
    Ответ написан
  • Почему не воводятся данные из БД?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Потому что никто никогда не читает документацию.
    В которой написано, например - какой массив возвращает fetchAll(). И можно ли из него получить что-то в виде $user_data['id'].
    А ещё в мануале написано, какая на самом деле функция подойдёт в данном случае.

    Также, там написано, что делает функция fetchColumn(). Которая, во-первых, делает совсем не то что думает автор кода, а во-вторых, даже если бы и делала, то всё равно здесь никаким боком не нужна.

    И я уже не говорю, что в мануале написано темно-красным по светло-красному, что MD5 нельзя использовать для хэширования паролей.
    Ответ написан
    6 комментариев
  • Resource: что из себя представляю потоки в php?

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

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

    Например, когда мы вызываем функцию fopen, то в результате мы получаем ресурс, который в себе содержит дескриптор файла, и далее мы уже можем работать с этим файлом не считывая его полностью в память.
    Как я понимаю, через потоки.. но что это за потоки ? где именно про них почитать ? это какие-то механизмы операционной системы ?

    Вот даже здесь, поскольку fopen работает поверх абстракции, нельзя говорить о едином подходе.
    Если у нас самый простой случай - локальный файл - то РНР оборачивает функции для работы с файлами языка С в свою собственную абстракцию. Но ниже - на уровне этих самых функций языка С - никаких потоков нет. Есть обращение к функциям операционной системы, которые просто позволяют прочитать выбранный кусок файла.
    Тут никаких вопросов нет, всё честно - если мы прочитали из файла 5 килобайт - значит потратили ровно 5 килобайт памяти.
    Но работаем мы с файлом не считывая его весь в память не потому что поток, а потому что так устроена файловая система. А поток этой возможностью только пользуется.

    Если же мы открываем не файл, а URL, то РНР начинает извращаться, пытаясь предоставить те же самые инструменты, какие мы используем для работы с файлами, для доступа к ресурсам совершенно другого типа.
    И здесь возможны нюансы. Я не знаю, как реализован HTTP wrapper, но в теории HTTP позволяет чтение произвольного объема данных через заголовок Range:. То есть РНР вполне может читать и из НТТР кусками, а не целиком.

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

    А упомянутый в вопросе PSR-7 вообще никакого отношения к потокам в РНР не имеет. Это совершенно отдельная реализация принципа потоков, которая не имеет отношения к потокам в РНР.
    Ответ написан
    Комментировать
  • Как сделать так, что бы при пустом запросе в базу выводились ВСЕ значения?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    есть немного замороченный способ, но в целом он требует куда меньше кода
    WHERE (account_id=? OR ? is null)  AND (priority=? OR  ? is null)

    Чтобы его использовать, надо всего лишь передавать каждую переменную в запрос по два раза (и следить, чтобы пустые переменные содержали null).

    Другим вариантом является условная сборка запроса.
    Для этого мы собираем условия и переменные для них в массивы

    $conditions = [];
    $parameters = [];
    if ($account_id)
    {
        $conditions[] = 'account_id=?';
        $parameters[] = $account_id;
    }
    if ($priority )
    {
        $conditions[] = 'priority =?';
        $parameters[] = $priority;
    }

    собираем из условий запрос и выполняем его, привязывая все переменные разом
    тут из сложного будет привязка переменных из массива, но благодаря оператору распаковки аргументов это не так уж и сложно.
    if ($parameters)
    {
        $sql .= " WHERE ".implode(" AND ", $conditions);    
        $stmt = $db->prepare($sql);
        $stmt->bind_param(str_repeat("s", count($parameters)), ...$parameters);
        $stmt->execute();
        $result = $stmt->get_result();
    } else {
        $restult = $db->query($sql);
    }
    Ответ написан
    3 комментария
  • Как вытащить данные из stmt?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    вместо store_result(); надо писать get_result();
    этот метод даст вам привычный ресурс, из которого уже можно получить данные обычным способом
    $stmt = $link->prepare("SELECT * FROM users WHERE id=?");
    $stmt->bind_param('i', $value);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    Ответ написан
    5 комментариев
  • Многоязычный сайт php twig - как лучше реализовать?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если говорить про Twig, а не просто вспоминать былые денёчки, как в пятом классе на коленке переводил мамкин сайт для бижутерии, то для переводов в нем используется фильтр.

    То есть берется готовый или делается кастомный фильтр. Который и занимается поиском соответствия для переводимой фразы. Которая выводится, как {{ message|trans }}

    Вот пример реализации такого фильтра в Симфони

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

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Я же уже отвечал на этот вопрос. С готовым примером кода, где как раз и показано, как вкладывать шаблоны друг в друга.
    А вас настолько подкосила детская проблема с путями к файлам на кривом сайте, что сам ответ вы, похоже, даже не прочитали. Зачем было спрашивать?
    Ответ написан
  • Как получить значение из многомерного массива php?

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

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

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

    Или, может быть, рука промахнулась, хотели удалить вопрос, а удалился ответ?
    Можно ещё раз попытаться.
    Ответ написан
    1 комментарий
  • Как написать код в php чтобы он определял цвет светофора в конкретное время используя инпуты?

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

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

    Дерзайте.
    Ответ написан
    Комментировать
  • Что конкретно означает #[AllowDynamicProperties] в php ^8.2, 9?

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

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

    class C {
        function __construct(public string $name, public string $value) {}
    }

    то разумеется, это будет работать, поскольку здесь свойства явно объявляются, просто в сокращённой форме
    Ответ написан
    3 комментария
  • Как записать данные из json_decode(file_get_content()) в переменную?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    $peremennaya = json_decode(file_get_contents());
    не благодарите
    Ответ написан
  • Какой самый быстрый способ проверить доступность сайтов?

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

    Грубо, 125М на ноду, 86к секунд в сутках, получается полторы тыщи хостов в секунду.
    Если взять среднее время отклика в пол-секунды, то надо от 700 параллельных процессов.
    А уж кто там крутится - без разницы, тупо курл.
    Ну и диспетчер, который будет всем этим управлять.

    Хотя вру. какие пол-секунды. Мы ж доступность проверяем, то есть какая-то часть будет упираться в таймаут => процессов сильно за тыщу. Боюсь, вдс лопнет.

    В общем, ответ как обычно - наймите специалиста/сервис
    Ответ написан
    24 комментария
  • В чём ошибка подключения к безе по PDO?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ошибку указывает сама PDO.
    Для этого в настройках надо указать PDO::ERRMODE_EXCEPTION - это уже сделано.
    После этого, в случае, если выполнение запроса завершится ошибкой, РНР об этом сообщит.
    Надо только, опять же, не забыть включить отображение (на домашнем компьютере) или логирование (на боевом сервере) ошибок РНР.

    Если же РНР никаких ошибок не выводит, то их и нет.
    Ответ написан
    4 комментария
  • Что нужно отправить на сервер, чтобы php понял это, как null?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Вопрос неверный. В стиле анекдота "у таракана уши в ногах".
    Разумеется, сервер всё прекрасно видит.
    чтобы РНР принял null, надо отправить на сервер null. Удивительно, но факт.
    var_dump(json_decode('{ 
        "name": ["i", "b"], 
        "val": [null]
    }',1));


    А вот что там делает код на этом сервере - никто не знает.
    И обращаться надо к автору кода. А не в Спортлото

    Скорее всего там либо array_filter, либо isset/empty($array['val']);
    Ответ написан
    4 комментария
  • Как обработать запрос с формы на сервере?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для этого очень давно придумали https://en.wikipedia.org/wiki/Common_Gateway_Interface
    Фактически это тот же самый cli но на стероидах: перед тем как вызвать бинарник и передать ему на stdin строку с закодированным постом, надо установить несколько обязательных переменных окружения

    В составе РНР до сих пор поставляется бинарник php-cgi, который сам всё раскодирует, а так же, в качестве бонуса, сформирует все нужные заголовки ответа.

    Пара ссылок:
    https://stackoverflow.com/questions/4030147/how-to...
    https://www.oreilly.com/openbook/cgi/ch04_02.html
    Ответ написан
    Комментировать
  • Как получить список таблиц и полей без индекса (mysql), по которым происходит выбор?

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

    Сидеть разбирать вручную каждый запрос через explain - именно так это и делается.
    Потому что само по себе механические впиливание индекса не решает вообще ничего.
    Оптимизация запроса - это далеко совсем не только "создать индекс на поле, по которому идёт выборка"
    Потому что этот индекс может не сработать
    Потому что может быть нужен совсем другой индекс.
    Потому что избыточные индексы могу наоборот замедлить приложение.
    Ответ написан
    Комментировать