Ответы пользователя по тегу PHP
  • Как решить утечку логов при их записи?

    neuotq
    @neuotq
    Прокрастинация
    Сложно сказать без более подробной логики и кода. Скорее всего у вас ошибка где-то. Запись в Monolog ведётся в режиме добавление в конец fopen + a, что подразумевает (в POSIX совместимой ОС):
    O_APPEND и O_CREAT
    O_APPEND Перед каждой записью помещает указатель файла в конец
    файла. Иными словами, все операции записи будут
    происходить в конец файла.
    O_CREAT Создает файл, если он не существует.

    Поэтому в целом проблем быть в Линуксе не должно(грубо говоря), тк fwrite (при fopen + a) будет работать в атомарном режиме (и блокировать файл нет необходимости), только порядок строк не гарантируется.
    А насчёт RabbitMQ не совсем понял. Ну ок, куда-то вы передали сообщение, но потом же его снова таки нужно записывать?
    Насчёт нагрузки, здесь это вторично, нужно исходить из логики работы приложения, ну и RabbitMQ таки быстро работает, бутылочным горлышком в сравнении с записью в файл не будет.
    Ответ написан
    4 комментария
  • Защита от бесконтрольного создания картинок?

    neuotq
    @neuotq
    Прокрастинация
    Гуглите "Rate Limiting" для вашего фреймворка, библиотеки, возможно на уровне веб сервера или чего ещё. И постройте логику приложения так, что если нужно отдавать не статитку, то условно свободно, а если генерировать, то тут ограничения. Обычно это делается на одно условное устройство/пользователя и/или отдельно на отдельный роут/операцию/функцию.
    Ну например, на пользователя 5 раз в секунду, на роут генерации картинки 100 раз в секунду, если больше любого лимита, возвращай код 429.
    Ответ написан
    3 комментария
  • Почему PHP Simple HTML DOM Parser берет только текст из ячейки таблицы?

    neuotq
    @neuotq
    Прокрастинация
    В строке
    $flight[] = $cell->plaintext;
    Вы используете метод plaintext который очищает все теги, ну и для этой ячейки должен вернуть текст 'PDF'.
    Не совсем ясно что вам нужно? Если нужно дополнительно разбирать и другие вложенные html элементы, то нужно усложнять вашу логику, добавлять условия. Вот из той же документации, добавляете вложенные циклы для того же тега a и из него уже парсите href если вам нужно отдельно. И тд и тп.
    Ответ написан
    Комментировать
  • Как сделать погрузку контента по нажатию кнопки на php?

    neuotq
    @neuotq
    Прокрастинация
    Естественно без перегрузки страницы этого не сделать. Делаешь кнопку с формой, а там через гет/пост запрос отправляешь параметр(условно show_full=1). В php проверяешь его, если он есть: возвращаешь полный текст, иначе краткий.
    Ответ написан
    1 комментарий
  • Как выполнить JS код на странице PHP?

    neuotq
    @neuotq
    Прокрастинация
    Первое что нужно понять, где выполняется ваш js код.
    Если это бекенд и сервер, то php тут вообще не нужен, выполнять код на сервере будет например окружение nodejs или аналоги.
    Если в браузере, то сам код либо добавляете в структуру html документа(теги script ):
    <script>
    console.log('Привет я код на javascript');
    </script>

    либо кладёте в публично доступное место на сервере и подключаете как скрипт(мы подключаем из того места где и корень сервера):
    <script src="/myscript.js"></script>
    В форме в action пишут куда сам браузер сделает запрос(get или post) и обычно это бекенд(тот же php)
    Вам же, для обработки в браузере, нужно перехватывать отправку формы в самом js скрипте через событие
    Допустим у формы id='form'
    function formSubmit(event) {  
      event.preventDefault();
     console.log('Форму пытались отправить');
    }
    const form = document.getElementById('form');
    form.addEventListener('submit', formSubmit);

    Опять таки, могут быть нюансы, зависит от задачи и скрипта
    Ответ написан
  • Как получить значения внутри sizes?

    neuotq
    @neuotq
    Прокрастинация
    У вас json поломанный, там лишнее кавычки вокруг квадратных скобок, в результате внутри photo не набор данных, а строка.
    $json = '{"photo": [ {"markers_restarted":true,"photo":"89f6559651:x","sizes":[["s",858136244,"195d27","LUU541je04g",75,28],["m",858136244,"195d28","5X0nTDYfROQ",130,48],["x",858136244,"195d29","8d1U8WuXDBo",604,225],["o",858136244,"195d2a","Yq9fT1Ueo3A",130,87],["p",858136244,"195d2b","3AiiPHulyak",200,133],["q",858136244,"195d2c","x-B5oe9Myhc",320,213],["r",858136244,"195d2d","RwVnagzyMgo",510,225]],"latitude":0,"longitude":0,"kid":"442decc8b415ad1496eee074ff555262","urls":["v858136244/195d27/LUU541je04g.jpg","v858136244/195d28/5X0nTDYfROQ.jpg","v858136244/195d29/8d1U8WuXDBo.jpg","v858136244/195d2a/Yq9fT1Ueo3A.jpg","v858136244/195d2b/3AiiPHulyak.jpg","v858136244/195d2c/x-B5oe9Myhc.jpg","v858136244/195d2d/RwVnagzyMgo.jpg"]}]}';
    
    $json_decoded = json_decode($json, TRUE);
    
    print_r($json_decoded['photo'][0]['sizes']);
    Ответ написан
    Комментировать
  • Почему не работает array_uintersect?

    neuotq
    @neuotq
    Прокрастинация
    А зачем в вашем колбеке обращаетесь по ключам? нужо тогда так:
    function keyCompareFunc($key1, $key2) {       
            return strcasecmp($key1,$key2);
    }
    Ответ написан
  • Каким образом загружать несколько файлов из формы, при этом, обрабатывая их через Intervention Image?

    neuotq
    @neuotq
    Прокрастинация
    Ну первое у вас есть наверное опечатка, здесь нужно images, тк в форме images
    $files = $request->file('images');
    Далее, как я понимаю здесь
    Image::make($file)->insert($watermark, 'bottom-right', 100, 100)

    Вы хотите вызвать экземпляр класса Intervention\Image, но одновременно видимо у вас и модель называется Image, и подключается позже, а значит php воспринимает это как App\Image.
    Значит вам нужно Intervention\Image добавлять другим алиасом, (меняйте в config/app.php , раздел aliases).
    Ну и не забывайте, что после этих исправлений, у вас будет просто загрузка фото, без сохранения в БД, поэтому если нужно еще сохранить что-то в БД, например в вашу модель Image, то нужно дополнительно писать код.
    Ответ написан
    1 комментарий
  • Почему возраст не выводится?

    neuotq
    @neuotq
    Прокрастинация
    $first_age = array_column($records, 'last_age');
    $first_age - массив.
    Далее
    $birthday_timestamp = strtotime($birthday);
    strtotime()- принимает только строки.
    А значит вызывать вашу функцию нужно
    echo calculate_age($first_age[0]);
    Или в цикле по каждому элементу
    Ответ написан
  • Долгая обработка запроса php как передать браузеру что бы ждал ответа?

    neuotq
    @neuotq
    Прокрастинация
    Ну тут если делать всё прямо, то это тупо висящая страничка. Опасность еще в том, что пользователь в любой момент может нажать обновить страницу например. В любом случае, в прямом случаи вам нужно смотреть настройки таймаута длительности запроса в настройках php и вашего веб сервера.
    А так.. даже не знаю, может стоит проверять что запрос будет долгий, и если запрос будет долгий, вначале редиректить на временную страницу с предупреждением, а оттуда с таймаут уже на запрос, чтобы у пользователи перед глазами висела надпись ждите и ничего не трогайте.
    Это я описал алгоритм без js, со временной страницы можно редирект делать через
    .
    А так... всё же лучше делать отдельно задания.
    Те пользователь отправил вам тяжелый запрос, вы его приняли, сразу вернули пользователю ответ что я принял задание, будет готово через 20 минут. А в коде в расписание/очередь свыставляете задание на генерацию вашей csv.
    А далее пользователь получает(пуш уведомление. email еще как, это не суть) уведомление о готовности задания, либо о его не удачи.
    Ну те вам нужен: очередь/планировщик задания, события, уведомления.
    Я бы на вашем месте всё же рассмотрел либо фреймворк какой-то, либо комопненты Симфони или в репозитории composer поискал что-то, для облегчения задачи. Чтобы меньше велосипедов плодить.
    Ответ написан
  • Class 'ImageSplitter\ImageSplitter' not found in Laravel6?

    neuotq
    @neuotq
    Прокрастинация
    У автора пакета BardoQi/ImageSplitter ошибка в composer.json.
    В секции автозагрузки, вместо
    "autoload": {
            "psr-4": {
                "BardoQi\\image-splitter\\": "src/"
            }
        }

    Нужно
    "autoload": {
            "psr-4": {
                "ImageSplitter\\": "src/"
            }
        }

    Наверное он забыл исправить префикс либо вообще не понимает как это работает.
    Ответ написан
    Комментировать
  • Как сформировать такой URL?

    neuotq
    @neuotq
    Прокрастинация
    Через http_build_query, никак, формируйте самостоятельно через цикл, или вручную
    $query = urlencode('code[]') . '=' . urlencode(100) . '&' . urlencode('code[]') . '=' . urlencode(200);

    Цифры я поставил в urlencode просто для того чтобы были, и на всякий случай если вместо них будут другие данные, чтобы не забыть.
    Ответ написан
  • Стоит ли переходить с php на java?

    neuotq
    @neuotq
    Прокрастинация
    Язык это инструмент.
    Если вы начинаете работать в области где используется другой инструмент, то да стоит выучить. И это вне зависимости от самого языка. Эти бесконечные гонки за мега правильным выбором именного того языка чтобы выучить в 2020 году, бла бла бла - пустой звон. Есть спрос, вам нравится, у вас получается? Берите учите.
    PS тема выбора технологии/стека архитектором приложения конечно же совсем иной вопрос.
    Ответ написан
    Комментировать
  • Как сделать фильтры для фотографий как в приложении Prisma?

    neuotq
    @neuotq
    Прокрастинация
    Не выйдет. В данный момент на фронтенде подобное делать "дороговато"(хотя многое уже вот вот) , поэтому нужно делать на бекенде. Призма использует умные алгоритмы распознавания фото и наложения фильтров на основе этого.
    Короче говоря это не тривиальная задача, на порядки сложнее классических "инстаграммных" фильтров.
    Ответ написан
    Комментировать
  • Как перекинуть работу сервера на пользовательскую часть?

    neuotq
    @neuotq
    Прокрастинация
    В вашем случае, чтобы не погружаться во все эти состояния приложений и новый фронтенд с реактивными компонентами, легче всего будет использовать DataTable библиотека для Jquery с крайне широким функционалом по фильтрации таблиц, в том числе с работой только на клиенте с полностью загруженными данными изначально.
    Библиотека не сложная, почитайте документацию, поиграйтесь на сайте с примерами я думаю вы быстро решите вашу задачу.
    Ответ написан
  • Что делают? и: в php и js?

    neuotq
    @neuotq
    Прокрастинация
    'Если это правда' ? 'Вернуть это' : 'Иначе вернуть это'
    Ответ написан
    Комментировать
  • Редирект на мобильную версию сайта?

    neuotq
    @neuotq
    Прокрастинация
    Насчет самого определения мобильника таки лучше пользоваться это библиотекой, неплохой интерфейс, плюс не нужно самому следить обновлять новые юзер агенты, достаточно обновить пакет.
    А насчет полной версии сайта на мобильном, то здесь как тебе выше посоветовали добавляй куку (условно force_desktop) и во всех условиях дополнительно проверяй ее. Ну и конечно оставь для таких людей и кнопочку вернуться на мобильную версию, которая обнулит эту куку.
    Ответ написан
    Комментировать
  • Функция не реагирует на параметр, в чем ошибка?

    neuotq
    @neuotq
    Прокрастинация
    Итак ваша функция началась.
    Что-то случилось вначале. потом switch с переменной $hms, допустим в переменной значение "hms" и сработало первое условие. оно выполнилось, НО тут засада, нет break;, поэтому выполнение кода продолжается дальше. и выполняется дальнейшая проверка условий, но так как их нет, срабатывает default.
    Короче, добавите break;
    Ответ написан
    1 комментарий
  • Как в PHP наложить текст с CSS стилем на картинку?

    neuotq
    @neuotq
    Прокрастинация
    Нет, это делается не таким образом.
    Работа с изображениями в php через специальный библиотеки GD/ImageMagick.
    Но чтобы не возиться самому с велосипедо строением, лучше уже использовать готовые обертки.
    Я советую image.intervention.io, у них отличная документация, широкие возможности по манипуляциям с изображениям, фильтры, кропы, эффекты и тд и тп. В том числе и работа с текстом, поддержка шрифтов.
    Если уж хочется именно css/html шаблоны, то есть библиотека https://github.com/niklasvh/html2canvas , но тут уже вам стоит разделить логику и отображение. Мы у себя успешно использовали эту библиотеку для реализации генерации баннеров автоматически под нужный размер, используя адаптивную верстку. Сама библиотека не идеал, на практике бывают всплывают косяки и проблемы, но думаю для вашей задачи более чем подойдет.
    Ответ написан
    1 комментарий
  • Как преобразовать число 7.220094E-8 в число без экспоненты?

    neuotq
    @neuotq
    Прокрастинация
    Например так
    echo number_format('7.220094E-8', 15, '.', '');
    Ответ написан
    Комментировать