• Как запустить php скрипт в фоне?

    @iljaGolubev
    Как отдать ответ клиенту и продолжить выполнение долгого скрипта?

    или так.
    <?php
    ignore_user_abort(true);
    set_time_limit(0);
    ob_start();
    header('Connection: close'); 
    header('Content-Length: '.ob_get_length());
    // можно добавить http статус подходящий
    ob_end_flush();
    ob_flush();
    flush();
    // дальше запуск
    run_havy_task();


    оба варианта предполагают, что есть отдельный способ получения результатов выполнения запущенной задачи.

    UPD: после критики в комментариях, поясню.
    Предложенное мной решение - примитивный способ сказать web серверу вернуть клиенту ответ и после этого продолжить выполнение скрипта.
    При этом ресурсы ресурсы сервера не будут освобождены пока функция run_havy_task не закончит работу. Можно использовать fastcgi_finish_request - но она не на 100% гарантирует завершение процессов.
    Таким образом, если до этого вы не переживали о ресурсах выделенных на выполнение "тяжелого" скрипта, то можно продолжать и так - запихнуть всё тяжелое в внутрь run_havy_task.
    Но лучше будет "тяжелую" часть обрабатывать в отдельных процессах. Например, одним из способов из комментариев к вопросу или из другого ответа, ссылку на который я дал в начале своего.
    Ответ написан
  • Как правильно генерировать миниатюру изображения для Vue?

    @iljaGolubev
    Если предположить, что на самом деле Изображения хранятся на клиентской серверной стороне (Vue) (Laravel)., то становится более-менее понятно.

    Обычный подход такой:
    backend - (api) Laravel - методы для получения и сохранения данных.
    frontend - (vue) Nuxt - отображение данных api и взаимодействие с api.
    • Пользователь в браузере выбирает картинку для загрузки на сервер(средствами js её можно показать на странице до отправки (например)).
    • Пользователь жмёт кнопку "сохранить" и frontend отправляет картинку в api (например)
    • api сохраняет полученный файл
    • api делает из сохранённого превью (например)
    • api возвращает в браузер
      json {'img'=>full_image_url, 'tumb'=>tumb_image_url}

    • frontend показывает
      <img src=tumb_image_url @click=showImage(full_image_url)>


    ---
    Вариантов вывода несколько

    Обычно это реализуется с помощью css. Но можно генерировать несколько разных превью на сервере.

    "resizeImageGet", которая при первом вызове сжимает и обрезает изображение

    Можно и так сделать. Тогда в api будет 2 метода uploadUmage - просто сохраняет файл, и resizeImageGet - проверяет что есть превью, создаёт его если нет и отдаёт контент (картинку). Но тогда это уже не чисто api.
    Ответ написан
    5 комментариев
  • Откуда при рекурсии в консоли берутся B:1 и B:2?

    @iljaGolubev
    Если не нужно чтобы выводило B, добавьте return.
    if (counter != 0){
                    Operation(counter)
                    return
                }
    Ответ написан
    Комментировать
  • Как сортировать объект в алфавитном порядке в js?

    @iljaGolubev
    Вы не можете управлять порядком отображения свойств при переборе.
    В вашем объекте свойства указаны как число и js всегда будет перебирать такие свойства в порядке возрастания. Можно создать новый объект, но со строковыми именами свойств - тогда они будут в порядке добавления.
    var ordered = Object.entries({
      4889: "Скрипт ",   4914: "Ааа",   11994: "Сервис",   12344: "иииии",    12417: "Тестовая",  12432: "ТТТ ",   12446: "Ма"
    }).sort(
      (a,b)=>a[1]<b[1]?-1:a[1]>b[1]?1:0
    ).reduce(
      (a,c)=>{a[`'${c[0]}'`]=c[1]; return a},
      {}
    );
    Object.getOwnPropertyNames(ordered)
    // ["'4914'", "'12446'", "'11994'", "'4889'", "'12432'", "'12417'", "'12344'"]
    Ответ написан
  • Почему при прокрутке вниз прокручивается до конца страницы?

    @iljaGolubev
    Потому что scroll event появляется пока до конца не докрутит.
    handleScroll меняет this.start в сеттере которого вызывается vertulScroll() в которой меняется this.html.item[0].style.marginTop после чего срабатывает scroll event
    Ответ написан
    Комментировать
  • Как правильно использовать get и set в классах?

    @iljaGolubev
    для начала исправить имена свойств

    this.firstName = firstName;
    // или
    this._firstName = value;
    Ответ написан
    Комментировать
  • Изменение CSS стилей элемента в JS?

    @iljaGolubev
    Ничего не изменилось: вы по-прежнему можете изменять стили напрямую у элемента.
    при обращении к элементу в JS и изменении стилей методом style DOM дерево
    Не скажу как раньше было, но и сейчас при неудачной вёрстке можно вызвать reflow для всего документа даже при применении класса. Изменение шрифта и так и так заставит браузер что-то пересчитать.
    Другое дело, что сейчас есть техники позволяющие минимизировать вычисления: сказать браузеру, что пересчитывать нужно только определённую часть (утрирую).

    Есть tailwindcss с новым (по отношению к 2015 году) подходом - чтобы поменять 1-2 стиля нужно добавить/удалить 1-2 класса. Часто это удобнее.

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

    Впрочем, от style всё равно не уйти полностью. Например, динамически высчитываемые анимации - только class не обойтись.
    Ответ написан
    Комментировать
  • Как записать неформатированный текст?

    @iljaGolubev
    1. Из вопроса непонятно при чём тут mysql.
    2. Вообще не очень понятно какой результат вам нужен: в коментах не увидел никакого форматирования тоже.
    3.
    остаются какие-то тройные пробелы.. хотя в регулярке убираю

    Вы её неверно используете
    echo str_replace(['a','b','c'], 'c', 'ab'); // 'cc'

    4. Попробуйте так, может окажется достаточно для вас.
    Ответ написан
  • Каким образом создать свой полностью стилизованный видео плеер? Насколько можно разгуляться с либой video.js?

    @iljaGolubev
    Собственный плеер под конкретную задачу можно написать используя api HTMLMediaElement.
    Пример собственного плеера с уникальным дизайном
    <html><body>
        <video id="v" style="max-width:300px">
            <source src="http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4" type="video/mp4" />
        </video>
        <p id="b" style='position:absolute; top: 60px; left: 130px; background: red; color: yellow; cursor:pointer'>play</>
        <script>
            v = document.getElementById('v')
            b = document.getElementById('b')
            b.addEventListener('click',()=>{
            if(b.innerText=='play'){
                b.innerText='pause'
                v.play()
            }else{
                b.innerText='play'
                v.pause()
            }
    })
        </script>
    </body></html>

    video.js точно также работает с html5 video, так что можно подглядывать в их исходники ;)

    Это если "собственный плеер" - не свой велосипед на замену video.js. Иначе, сначала нужно забыть о чатгпт и разобраться с video.js самостоятельно.
    Ответ написан
    4 комментария
  • Как сохранить сформированный через php xml в файл на сервере?

    @iljaGolubev
    но ничего не получается
    - плохой диагноз.

    В $data у вас XMLReader которые не умеет автоматом __toString. А вы его в `file_get_contents(filename: $data)` суёте. Что по вашему должно произойти?

    Само название XMLReader говорит от назначении "читать".
    Для записи используйте XMLWriter.
    Ответ написан
    3 комментария
  • Как вместо 0,00 вывести 55.000.000?

    @iljaGolubev
    FixMoney($data[$user['cash']]);
    Скорее вы что-то не то передаёте в функцию. Проверьте что в переменных $data, $user. Включите error_reporting(E_ALL);
    Если в number_format первый параметр = null то получаете сообщение `PHP Deprecated: ...` , но на выходе как раз будет 0,00.
    Ответ написан
    1 комментарий
  • Как передать аутентифицированного пользователя в job очереди Laravel?

    @iljaGolubev
    пользователь не реализует контракт "MustVerifyEmail"

    Ну так реализуйте.
    class User extends Authenticatable implements MustVerifyEmail
    Ответ написан
    2 комментария
  • Как прописать API от timeweb?

    @iljaGolubev
    curl -H "x-app-key: {appkey}" \
    x-app-key нужно передавать в заголовке.

    следуйте инструкици

    Вообще не должно быть этого в коде приложения. https://api.timeweb.ru/v1.2/access нужен только для получения токена. Последующая аутентификация в api с помощью этого токена.
    Ответ написан
    Комментировать
  • Как подключить статический .js файл к разметке vue.js?

    @iljaGolubev
    Не совсем понятно, что в этих js файлах, когда они должны выполниться, доступны ли по url в браузере, как "собирается" приложение...

    если url {domain}/assets/js/{file}.js доступен, можно подключать в index.html

    если нет,
    Можно так webpack dynamic-expressions-in-import
    или так vite dynamic-import
    Ответ написан
    Комментировать
  • Неправильно получаются данные с бэкенда?

    @iljaGolubev
    const response = await fetch('ссылка/api/user', {credentials: 'include'})
    Ответ написан
    Комментировать
  • Как работает finally и then в Promise?

    @iljaGolubev
    fetch(url)
        .then((response) => response.json())
        .then(({ cart }) => cartStore.setCart(cart))
        .catch(e=>console.log(e))
        .finally(() => setPreloader(false));

    finally выполнится после того как fetch и цепочка then(catch) выше полностью выполнится.
    Независимо от результата.
    По сути, это тоже самое что написать
    fetch(url)
        .then((response) => response.json())
        .then(({ cart }) => {cartStore.setCart(cart); setPreloader(false)} )
        .catch(e=>{console.log(e); setPreloader(false)})
    Ответ написан
    Комментировать
  • Почему может неправильно сохраняться запись в wordpress?

    @iljaGolubev
    Несмотря на "много букв", из вашего вопроса мало что понятно.

    the_post_thumbnail() формирует полный тэг img. Это видно на скрине. Так что ваш код ведёт себе совершенно безошибочно в соответствии с <img alt="newsIt" src="<?php the_post_thumbnail() ?>">

    TypeError: Cannot read properties of undefined (reading 'includes')
    at https://......../wp-includes/js/dist/editor.min.js...

    Ошибка в js - откройте dev tools, включите pause on uncaught exceptions и смотрите что нам undefined у которого должны быть includes
    Ответ написан
    Комментировать
  • Как грамотно реализовать архитектуру событийного пользовательского интерфейса на чистом JS?

    @iljaGolubev
    Грамотно - взять готовое решение.
    Но можно и такой велосипед, например.
    const point = { x: 0, y: 0 };
    
    function alertPointSubscriber(point){
    	alert(point.x * point.y);
    }
    const subscribers = [];
    
    
    const handlePointChange = {
      set(obj, prop, value) {
        subscribers.forEach(susb => susb(obj));
        if ((prop === 'x') || (prop === 'y') ) {
          console.log('set ' + prop + '=' + value);
        } else {
          console.log('unhandled');
        }
        return Reflect.set(...arguments);
      }
    };
    
    const points =[];
    points.push(new Proxy(point, handlePointChange));
    
    points[0].x=10;
    points[0].y=20;
    subscribers.push(alertPointSubscriber);
    points[0].z=3;
    
    console.log(point);
    Ответ написан
    1 комментарий
  • Как удалить запись и БД в один ко многим?

    @iljaGolubev
    И снова здрасте!
    И снова - забудьте про vue и добейтесь чтобы бэк работал как задумано.
    Не могу удалить запись из БД
    этот диагноз не про код.
    Перечитайте доку по роутам и связям.

    Ка всё это вместе должно работать - непонятно.
    Route::delete('/pov/{oborudovanie}',
    public function __invoke(Poverka $poverka)...
    axios.delete('/api/oborudovanies/pov/' + id)
    Ответ написан
    Комментировать