Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
  • Какая вставка в бд будет быстрее? Задать в insert значения к столбцам либо использовать default?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Господи, опять оптимизируем несуществующие проблемы

    Десятки тысяч в минуту это вообще не о чём.
    На моей рабочей пукалке с дешевым ХДД 10 тысяч вставляются за пол-секунды. Обычными подготовленными запросами.
    На нормальном сервере с SSD будут сотни тысяч. в секунду. про минуты вообще речи не идет.

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

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

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

    Я даже сосчитать не могу, по скольким параметрам этот вопрос дурацкий, начиная от юридического термина "присвоить общедоступный код(!)" и заканчивая тем фактом, что код - не симфония Пушкина "Приплыли", которую будут переиздавать 20 лет. Уже через пол-года ты не сможешь без стыда смотреть на свое творение, и чтобы не сгореть со стыда, будешь его переделывать. Через год он уже не будет работать на новй версии пхп и вообще станет никому не нужен. А как его добрабатывать - ты его уже защитил? Если переписывать - это уже другой код будет.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну и чтобы был буквальный ответ,
    $str = 'https://toster.ru/1234/4321/';
    preg_match('!.*/(.*?)/(.*?)/$!', $str, $matches);
    list (, $first, $second) = $matches;
    Ответ написан
    Комментировать
  • Какая логика обфускации php кода под доменное имя?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Каждый начинающий программист воображает, будто его гениальный код кому-то нужен, а пару десятков человеко-часов - нереаьными трудозатратами.
    Ответ написан
    1 комментарий
  • Как удалить массив с одинаковыми значениями в многомерном массиве PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В цикле
    Любые операции с массивами делаются вцикле.
    Ответ написан
    2 комментария
  • Правильно ли создаю сам себя?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не трогал бы ты эту статику.
    Целее будешь
    Ответ написан
    22 комментария
  • Как быстро разобраться?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. C <? ?> все понятно, вообще нигде не используешь
    2. C <?= ?> все понятно, используешь для вывода
    3. C <?php ?> все понятно, используешь чобы переключиться из режима HTML в режим PHP.Открыть там где начинается пхп код. Закрыть там где начинается хтмл код
    Ответ написан
    3 комментария
  • Как соединить php и vue?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    через rest api
    целесообразно
    Ответ написан
    Комментировать
  • Почему не срабатывает fetchRow?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    потому что в mysqli нет функции fetchRow
    Ответ написан
    Комментировать
  • Как установить mod_php на CENTOS/RHEL 8 вместо php_fpm?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Анекдот про хирурга слышал? Вот чувак тоже вещал, что у него "специфика". Пока ему кое-что не откочерыжили. А оказалось, что специфика совсем другая.

    Рассказывай, что за специфика и тебе расскажут, как сделать правильно
    У меня есть предположение, но мне даже неудобно его озвучивать

    Также если поискав в Интернете, то видел что когда работает Apache + PHP_FPM он работает существеннее медленее, чем Apache + MOD_PHP

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Господи, implode-то тут зачем?
    Тебе нужен первый элемент массива.

    count(*) ВСЕГДА возвращает значение, никакого нулл тут никогда не будет

    return $get_pay_tr[0];

    И все
    Ответ написан
    Комментировать
  • Зачем в catch делать throw?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хороший вопрос.

    1. В catch только одно проверяем конкретное исключение, которое мы ждём и знаем как обработать.
    Например, при вставке записи в БД мы можем обработать ошибку уникального ключа, сообщив пользователю, что такой юзернейм уже занят.
    Но если ошибка не такая, какую мы ожидали, то она должна быть обработана стандартным способом. Для этого её надо перевыборосить.

    2. Если в принципе надо сначала что-то сделать в случае ошибки.
    Например, как в предыдущем ответе, залогировать
    Или - более распространенный случай - откатить транзакцию.
    После этого исключение надо перевыбросить, чтобы ошибка обработалась обычным способом

    3. Довольно экзотический случай. Исключение содержит стек вызовов, в котором. помимо прочего, лежат все параметры функций. Иногда эти параметры могут быть довольно чувствительными к раскрытию - например, параметрами конструктора класса для соединения с БД являются параметры подключения к БД. Чтобы очистить стек вызовов, надо бросить новое исключение. Но перевыбрасывать существующее нельзя - недо бросить именно совсем новое исключение, передав в него сообщение об ошибке из старого

    Конкретный пример в вопросе - это скорее всего попытка реализовать п.3, только неудачная.
    Ответ написан
    Комментировать
  • Какой язык программирования для Back-end производительнее?

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

    Ничего в мире не меняется, Моцарту тоже приходилось отвечать на подобные вопросы.
    Ответ написан
    3 комментария
  • Warning ошибка в запросе?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Перед $db = new mysqli($localhost, $user, $passwd, $database); дописать
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    после этого база сама скажет в чем проблема
    Ответ написан
    Комментировать
  • Как исправить ошибку: Too many connections в MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Чаще всего причиной является либо говнокод, либо пконнект.

    При переходе с mysql api на mysqli многие не учитывают, что каждое новое обращение к mysqli connect, в отличие от mysql connect, создает новое подключение. И таким обраом из одного и того же скрипта создается множество подключений.

    Ну и обязательный карго культ - как только похапист узнает про pconnect, он тут же тащит его к себе в норку, и огребает те самые too many connections.

    И это при том, что при 150 одновременных коннектах можно держать 50000 онлайн пользователей спокойно. Всего-то надо выкинуть пконнект, создавать соединение строго 1 раз и оптимизировать запросы.
    Ответ написан
  • Как правильно привести значения в массиве к типу int?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В общем, если нужно отсеять нулевые значения, то
    $filter = array_filter($filter, 'intval');
    если оставить, то
    $filter = array_map('intval', $filter);

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Сделай простую ловушку.
    К примеру, поле для имени назови email, а для емейла - name.
    Ну и проверяй наличие собаки в емейле и отсутствие в имени .
    Ответ написан
  • Как правильно переписать функции php 5 на php 7?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Менять тут надо не тоьлко код, но и подход.
    потому что большая часть старого кода - это бессмысленные телодвижения, которые не приводят ни к какому результату.
    Повторить тоже самое в пхп7 не удастся.

    вместо функции connect надо написать вот такой код
    $host = '127.0.0.1';
    $db   = 'test';
    $user = 'root';
    $pass = '';
    $charset = 'utf8mb4';
    
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    try {
        $mysqli = mysqli_connect($host, $user, $pass, $db);
        mysqli_set_charset($mysqli, $charset);
    } catch (\mysqli_sql_exception $e) {
         throw new \mysqli_sql_exception($e->getMessage(), $e->getCode());
    }
    unset($host, $db, $user, $pass, $charset);

    везде где раньше вызывалась эта функция, ее надо будет убрать
    вместо функции close() не нужно ничего, просто убрать все вызовы из кода.

    Вместо последнего блока кода
    $result = mysqli_query($mysqli, "SELECT * FROM admin WHERE uid='1'");
    $row = mysqli_fetch_assoc($result);
    $guid_agent = $row_admin['guid_agent'];
    $agent = $row_admin['agent'];

    Но самое главное - это код, где используются переменные в запросах.
    Их переписать так
    $sql = "SELECT * FROM users WHERE id=?"; // знак вопроса вместо переменной
    $stmt = $conn->query($sql); 
    $stmt->bind_param("s", $id); // переменная идет сюда
    $Stmt->execute();
    $result = $stmt->get_result(); // получаем result
    $user = $result->fetch_assoc(); // получаем массив
    Ответ написан
    5 комментариев
  • Как подключится к БД?

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

    Но раз уж спрошено, то правильно подключаться вот так:
    $host = 'booktst.beget.tech';
    $db   = '';
    $user = '';
    $pass = '';
    $charset = 'utf8mb4';
    
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    try {
        $mysqli = mysqli_connect($host, $user, $pass, $db);
        mysqli_set_charset($mysqli, $charset);
    } catch (\mysqli_sql_exception $e) {
         throw new \mysqli_sql_exception($e->getMessage(), $e->getCode());
    }
    unset($host, $db, $user, $pass, $charset); // we don't need them anymore


    Такой вариант подключения снимет сразу целую кучу проблем:
    • пропадут все проблемы связанные с кодировками (сохранятся вопросы вместо русских букв, не работает json_encode()...)
    • пропадут бесполезные сообщения об ошибках как mysqli_fetch_assoc() expects parameter..., место них будет выдаваться нормальное объяснение прочему запрос упал
    • сайт не будет позориться светя ошибками на весь интернет если упала база данных
    Ответ написан
  • Как оставить только текст внутри нужных полей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На перечисленных языках не знаю, я бы такую здачу решал на пхп
    preg_match_all("!define\( '(.*?)', '(.*?)' \)!", $data, $m);
    foreach ($m[2] as $i => $value) {
        echo $value;
        echo (($i + 1) % 4) ? ";" : "\n";
    }
    Ответ написан
    Комментировать