• Как защитить SPA от парсинга?

    DevMan
    @DevMan
    так платное подразумевает оплату.
    оплата подразумевает авторизацию/аутентификацию.

    какая вам разница каким способом пользователь получает данные за которые заплатил?
    а если вы платные данные раздаете всем, то вы ССЗБ.

    у вас классическое непонимание предметной области. не только техническое, но и практическое.
    это не укол, это просто факт.
    Ответ написан
    8 комментариев
  • PHP: Почему 'mb_convert_encoding' не конвертирует простую строку?

    @alexalexes
    $str = 'Привет 2019 Мир!'; // написано в той кодировке, в которой сохранен файл (хрустальный шар говорит, что utf-8)
    $str = mb_convert_encoding( $str, 'windows-1251', mb_detect_encoding( $str ) ); // конвертируем в cp1251
    header('Content-Type: text/html; charset=windows-1251'); // Откуда трабла с кодировкой? - не соответствие сообщаемой кодировки в http-заголовке от сервера, с выводимым контентом от сервера. Исправляется явным указанием заголовка
    var_dump( $str ); // выводим в той кодировке, что выводит заголовок charset сервера в браузер (хрустальный шар говорит, что до указания header() было charset=utf-8)
    Ответ написан
    2 комментария
  • PHP: Почему 'mb_convert_encoding' не конвертирует простую строку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    - var_dump( $str );
    + echo bin2hex($str);
    Получаем cf f0 e8 e2 e5 f2 20 32 30 31 39 20 cc e8 f0 21
    Открываем таблицу cp1251 и смотрим
    cf - П, f0 - р, e8 - и, e2 - в, e5 - е, f2 - т, 20 - пробел, 32 - 2, 30 - 0, 31 - 1, 39 - 9, 20 - пробел, cc - М, e8 - и, f0 - р, 21 - !
    Привет 2019 Мир!
    Всё вполне сконвертировалось.
    Ответ написан
    Комментировать
  • Почему форма обратной связи php отправляет часть кода?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) Тело хтмл письма, как и любой подвид иксмл, должно начинаться с оперделяющих тегов, у вас же тупо табличка отправляется.
    2) Заниматься мастурбациейфигней с отправкой через mail() в 21 веке как минимум стыдно, как максимум чревато проблемами при отладке и смене функциональности, не говоря уже о том что отправка хтмл контента и приложений становится задачей со звездочкой.
    3) Все легко решается переходом на нормальную библиотеку отправки почты, пхпмэйлер/свифтмэйлер и их многочисленные аналоги.
    Ответ написан
    3 комментария
  • Как ОТВЕТИТЬ на письмо через PHPMailer?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Для этого в письмо-ответ надо добавить заголовок In-Reply-To с указанием значения заголовка Message-Id оригинального письма. В заголовок References ответа надо скопировать все ID из заголовка References оригинала и дописать после пробела значение заголовка Message-Id оригинального письма.

    В вашем коде я не вижу как вы получаете $message_id, который должен быть вытащен из оригинального письма, соответственно скорее всего отсутствие указание на изначальное письмо не позволяет определить к какой цепочке относится ответ.
    Ответ написан
  • Стоит ли хранить изображения base64 в БД?

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    Стоит ли хранить изображения base64 в БД?

    нет

    composer require symfony/dom-crawler

    use Symfony\Component\DomCrawler\Crawler;
    use Illuminate\Support\Facades\Storage;
    use Illuminate\Http\File;
    
    $desc = $request->input('some_html'); // POST with html
    $dom_desc = new Crawler($desc);
    $images = $dom_desc->filterXPath('//img')->extract(array('src')); // extract images
     
    foreach ($images as $key => $value) {
        if (strpos($value, 'base64') !== false) { // leave alone not base64 images
            $data = explode(',', $value); // split image mime and body
            $tmp_file = tempnam('/tmp', 'items'); // create tmp file path
            file_put_contents($tmp_file, base64_decode($data[1])); // fill temp file with image
            $path = Storage::putFile('public/items', new File($tmp_file)); // put file to final destination
            $desc = str_replace($value, $path, $desc); // replace src of converted file to fs path
            unlink($tmp_file); // delete temp file
        }
    }
    Ответ написан
    1 комментарий
  • В чем нарушение синтаксиса в данном запросе? Как его исправить?

    @Akina
    Сетевой и системный админ, SQL-программист.
    дана вот такая задача
    "Добавить отзыв с рейтингом 5 на жилье, находящиеся по адресу "11218, Friel Place, New York", от имени "George Clooney""

    Это должно быть вот так:
    INSERT INTO Reviews (user_id, reservation_id, rating)
    SELECT Users.id, Rooms.id, 5
    FROM Users
    CROSS JOIN Rooms
    WHERE users.name = 'George Clooney'
      AND Rooms.address = '11218, Friel Place, New York';

    А за каким рожном тут таблица Reservations, я вообще не понял. Задание про необходимость резервирования этого жилья за этим юзером не говорит ничего - то есть такого резервирования может и не быть.
    Ответ написан
    2 комментария
  • MySQL Command Line закрывается после ввода пароля?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Запустите ярлык на CLI из окна CMD и смотрите сообщения. Больше всего похоже на сбой аутентификации.
    Ответ написан
    2 комментария
  • В чем ошибка SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) $params собственно нужен для биндинга, чтобы не вставлять данные прямо в запрос, так как это чревато инъекциями. По этому дебильный совет "просто поменяй на $stmt->execute();" желательно проигнорировать.

    2) Вместо переменных нужно вставить плейсхолдеры, именованные или безымянные не особо важно. Естественно количество плейсхолдеров должно совпадать с количеством элементов в массиве.

    3) Даже в таком виде как у вас запрос работать не будет, так как строковые переменные в рамках запроса должны быть в кавычках.

    4) WHERE $email что? Вы вообще понимаете что и для чего пишете? Просто переведя на русский "где емэйл" не кажется вам слегка странной конструкцией? Просто загляните в документацию SQL где описывается WHERE.
    Ответ написан
    Комментировать
  • Есть ли смысл перенести Mysql на другой сервер для ускорения сайта?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Нет, смысла нет. Для ускорения работы сайта надо сначала провести исследования проблемы. Для начала однозначно определиться что, где и как именно у вас "медленно открывается". Далее необходимо собрать данные о происходящих процессах - что, где, как и когда работает, а так же какую создает нагрузку на оборудование - процессор, память, сеть, диски и прочее. По результатам данного исследования надо будет найти бутылочное горлышко или несколько и исследовать их более детально и глубоко, чтобы понять как их устранить - программно, аппаратно, организационно и прочее. И вот только после этого уже решать что именно и как именно надо сделать для решения проблемы.
    Ответ написан
    Комментировать
  • Как получить имя переменной из строки?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для этого есть массивы
    $strs = [
        '123' => 'один два три',
        '578' => 'пять семь восемь',
        '015' => 'ноль один пять',
    ];
    if (array_key_exists($digit, $strs)) {
        echo $strs[$digit];
    }
    Ответ написан
    3 комментария
  • Может кто-нибудь посоветовать курс по пентесту?

    @Everything_is_bad
    проверку ты уже провалил, не твое это, займись чем-то другим
    Ответ написан
    7 комментариев
  • Как сравнить 2 массива?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    UPD в соответствии с комментариями

    Самое простое, "решение в лоб"

    function getExcluded(array $users, array $emails): array
    {
        foreach ($users as $key => $user) {
            if (isset($emails[$user['email']])) {
                unset($emails[$user['email']]);
                unset($users[$key]);
                break;
            }
        }
    
        return [
            'emails' => $emails,
            'users' => $users,
        ];
    }


    Единственное, могут быть коллизии если в массиве users будут несколько массивов с одинаковым email
    При необходимости можно генераторы заюзать https://www.php.net/manual/ru/language.generators....
    Ответ написан
    8 комментариев
  • Как получить часть URI, которая идёт после основного домена?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    $_SERVER['REQUEST_URI']
    Поскольку написали много, но ни разу не показали URI запроса.
    Ответ написан
    Комментировать
  • Laravel Request - как работает?

    pickHabr
    @pickHabr
    Костыльных дел мастер
    Потому что у тебя в request1 и в request2 лежит индекс одного и того же объекта https://www.php.net/manual/ru/language.oop5.refere...
    Ответ написан
    24 комментария
  • Функция SUM в sql запросе не работает почему?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Владею: Html, Css, Php, bd msql, сложные запросы SQL
    Рили???

    Ок, на самом деле решение очевидное, и весьма простое. Во втором запросе вы выбираете не столбец, имя которого будет ассоциироваться с ключом в соответствующем массиве (о чем вам и говорит ошибка), а результат агрегирующей функции, которое в массиве будет иметь совершенно другое имя. Что легко проверяется через var_dump($row).

    Решение - добавить алиас для агрегированного поля.
    Ответ написан
    Комментировать
  • Как синхронизовать бд с другой бд на другом сервере?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Автоматически синхронизировать - репликация
    https://dev.mysql.com/doc/refman/8.0/en/replicatio...

    В вашем случае так как запись может быть сделана в любую из баз, и они должны быть в синхроне то нужна master-master репликация. Читайте информацию по теме "mysql master master replication".
    Из минусов - запросы на запись (update, insert, delete) будут работать чуть дольше так как придётся дожидаться синхронизации данных. Из плюсов - всё будет работать из коробки как только настроите репликацию, и всё что записано в одну базу сразу же будет доступно в другой и наоборот.
    Ответ написан
    4 комментария
  • Переход с MD5 на SHA256 что нужно сделать чтобы работало)?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Решил сделать переход с MD5 на SHA256

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

    Vindicar
    @Vindicar
    RTFM!
    Raddzor788,
    Где хранятся все эти значение 1,2,3,4, ведь у моего 'x' нету же звездочки(*х), чтобы собрать столько аргументов.

    Твой x - это несколько разных x. Потому что есть такая вещь как области видимости. Обычно есть область видимости функции (локальная) и глобальная область видимости скрипта. Если функция не видит нужного имени в локальной области - она ищет в глобальной. Если не видит и там - ищет в __builtins__.
    0. По умолчанию есть глобальная область видимости скрипта.
    1. При вызове func(1) создаётся локальная область видимости (скажем, А), в ней создаётся имя x, указывающее на 1.
    2. Отработало условие 1 < 4.
    3. Вызывается func(2). При этом создаётся НОВАЯ локальная область видимости Б (потому что новый вызов функции), в ней создаётся имя x, указывающее на 2.
    4. Отрабатывает условие 2 < 4.
    5. Вызывается func(3). При этом создаётся локальная область видимости В, в ней создаётся имя x, указывающее на 3.
    6. Отрабатывает условие 3 < 4.
    7. Вызывается func(4). При этом создаётся локальная область видимости Г, в ней создаётся имя x, указывающее на 4.
    8. Условие 4 < 4 не отрабатывает. Происходит вызов print(x) - имя x находится в текущей локальной области Г, выводится ассоциированное с ним значение 4. Отрабатывает print(4), происходит возврат из функции, область видимости Г уничтожается.
    9. Происходит вызов print(x) в предыдущем "слое" рекурсии. Текущая локальная область видимости В - в ней имя x связано со значением 3. Отрабатывает print(3), происходит возврат из функции, область видимости В уничтожается.
    10. Происходит вызов print(x) в предыдущем "слое" рекурсии. Текущая локальная область видимости Б - в ней имя x связано со значением 2. Отрабатывает print(2), происходит возврат из функции, область видимости Б уничтожается.
    11. Происходит вызов print(x) в предыдущем "слое" рекурсии. Текущая локальная область видимости А - в ней имя x связано со значением 1. Отрабатывает print(1), происходит возврат из функции, область видимости А уничтожается.
    12. Мы вышли из всех слоёв рекурсии. Мы находимся в теле скрипта и работаем только с глобальной областью видимости.
    Ответ написан
    Комментировать
  • Как решить проблемы с клавиатурой в файловом менеджере far2l в Ubuntu 24.04 в сеансе Wayland?

    unxed
    @unxed Автор вопроса
    Существует несколько способов решения этих проблем:

    1. Вышло обновление, достаточно сделать
    sudo apt update && sudo apt dist-upgrade

    Остальные ответы оставлю для истории.

    2. Оставайтесь на X11

    3. Запускайте far2l с двумя дополнительными параметрами:
    far2l --nodetect=xi --ee

    4. Запустите этот патч:
    sudo perl -pi -e 's/XInputExtension/!InputExtension/g' /usr/lib/far2l/far2l_ttyx.broker

    (использовать параметр --ee всё равно придётся)

    5. Можно взять более свежую версию из Debian:
    mkdir far
    cd far
    wget http://ftp.de.debian.org/debian/pool/main/f/far2l/far2l_2.6.1~beta+ds-1_amd64.deb
    wget http://ftp.de.debian.org/debian/pool/main/f/far2l/far2l-data_2.6.1~beta+ds-1_all.deb
    sudo apt-get install ./*.deb
    apt-cache policy far2l

    Можете использовать тот способ, который вам больше нравится.
    Ответ написан
    1 комментарий