Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
  • Как организовать обработку исключений set_exception_handler() для их красивого вывода пользователю?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    "красиво выводить пользователю" надо не исключения, а абстрактный текст "что-то пошло не так". А само исключение должно логироваться. А так же выводиться для программиста в режиме разработки.
    Если сообщение надо вывести пользоваелю, то это не исключение. Вот пример нормального (хотя и с минимальной функциональностью PHP exception handler-a

    Другое дело что код здесь какой-то странный, и непонятно, как он вообще работает. Почему this? Это вызов внутри метода класса? Что за странная идея устанавливать обработчик ошибок внутри класса? Почему вообще обработчик ошибок устанавливается в каком-то пользовательском классе? А если будет класс Товар - у него тоже будет свой глобальный обработчик ошибок? Зачем бросать исключение если данные введены неверно?
    А, главное, какой смысл пихать ошибку в переменную? Что с ней потом делать? Солить на зиму? И да, как правильно написал OnlyMyQuestion, это не будет работать.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    как проверить массив на наличие в нем элементов

    Не поверишь, if ($feedback)

    <?php if ($feedback): ?>
                <?php foreach($feedback as $post): setup_postdata($post) ?>
                <?php endforeach ?>
        <?php else ?>
    No reviews found
        <?php endif ?>
    Ответ написан
    Комментировать
  • Запрос PHP+Mysql?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если делать по-человечески
    $stmt->$mysql->prepare("UPDATE applications SET closed=1, close_user=? WHERE id = ?");
    $stmt->bind_param("ss",$close_user,$id);
    $stmt->execute();
    Ответ написан
    Комментировать
  • Скачивание файлов со стороннего сервера, как правильно организовать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    order deny,allow
    deny from all
    allow from <your ip>


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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Берешь дубинку и бьешь по почкам, спрашивая "являешься датой или нет???"

    Если же тебя интересует в плане программирования, то сначала ты сам должен определиться, что считается датой.
    12.05 - дата или цена? 1574939397 - дата? 31 - дата? февраль - дата? february - дата? А какая? 01.11.01 - дата? А какая?
    Ответ написан
    1 комментарий
  • Нужно ли делать кеширование запросов и как?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я думаю здесь подмена понятий. Автор пишет "кэширует ли БД запросы", а имеет в виду "может ли в принципе эта страшная и непонятная громадина которая называется базой данных в принципе хоть когда-нибудь рабтотать быстро?"
    Все, разумеется, кидаются отвечать на первый вопрос.
    А на самом деле надо отвечать на второй. Да, почти всегда БД работает гораздо быстрее чем ты можешь вообразить и ничего кэшировать не нужно. Если вдруг стало работать медленно... впрочем, об этом ниже.

    Нужно ли делать кеширование запросов
    Вот в такой формулировке, взятой с потолка, "а не закэшировать ли мне запросы к базе данных*" - Нет, не нужно.

    и как?
    Очень просто.
    Три простых шага:
    1. Понять, устраивает ли тебя производительность приложения. Если устраивает, то все оставить как есть.
    2. Если не устраивает, освоить профайлинг. Если это слово не упоминается в вопросе про производительность или кэширование, то вопрос можно сразу удалять. потому что он заведомо взят с потолка и не имеет смысла. По сути, профайлинг - это замер скорости выполнения отдельных участков кода для поиска узких мест - т.е. таких участков кода, которые тормозят всю программу. Это можно делать и вручную, и с помощью различных готовых инструментов. Только по результатам профайлинга, который показал конкретную причину тормозов, то самое узкое место (его еще называют bottleneck, "бутылочное горлышко"), можно приступать к оптимизации. Не кэшированию!
    3. Если профайлинг показал, что проблема в конкретном запросе к БД, приступаем к его оптимизации. Чаще всего достаточно добавить индекс или донастроить сервер.
    4. Только если все другие способы не помогли - занимаемся кэшированием. Но перед этим сначала решаем Вторую Важнейшую Проблему Информационных Технологий - инвалидации кэша. Поскольку закэшировать - это ерунда, каждый дурак сможет. Самая главная проблема не в том, как данные положить в кэш, а как и когда их оттуда удалять.
    Ответ написан
    Комментировать
  • Стоит ли хранить зашифрованные данные пользователя в Local/Session Storage на клиенте?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это просто идеальная иллюстрация к известному высказыванию Дональда Кнута "Преждевременная оптимизация - корень всех зол".

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

    После этого начинаем проблему решать.
    Значит, чтобы сэкономить время на запросе к базе, которая обычно лежит локально и обычное обращение занимает микросекуны, мы решаем закэшировать данные на клиенте. Который может быть в тысяче километров, а пинг в сотни миллисекунд - не редкость. И вот мы решаем что клиент будет с каждым запросом отправлять массив данных. Причем таких данных, которые на сервере и так. есть. Гениально!

    Стоит ли так делать и почему;
    не стоит потому что не надо высасывать проблемы из пальца.
    Какой будет прирост производительности
    Отрицательный
    Как Вы решаете подобные вопросы.
    МЫ ИХ НЕ РЕШАЕМ.
    Мы решаем реальные проблемы, объективно существующие.
    А воображаемые проблемы высосанные из пальца решать не следует.
    Ответ написан
    Комментировать
  • Где вы храните запросы к базе в коде или используйте хранимые процедуры?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Просто для информации, хранимые проценуры не используются вообще нигде, кроме, наверное, хардкорного энтерпрайза.
    Тем более непонятно, как процедуры решают проблему переделывания кода.

    Если отвечтаь на вопрос буквально, то

    1. Для большинства простых операций с БД запросы вообще не пишутся, пишутся обращения к ORM. Например в вместо
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
    $stmt->execute([$id]);
    $user = $stmt->fetch();

    Пишется

    $user = $em->getRepository(User::class)->find($id);


    2. Сложные запросы с фильтрами лежат в специальных классах, которые называются репозиториями.
    Ответ написан
    7 комментариев
  • Как обойтись без параметра для parent?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Всем изучающим ООП надо метровыми буквами написать во всю стену

    НАСЛЕДУЮТСЯ КЛАССЫ, А НЕ ОБЪЕКТЫ
    НАСЛЕДУЮТСЯ КЛАССЫ, А НЕ ОБЪЕКТЫ
    НАСЛЕДУЮТСЯ КЛАССЫ, А НЕ ОБЪЕКТЫ

    И медитировать на них каждый день по часу.
    Другими словами -

    НАСЛЕДУЕТСЯ СТРУКТУРА, А НЕ СОСТОЯНИЕ

    чтобы не приходили в голову глупости типа
    мне нужно чтобы $this->test была создана в родителе и уже была в потомке


    Объекты родителя и наследника вообще никак не связаны. Объект родительского класса может быть создан, а может быть и не создан - это никак не отражается на поведении потомка. Инстанс потомка - совершенно самостоятельный объект, который не наследует ничего из состояния родителя.

    Как тебе уже сказали, ты что-то делаешь не так.
    Ответ написан
  • Куда указывает ссылка?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это совершенно бессмысленная ссылка.
    она указывает на каталог выше корня, чего не бывает.

    "выше папка текущего файла" - это ../include.php

    Читаем основый путей в файловой системе: phpfaq.ru/newbie/paths
    Ответ написан
    Комментировать
  • MySQL уникальные значения по одному полю, как?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну если по простому, то
    select * from images where position in (select min(position) from tests group by product_id);
    select * from images where position not in (select min(position) from tests group by product_id);
    Ответ написан
    6 комментариев
  • Как проверить что в строке нет символов кроме пробелов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вообще, конечно, trim() не соответствует буквально поставленной задаче, но скорее всего соответствует невысказанным желаниям автора, которому не нужны и символы перевода строк.

    А вот нестрогая проверка вообще ничему не отвечает. Не давая ввести вполне себе не пробельный символ 0.

    Так что корректный вариант (для всех пробельных символов), пожалуй, будет таким
    if (!strlen(trim($string))) {
        die;
    }

    а буквальный (только пробелы) таким
    if (!strlen(str_replace(" ", "", $string))) {
        die;
    }
    Ответ написан
  • Как скопировать текст с переносом строки из textarea?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Аффтару нужен word wrap, он только сказать не умеет толком.

    Разумеется, тут нету никакого символа переноса стороки, а есть автоматический перенос строк.
    Если так уж хочется заморочиться c текстарией, то welcome to hell

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нет.
    Ответ написан
    Комментировать
  • Почему date_parse_from_format не подставляет 0 в дату?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это какая-то дурацкая и бессмысленная функция. Не надо её вообще использовать.
    $date  = DateTime::createFromFormat('d-m-Y',date('d-m-Y'));
    $day   = $date->format('d');
    Ответ написан
    1 комментарий
  • Как правильно хранить в Базе данных Разные названия одного фильма, тип фильма?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Речь идет только о переводах? Если да, то таблица с 4 полями: иза фильма, ид языка, название, флаг оригинальности.

    Статус я бы хранил в отдельной таблице. енум хорош для случаев когда заранее точно известен набор вариантов. Здесь наверняка значения будут добавляться и лучше делать это через обновление данных, а не структуры
    Ответ написан
  • Хорошо ли хранить serialize в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ни в коем случае.
    Твоя база данных не зря названа реляционной, то есть связанной. Информация хранится в связанных между собой таблицах. Это позволяет получать нужную информацию одним запростом и обрабатывать миллионы срок без потери производительности. Что в миллион раз важнее лени "создавать дополнительную таблицу"

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

    Сериализованные данные стоит хранить в бд только в очень крайнем случае.
    На данном этапе вообще забудь про такую возможность и учись работать с БД правильно.
    Ответ написан
    9 комментариев
  • Как мне php сайт конвертировать в android приложение (apk file)?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.
    Ответ написан
    Комментировать