Задать вопрос
Ответы пользователя по тегу PHP
  • Как уменьшить вес 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)
    Ответ написан
    Комментировать
  • Как правильно проверить, есть ли в массиве два одинаковых элемента подряд?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    И стоит сделать строгую проверку равенства, иначе возможны всякие приколы
    var_dump(check(['привет', true])); // bool(true)
    var_dump(check([true, 1])); // bool(true)
    var_dump(check([1, 'привет'])); // bool(false)
    Ответ написан
    Комментировать
  • Почему появляется Typed property must not be accessed before initialization?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Нет, по умолчанию типизированное свойство не инициализировано
    class Product
    {
        private int $parentId;
    
        private $nonTyped;
    
        public function __construct(
            private readonly int $id
        ) {
        }
    }
    
    $obj = new Product(1);
    var_dump($obj);
    
    // class \Product#2 (3) {
    //   private int $parentId => *uninitialized*
    //   private $nonTyped => NULL
    //   private readonly int $id => int(1)
    // }


    2. Если это свойство необязательное, то вариантов три:
    - не обращаться к свойству до его инициализации;
    - инициализировать свойство значением по умолчанию при определении;
    - делать коалесценцию в геттере, возвращая значение по умолчанию (return $this->parentId ?? null;).
    Ответ написан
    Комментировать
  • Как узнать, какой день недели был 100 дней назад?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Не надо костылить и велосипедить. Всё придумано до нас:
    echo (new IntlDateFormatter("ru_RU", pattern: 'EEEE, d MMMM y'))
    	->format(new DateTimeImmutable('100 days ago'));
    // вторник, 30 апреля 2024
    Ответ написан
    1 комментарий
  • Как узнать, сколько дней осталось до Нового Года?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    echo (new DateTimeImmutable('first day of January next year'))
        ->diff(new DateTimeImmutable())
        ->format('Осталось дней: %a');
    // Осталось дней: 151
    Ответ написан
    2 комментария
  • Какую кодировку выбрать для бд чтобы хранить фото?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Любую. На BLOB кодировка не влияет.
    Но по уму фотографии не хранят в БД. Их записывают как отдельные файлы с уникальными именами, а в базе хранят оригинальное имя файла и путь к файлу.
    Ответ написан
    Комментировать
  • 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 Мир!
    Всё вполне сконвертировалось.
    Ответ написан
    Комментировать
  • Как правильно принять файл с другого серверва отправленного через CURL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    - curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
    Ответ написан
    Комментировать
  • Как установить "страничный режим" PhpSpreadsheet?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $spreadsheet->getActiveSheet()
        ->getSheetView()
        ->setView(SheetView::SHEETVIEW_PAGE_LAYOUT);
    Ответ написан
    1 комментарий