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

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Есть ли смысл начать с устаревшего материала?
    4-5 лет не сказать что сильно устаревшие. ИМХО спокойно можно учиться, основы будут одинаковы для любой версии языка, изменения в новых версиях большей частью касаются ООП составляющей, до которой еще дойти нужно. В целом и ООП код более старых версий совместим с последними версиями, во всяком случае с 5+, в обратную сторону конечно же работать не будет. Ну а новые фишки по типу тайпхинтинга и анонимных объектов можно доучить и самостоятельно.
    Ответ написан
  • Как сделать отображение эмодзи в PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Решением было только поменять кодировку таблицы базы данных MySQL, но в моем случае она была utf8mb4, которая должна поддерживать эмодзи.
    Так как utf8mb4 "обратно совместима" с utf8, все кроме 4байтных символов будет нормально отображаться. Соответственно при указании настроек соединения стоить исправить чарсет на utf8mb4, который по умолчанию у вас скорее всего utf8.
    Ответ написан
    Комментировать
  • Устанавливать ли в php таймзону пользователя?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    5) Какие главные минусы против чтобы временную метку хранить просто как число unixtimestamp? То что выборки , когда нужны всякие DATE специфичные функции, потребуют преобразования в тип дату в каждой строке? (это преобразование может не сложное?, ведь datetime и так хранится как число)
    Как минимум то что у вас дата не хранится как дата. Про то что не будут работать стандартные функции работы с датами типа разницы в год, месяц, неделю и прочие весьма неочевидные преобразования я вообще молчу, чего стоит банальное вычисление количества дней до, например, конца месяца, с учетом того что каждый месяц имеет разную длину, не говоря уже про високосные года, ну и всякие расписания, где работа с минутами/часами без готовых функций тоже так себе удовольствие. Кроме того, таймстамп имеет свои ограничения, например в нем нельзя хранить даты раньше чем 1970 год, то есть пользователи старше 55 лет дату рождения сохранить не смогут. Ну и горизонт планирования до 2038 года, дальше все. Алсо, вы теряете защиту от кривых данных на уровне типа поля, что тоже +1 в копилку встроенных типов.
    В целом, таймстампы это именно метки, то есть "тогда-то произошло такое-то событие, относящееся к текущему времени", со своими ограничениями.
    Ответ написан
    Комментировать
  • MySQL: как реализаовать поиска по нескольким вхождениям?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Но тут возникает проблема в формировании prepared statements в PHP (PDO).
    А в чем проблема?
    $sql = 'SELECT * 
    FROM articles 
    WHERE name LIKE ? 
    AND name LIKE ?';
    $prep = $dbh->prepare($sql);
    $ret = $prep->execute(['%' . 'опух' . '%', '%' . 'поч' . '%']);
    Ответ написан
    2 комментария
  • Какие подводные при хранении токенов в memcached?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вы столкнулись с проблемой "бумажки на мониторе", то есть не озаботились безопасностью данных на должном уровне, и теперь пытаетесь вместо того чтобы более серьезно отнестись к общей безопасности, найти 1 "универсальное" решение, которого нет.

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

    Основным общепринятым "правильным" методом хранения паролей на сегодня является использование .env файла, он лежит выше документ рут, имеет атрибут скрытого по умолчанию в линукс системах, а так же большинство IDE автоматически вносят такие файлы в гитигнор, то есть сразу удовлетворяет большинству требований.
    Ответ написан
    Комментировать
  • Как выполнять отладку на php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Правильный подход - установка xdebug и пошаговая отладка.

    Есть и более простые методы, например:
    Использовать var_dump()/print_r() в нужных местах, чаще всего этого достаточно для отладки небольших скриптов.
    Включение вывода ошибок в аутпут тоже помогает(либо в пхп.ини меняем соответствующие настройки, либо в коде в начале добавляем
    ini_set('error_reporting',E_ALL);  ini_set('display_errors', 1);

    ), хотя по умолчанию все пишется в лог ошибок и можно посмотреть их там (но опять же, для небольших скриптов это норм).
    Ответ написан
    Комментировать
  • Как рисовать Canvas в PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    если речь идет о svg(что за канвас вообще?), то в ридми все описано, естественно для рендера в свг нужно будет поменять рендерер бэкенд на соответствующий - SvgImageBackEnd
    Ответ написан
    Комментировать
  • Частично не приходят письма с сайта на gmail — странно или норма?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Гуглить сервисы проверки почты. От базового мэйлтестера до проверки на спам листы.
    Ответ написан
    Комментировать
  • Как исправить проблему запуска проекта на laravel?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    пытаюсь запустить через ide phpstorm
    Не очень понятно - через консоль? Так это не через пхпсторм, а через консоль. Вангую что пхп.ини для консольного вызова (aka CLI) вы не меняли, соответственно и работать нифига не будет.
    Ответ написан
  • Как эффективно перейти на c++ при опыте работе с php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Посоветуйте, как можно было бы максимально безболезненно восполнить утраченные знания, а также наверстать упущенные новшества в языке?

    так это...
    Сейчас хочу попробовать реализовать научный проект.
    Собсно практика - лучший учитель, садитесь и пишите. Если базу уже знаете реализация не станет проблемой. По ходу решения текущих задач проекта познакомитесь со всеми нужными изменениями и практиками, сегодня на любой чих есть дока, туториал, видео и чатжпт. Двух зайцев двумя плюсами, так сказать...
    Ответ написан
    Комментировать
  • Как добавить html код для каждой страницы с определенным url?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вам нужна единая точка входа и базовый функционал инклуда/чтения файлов. Далее по вкусу: либо делать инклуд + буферизацию вывода и заменять контент на нужный регулярками/заменой, либо читать файл, менять нужное и отдавать как ответ. По сути одно и то же, просто код будет чуть отличаться.
    Ответ написан
    Комментировать
  • Как заполнять поля на html-странице из функции на php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Мне нужна функция на php, которую можно вызывать и при загрузке страницы, и в том числе в фоновом режиме, которая заполняла бы поля на странице.
    Странице чего? Вашего сайта или чужого? И что значит "в фоновом режиме"?

    Щелчок на кнопке - вызов php-функции - заполнение полей на странице без перезагрузки.
    Аякс. опять же, зависит от того чей сервер. Естественно на фронте код будет на яваскрипте, так что чистым пхп не обойдешься.

    Возможно ли такое? (Пока на WordPress) Спасибо.
    Возможно, но есть условия. Часть из них перечислил выше, остальные зависят от ваших умений.
    Ответ написан
    Комментировать
  • В чем может быть причина сильного увеличения длительности ответа запросов при установке Load Balancer на 2 сервера со стаком MySQL, PHP, Nginx?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Нагрузка на ЦПУ при этом пике 30-40%
    это че за нагрузка при 3рпс? Профилирование нагрузки - первый шаг, балансер и горизонтальное расширение это шаг стопитьсот, когда вы упираетесь в потолок того что может вытянуть сервак. 90% что проблемы в количестве (и качестве) запросов к бд, крайне маловероятно что код у вас настолько сложный, что не вытягивает...

    обращается к основной БД через коннект по приватному IP адресу в сети серверов Амазон.
    Тестом запустите подряд 20-30 разных запросов с разным размером ответа, каждый замерьте, подозреваю что будете не очень приятно удивлены...

    запросы на дополнительном сервере начинают отрабатывать по 5, 15 а иногда и 50 секунд.
    А на основном все остается норм? В любом случае - профайлинг наше все, + под нагрузочным тестированием хоть как-то.
    Ответ написан
    2 комментария
  • Как загрузить фото из формы в корень сайта в папку img?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Подскажите, что не так

    1) Вы не читаете и не осмысливаете текст ошибки. Не в смысле глазами, а в смысле "что там произошло то?". Для вас текст ошибки проблема, а не путь решения.
    2) Не проверяете то, что интерпретатор считает неправильным, что как бы прямое следствие п.1.
    3) Считаете что знаете что на самом деле лежит в переменных, не заглядывая в реальные данные.
    Ответ написан
    Комментировать
  • Как с помощью обработчика форм PHP отправлять сообщения о новой созданной заявки в беседу от бота telegram?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Форма отправляется на сервер, далее либо курлом вызывается второй скрипт, либо (если скрипт отправки в тг находится в рамках одного приложения) второй скрипт подключается инклудом после обработчика и обрабатывает форму своим способом.
    Ответ написан
    8 комментариев
  • Почему скрипт выполняется не до конца?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    рассылка приходит только 1000 пользователям.
    Если прям ровно 1000, очевидно это ограничение ТГ.

    ТГ никаких ошибок не выдает.
    Как это проверяется?
    $res = $this->app->forwardMessage(...)очевидно что-то возвращает, подозреваю ответ в виде саксесс/фэйл, но вы его нигде не используете.

    Посмотрел доку - он возвращает объект Message в случае успеха, и код ошибки в случае неудачного запроса. Проверяйте $response->getMessageId(); для определения удачного запроса.
    Ответ написан
  • При отправке данных из js через fetch, php код не исполняется, в чем причина?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    и при загрузке страницы мне сразу выводится "4"
    Логично, так как пост пустой, а не нулл, а в остальных случаях срабатывают проверки на метод пост(вызванные через гет) и непустые пост поля, которые как бы пустые при методе гет.

    но скрипт php как будто работает один раз при загрузке страницы и все,
    Скрипт пхп ВСЕГДА работает 1 раз. При каждом обращении вы создаете запрос, скрипт его отрабатывает и умирает.

    как сделать чтобы при отправке данных скрипт php отслеживал это ?
    Так он отслеживает, просто вы с этим отслеживанием ничего не делаете. Посмотрите ответ сервера в запросе к message.php, ну и сделайте в js обработку ответа фетч запроса какую-то... То что метод называется буквально "взять" вас не на какие мысли не наталкивает? ))
    Ответ написан
    Комментировать
  • Шифрование уникальной ссылки для пользователя. Как реализовать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Самое простое решение - шифрование. На первом сайте шифруете строку содержащую дату и время + имя файла + соль, получаете строку для урл. На втором сайте расшифровываете тем же ключом (ну или можно использовать асимметричный шифр и тогда ключ будет публичным на 2 сервере). Если дата не устарела (например время жизни ссылки ставите 1 час и проверяете разницу дат создания ссылки и текущего времени).
    Ответ написан
    Комментировать
  • Как на php убрать тег html эллемента, и очистить форму?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    По уровню вопроса конечно понятно что гениальности от кода ждать не стоит, но все же...
    Для начала пару занудных замечаний:
    1)
    if($query = $db->query("SELECT `login`, `password` FROM `admin`")){
    Не стоит выбирать все записи из таблицы, если вам нужна одна, та где логины совпадают. Это в целом плохая практика, но еще хуже когда такой подход будет применен к большой таблице. SQL для этого и придуман чтобы так не делать. Так же, если у вас есть таблица пользователи, не нужно дублировать функционал, перенесите админов туда же, указав им уровень доступа или роль.
    2) пароли в бд должны быть соответствующе зашифрованы, используйте соответствующие функции password_hash() и password_verify() при создании и проверке пароля.
    3) Больше совет, чем инструкция: испльзуйте один стиль обрамления кодовых блоков везде, либо текстовые конструкции типа if - endif, либо везде фигурные скобки. Второе предпочтительнее.

    Что касается собственно вопроса, есть несколько вариантов, самый кривой из которых уже написал сеньор Sergei Parfenov. При неверном логине код просто продолжается формой и вы имеете все данные о проверке, включая правильность/неправильность пароля. Стоит отметить что в данном случае блок проверки логина нужно обрамить проверкой метода запроса и вызывать ее только в случае если метод запроса POST (как это сделать - задание на дом).

    Второй вариант более адекватный, так как первый имеет ряд недостатков.
    1) В начале формы создаем переменные в сессии: $_session['message'] и $_session['old'] с пустыми значениями
    2) В блоке проверки логина $_session['old'] присваиваем значения пришедшие из формы $_POST.
    3) Если в ходе проверки у нас возникли ошибки, пишем сообщение об ошибке в $_session['message'].
    4) Выполняем переадресацию. В форме сначала переносим в переменную $message = $_session['message']??'';; и $_session['message'] очищаем. Тоже самое делаем с $old, не забывая что там обычно массив;
    5) Переносим в поля формы старые значения там где это нужно из $old;
    6) Проверяем что лежит в $message, если там что-то есть - выводим сообщение об ошибке.
    Профит.
    Ответ написан
    Комментировать
  • PHP: Почему 'mb_convert_encoding' не конвертирует простую строку?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    по тому что гладиолус документация?
    Ответ написан
    4 комментария