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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    В целом, подключение классов через include/require уже устарело. Как правило, используется автозагрузка классов по стандарту PSR4, самостоятельная (spl_autoload_register) или через composer.
    Но если оставаться в легаси, то я бы вынес все подключения зависимостей через require_once в начало файлов.
    Ответ написан
    8 комментариев
  • Как заменить текст в файле .csv с помощью PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Угу. Сначала понаставим @, чтобы скрыть все ошибки, а потом будем голову ломать, почему ничего не работает и ошибок не показывает.

    А вообще, это делается в одну строку.
    file_put_contents($outfilename, str_replace('Российский рубль', 'RUB', file_get_contents($infilename)));
    Ответ написан
    Комментировать
  • Как сформировать список по вложенному массиву рекурсивной функцией?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ну, будем извращаться.
    <?php
    function formatList(array $list): string
    {
        $result = '';
        foreach ($list as $key => $value) {
            if (!is_array($value)) {
                $result .= "<li>{$key} => {$value}</li>";
                continue;
            }
            $result .= "<li>{$key} =></li>";
            foreach ($value as $item) {
                $result .= formatList($item);
            }
        }
        if ((debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['function'] ?? '') !== 'formatList') {
            $result = "<ul>{$result}</ul>";
        }
        return $result;
    }
    print formatList($arr);

    <ul><li>id => 1</li><li>name => item1</li><li>items =></li><li>id => 2</li><li>name => item2</li><li>items =></li><li>id => 3</li><li>name => item3</li><li>items =></li><li>id => 4</li><li>name => item4</li><li>items =></li><li>id => 5</li><li>name => item5</li><li>items =></li><li>id => 6</li><li>name => item6</li><li>items =></li></ul>
    Ответ написан
    2 комментария
  • Firefox больше не отправляет в HTTP_ACCEPT image/webp?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Специально обновил панду, проверил. У меня этот заголовок отправляет:
    скрин
    6740fab113240252456021.png

    Может у вас запрос построен так, что браузер не понимает, что запрашивается картинка?
    Ответ написан
  • Переподключение 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 комментариев