Ответы пользователя по тегу PHP
  • Переподключение PHP к MySQL как правильно организовать?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ловить исключение, если ошибка 2006, то переподключаться и повторять запрос. Можно организовать в своём враппере поверх PDO или mysqli.
    Менее универсальный способ - увеличить таймаут для сессии
    SET session wait_timeout=28800
    SET session interactive_timeout=28800
    Ответ написан
    4 комментария
  • Как получить заголовок Сontent-Disposition?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вам возвращается страница с требованием авторизации. Доступ к файлу возможен только по логину/паролю.
    К тому же, get_headers() полностью скачивает данные и только потом возвращает заголовки.
    Ответ написан
    2 комментария
  • Как отправить файл с данными с одного сервера на другой?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    CURLFile или curl_file_create()
    Ответ написан
    1 комментарий
  • Как изменить кодирование URL ссылок сайта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    %B9 - это код символа № в кодировке Windows-1251.
    Похоже, что имена файлов на диске у вас сохранены именно в ней. Надо перекодировать имена в UTF-8.
    Ответ написан
    Комментировать
  • Почему не отправляет формы в телеграм?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Кажинный раз одно и то же.
    Для начала выберем самый извращённый способ отправки HTTPs-запроса через fopen.
    Затем вместо нормальной обработки ошибки выведем одно слово Error.
    Ну и напоследок будем гадать что бы это слово могло за собой скрывать.

    Перепишите запрос на curl, включите вывод ошибок, выводите полностью пришедший от сервера ответ и не гадайте по одному слову.
    Ответ написан
    Комментировать
  • Ошибка в SQL запросе WHEN THEN как исправить?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Судя по обрывкам кода, первый фрагмент выполняется в цикле.
    Тогда по тексту ошибки видно, что этот цикл ни разу не выполнялся и в переменных пустые строки.
    Ответ написан
  • Вычисления datetime if()?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $now = new DateTimeImmutable();
    var_dump(new DateTimeImmutable('2024-05-20 12:45:53') < $now);
    // bool(true)
    Ответ написан
    1 комментарий
  • Как отсортировать массив по значению?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как уменьшить вес gif с помощью php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    GIF использует lzw-сжатие без потерь. Уменьшить размер файла можно только убрав часть информации, то есть уменьшив разрешение изображения или количество цветов.
    Ответ написан
    1 комментарий
  • Почему не работает подсветка php в vs code?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    На первом скрине не PHP-код, а обычный текст, так как нет открывающего тэга <?php
    Цвет отдельных участков кода определяется цветовой темой, Settings -> Workbench -> Appearance -> Color Theme.
    Ответ написан
    Комментировать
  • Не могу вывести данные из бд по диапазону даты?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Логично.
    2024 - 09 - 01 = 2014
    2024 - 10 - 01 = 2013
    Не изучайте PHP по материалам позапрошлого десятилетия. Пишите нормально, с использованием подготовленных выражений и плейсхолдеров, и будет вам счастье.
    Ответ написан
    3 комментария
  • Почему последовательный вызов работает, а в одну строку нет?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для такой цепочки каждая функция должна возвращать $this.
    По неймингу - префиксы set и get, как правило используются для сеттеров и геттеров, то есть функций, устанавливающих и возвращающих значения свойств экземпляра. Использовать их для других целей, конечно, можно, но крайне не рекомендуется.
    Ответ написан
    1 комментарий
  • Как реализовать подписание оферты на сайте простой электронной подписью?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    N 63-ФЗ от 06.04.2011, ст. 2.2
    Простой электронной подписью является электронная подпись, которая посредством использования кодов, паролей или иных средств подтверждает факт формирования электронной подписи определенным лицом.

    Если ваш клиент регистрируется на сайте, то в качестве ПЭП может служить дополнительный ввод пароля при оформлении договора. Если у клиента есть подтверждённый номер телефона, то код, отправленный через SMS или голосовым информатором.
    Предварительно клиент должен согласиться с договором(-офертой), в котором будут прописаны "правила определения лица, подписывающего электронный документ, по его простой электронной подписи" и "обязанность лица, создающего и (или) использующего ключ простой электронной подписи, соблюдать его конфиденциальность" (то же ФЗ, ст. 9.2).
    Ответ написан
    Комментировать
  • Как написать SQL/DQL запрос при помощи библиотеки Doctrine?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Суть ORM - представление сущностей и связей БД в виде объектов. Соответственно и работать с ними, за исключением специфических случаев, надо как с объектами.
    В вашем случае код должен выглядеть как-то так:
    $taxAuthorities = $this->db->entityManager
        ->getRepository(TaxAuthority::class)
        ->findBy(['active' => true]);
    foreach ($taxAuthorities as $taxAuthority) {
        // здесь работа с объектом через геттеры
       // например, $taxAuthority->getTaxType()
    }

    Если всё-таки хотите построить запрос, то как-то так:
    $qb = $this->db->entityManager->createQueryBuilder();
    $query = $qb
        ->select('ta.taName', 'ta.taId', 'ta.taAmount', 'tam.tamColumnValue', 'tp.tpId', 'tp.tpName')
        ->from(TaxAuthority::class, 'ta')
        ->innerJoin(TaxType::class, 'tt', Join::WITH, $qb->expr()->eq('tt.ttId', 'ta.taTtId'))
        ->innerJoin(TaxAuthMatch::class, 'tam', Join::WITH, $qb->expr()->eq('tam.tamTaId', 'ta.taId'))
        ->innerJoin(TaxTypeMatch::class, 'ttm', Join::WITH, $qb->expr()->eq('ttm.ttmTtId', 'tt.ttId'))
        ->innerJoin(TaxProfileDefs::class, 'tpd', Join::WITH, $qb->expr()->eq('tpd.tpdTtId', 'tt.ttId'))
        ->innerJoin(TaxProfile::class, 'tp', Join::WITH, $qb->expr()->eq('tp.tpId', 'tpd.tpdTpId'))
        ->where($qb->expr()->eq('ta.taActive', 'Y'))
        ->orderBy('tam.tamColumnValue');
    // Посмотреть текст DQL
    // echo $query->getDQL();
    $result = $query->getQuery()->getResult();

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $str = '2 3 4 5 6';
    
    $res = preg_replace_callback(
        pattern: '#(?P<number>\d+)#',
        callback: static fn(array $match) => pow(base: intval($match['number']), exp: 2),
        subject: $str,
    );
    
    echo $res; // 4 9 16 25 36
    Ответ написан
    Комментировать
  • Как правильно составить регулярное выражение для проверки доменного имени?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Почему строка $arr[] = 'si$te.com'; определяется как доменное имя?

    Потому что te.com определяется как доменное имя, а условие, что попадать под маску должна полная строка у вас не наложено. Ну и, на самом деле, национальные домены первого уровня в punycode могут содержать цифры.
    - $reg   = '#[a-z0-9]+[_-]?[a-z0-9]+\.[a-z]{2,}#';
    + $reg   = '#^(?:[a-z0-9][a-z0-9-_]*\.)+(?:[a-z]{2,}|xn--[a-z0-9]{4,})$#i';
    Ответ написан
    5 комментариев
  • Как сжать изображение PNG без изменение типа MIME?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    JPEG - сжатие с потерями. Если сравнить изображение из исходного и сжатого файлов, то они не совпадут.
    PNG - сжатие без потерь. Файл восстанавливается в точности таким, каким был.
    Соответственно, размер JPEG уменьшается с потерей информации, размер PNG особо не уменьшить, поскольку информация не теряется.
    Хотите сжать PNG - уменьшайте его размер и/или глубину цветности, то есть самостоятельно уменьшайте количество информации в файле.
    Ответ написан
    Комментировать
  • Как добится подсказок методов VSCode?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Поставить расширение, которое умеет давать такие подсказки. Например, PHP Intelephence.
    Ответ написан
  • Ошибка при попытке редиректа CORS?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Перенаправление через Location - это фактически команда браузеру сделать новый запрос. А, поскольку изначальный запрос был через fetch, то и новый запрос пойдёт через него. Ну а fetch не может сделать новый запрос из-за нарушения CORS.
    Выход - делать оплату в отдельном окне не используя AJAX или отправлять команду на переадресацию в ответе скрипта и выполнять её средствами JS.
    Ответ написан
    Комментировать
  • Как убрать названия страниц PhpSpreadsheet?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    - ->setView(SheetView::SHEETVIEW_PAGE_BREAK_PREVIEW)
    + ->setView(SheetView::SHEETVIEW_NORMAL)
    Ответ написан
    Комментировать