Задать вопрос
  • Как установить PHP в режиме отладки под Ubuntu?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Но при попытке запустить этот же скрипт из командной строки я получаю ошибку о том, что расширение pdo_mysql.so не может быть загружено.
    Для cli и для "веба" разные php.ini, в которых естественно включены разные расширения.

    php --ini для cli
    phpinfo() для веба
    Ответ написан
    5 комментариев
  • Как защитить базу данных компании от кражи сотрудниками?

    @q2digger
    никого не трогаю, починяю примус
    bitwarden или voultwarden - можно разные секреты по разным разделам разнести, у нас у каждого отдела свой набор секретов, и другие они не видят.
    Ответ написан
    2 комментария
  • Что можно сделать, если новый SSD на 2 ТБ не инициализируется?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    У них своего сайта, как такового нет, только маркетплейс, что уже озадачивает.

    Добро пожаловать в реальность! Покупайте проверенные устройства в проверенных магазинах. Все дешевые диски на маркетплейсах примерно вот такие:
    323100_O.jpg
    Ответ написан
    6 комментариев
  • Почему не работает Esp32 из-за драйвера мотора?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Поставьте диод в разрыв +5 которые идут к ESP. И за ним - конденсатор электролитический побольше.
    Вообще лучше разделять питания силовые, аналоговые и цифровые. В данном случае - питать драйвер/двигатели от отдельного источника.
    Ответ написан
    Комментировать
  • Как сделать такой след за движением мыши?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer

    Нужно только конфиг немного подкрутить. CURL: 2 и еще что-то на свой вкус, в идеале поискать конфиг на их сайте
    Ответ написан
    6 комментариев
  • Как лучше инициализировать объект?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    типа, антипаттерн...

    но это все равно вызов метода в конструкторе, что не приветствуется.

    Бред. Вот кем не приветствуется - вот он пускай и не приветствует и тихо миро плавает в своем болотце. Спокойно вызывайте приватный инициализатор в конструкторе - это как раз нормально. Конструктор - это и есть инициализатор объекта. Он даже называется "конструктор" - сборщик объекта. Его для этого и придумали. Выносить часть инициализации из инициализатора - на самом неделе не самая умная идея. А вот разбить инициализацию на разные логические части и разнести в разные методы - как раз таки очень даже хорошая практика. Декомпозиция, небольшие и простые функции/процедуры и все такое прочее.
    Ответ написан
    2 комментария
  • Почему возникает ошибка Maximum execution time exceeded?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    Нужно катать сферические шары в вакуме. Их 1000 штук. Работник каждые 30 секунд уходит покурить.
    Один шар он перекатывает за время от 1 до 3х секунд (то есть нет равномерности).

    Запрещаем ему курить пока не перекатит все. А он сволочь такая лажает постоянно.
    Решение
    Вместо цикла
    для всех шаров с 1 по 1000 делай катать
    пишем
    Напиши на доске номер шара - 1
    Цикл
    прочитай номер шара
    засеки время
    откати шар
    он 1000 - й , то ты свободен
    посмотри время
    если прошло больше 25 секунд, то запиши номер следующего шара и иди курить
    Ответ написан
    6 комментариев
  • Ошибка при отправке POST запроса на open server?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Проблема скорее всего тут .then(response => console.log(response.json())). И скорее всего в том, что твой сервер по адресу db.json отдаёт вместо json какую-то фигню. Открой вкладку Сеть в инструментах разработчика и посмотри, что тебе от сервера в ответ на твой POST приходит.
    Ответ написан
    7 комментариев
  • Как распознавать в php слова (типо систем компьютерной алгебры)?

    @Vitsliputsli
    Берете транслятор, если на основе php, то например phplrt. И пишите грамматику вашего языка. Перед написанием рекомендую прочитать "книгу дракона", это прям библия компиляторов, как минимум главы про грамматику.
    Ответ написан
    Комментировать
  • Как сделать, чтобы при каждом обращении к РНР скрипту, он выводил по две новые строки из текстового файла?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Лучше оставить рандомный вывод.
    Усилия, которые вы затратите на вывод по порядку, совершенно не стоят результата.
    Если после одной перезагрузки выведутся те же две строчки - никто от этого не умрёт.

    Вместо этой дурацкой затеи лучше потратьте время на изучение основ программирования.
    И в частности, того факта, что РНР не запоминает состояние. Он не запоминает даже значения переменных, не говоря уже о позиции в файле, который он читал во время прошлого запроса.
    Чтобы обеспечить последовательный вывод, надо где-то запоминать текущую позицию.
    Это может быть, например, сессия. Но клиент может не поддерживать сессии. И тогда ваш скрипт будет выдавать ему всегда первые две строчки.
    Ответ написан
    Комментировать
  • Как сделать, чтобы при каждом обращении к РНР скрипту, он выводил по две новые строки из текстового файла?

    Anastasia2306
    @Anastasia2306
    PHP-разработчик.
    нужно использовать array_slice без shuffle

    Если ты хочешь выводить строки с конца файла, то нужно будет использовать array_slice после array_reverse:
    Вывод по две строки с начала файла:
    $arr = file("reviews.dat");
    $res = array_slice($arr, 0, 2);
    
    foreach ($res as $str) {
        echo $str;
    }


    Вывод по две строки с конца файла:
    $arr = file("reviews.dat");
    $arr = array_reverse($arr);
    $res = array_slice($arr, 0, 2);
    
    foreach ($res as $str) {
        echo $str;
    }
    Ответ написан
    5 комментариев
  • Как оптимизировать алгоритм самонаведения ракеты?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Тут квадратное уравнение зарыто.

    Обозначьте |MSL_VEL - TGT_VEL| за t.

    Получите уравнение TGT_DIR = (MSL_VEL-TGT_VEL)/t

    Преобразуйте: TGT_DIR*t = (MSL_VEL-TGT_VEL)

    Но тут неизвестные вектор MSL_VEL и t. Но они связаны, ведь t - это длина вектора. Обозначим неизвестный вектор MSL_VEL как (x, y, z) Значит:
    t^2=(x - TGT_VEL_x)^2 + (y - TGT_VEL_y)^2 + (z - TGT_VEL_z)^2

    Ну и еще вы знаете, что скорость ракеты фиксированная же:
    x^2+y^2+z^2 = MSL_SPEED^2

    У вас тут 4 неизвестных и аж 5 уравнений (ведь первое - это векторное уравнение):
    TGT_DIR_x*t = x - TGT_VEL_x
    TGT_DIR_y*t = y - TGT_VEL_y
    TGT_DIR_z*t = z - TGT_VEL_z
    t^2=(x - TGT_VEL_x)^2 + (y - TGT_VEL_y)^2 + (z - TGT_VEL_z)^2
    x^2+y^2+z^2 = MSL_SPEED^2


    Раскройте скобки в 4-ом, подставьте туда пятое и из первых трех выразите x, y, z:

    t^2 = MSL_SPEED^2+TGT_SPEED^2-2*TGT_VEL_x*(TGT_DIR_x -t*TGT_VEL_x)-... = MSL_SPEED^2+(1-2t)TGT_SPEED^2-2(TGT_DIR*TGT_VEL)


    Там в конце векторное произведение векторов. Дальше сами раскройте и получите квадратное уравнение на t. Решите его по школьной формуле. Если дискриминант отрицательный, то решения тупо нет. Слишком быстро цель улепетывает. Потом не забудьте проверить, чтобы t получилось положительное. Потом подставьте t в первые 3 уравнения и найдите искомые x, y, z.

    Еще можно так себе это все представить. Свяжем систему координат с целью. Тогда множество точек, куда может смотреть скорость ракеты - это сфера с центром в TGT_VEL и радиусом MSL_SPEED. Вам надо выбрать на этой сфере точку так, чтобы она была коллинеарна с вектором TGT_DIR. Т.е. у вас есть луч из центра координат вдоль векторо TGT_DIR. Вам надо найти где он пересечет сферу. Введите параметр t вдоль луча и дальше получите то же самое квадратное уравнение.
    Ответ написан
    2 комментария
  • Как установить ОС с флешки через такой биос?

    @Drno
    Вот и выросло то поколение...
    как обычно - выбираешь свою флешку в boot разделе первой и запускаешься..

    либо f8 \ f9 \ f10 \ f11 \ f12 при старте - откроется меню загрузки

    Если биос ueffi - пишешь в этом формате флешку. Если нет - в формате MBR

    Писать можешь rufus - он бесплатен и умеет в оба варианта
    Ответ написан
    2 комментария
  • Как замокать и протестировать получение файла через fopen?

    @devian3000
    Можно пройтись хаком
    Создать обертку над протоколом https://www.php.net/manual/en/stream.streamwrapper..., зарегестрировать этот протокол https://www.php.net/manual/ru/function.stream-wrap...

    и вызов сделать что-то типо
    fopen("test://file1", 'r');

    должно сработать
    Ответ написан
    Комментировать
  • Как замокать и протестировать получение файла через fopen?

    каким образом можно замокать получение файла?

    Можно вынести чтение файла в FileReader и мокать его.
    Можно ничего не мокать и для тестов держать файл-фикстуру который будет читаться исключительно тестами.
    Ответ написан
    Комментировать
  • Как сделать поочередный доступ к сайту?

    @rPman
    В другом ответе все необходимое уже сказано, добавлю

    - организационный, вы пускаете за один и тот же компьютер людей по очереди, определяя следующего человека вручную.
    Развиваем идею:
    * добавить удаленный доступ по rdp/vnc/rustdesk/... чтобы пользователям не требовалось физически подходить к компьютеру
    * добавить автоматическое управление правами у пользователей (для rdp это штатные пользователи ОС, скрипты будут по нескольку строчек хоть на батниках), отбирая права у всех и выдавая право очередному пользователю по списку
    Ответ написан
    Комментировать
  • Как сделать aliases доступными при установке пакета?

    SeaInside
    @SeaInside
    16 лет пилю все эти штуки
    Не очень понятно, где проблема - под алиасами тут будто бы понимаются одновременно именованные экспорты из пакетов и одновременно алиасы для импорта внутри самого приложения.

    Если у вас внешний пакет (иначе непонятно, причём тут `main` в `package.json`), и вам нужно сделать экспорт конкретного файла по "короткому" пути, то следует оформить так:

    // package.json вашего пакета, допустим, "mypackage"
    
    {
      "name": "mypackage",
      "exports": {
        ".": "./dist/index.js",
        "./whatever/": "./dist/whatever/non-index.js"
      } 
    }

    Важно: это минимальная версия, там есть тонкости относительно разного экспорта ESM, CJS и d.ts файлов, но тут такой вопрос не стоит.

    Если у вас есть такой пакет, то в другом пакете, в который вы установили его как зависимость, вы можете импортировать по "короткому" пути:

    // "Короткий" импорт, без него пришлось бы делать что-то вот такое:
    // import { whatever } from 'mypackage/dist/whatever/non-index.js';
    
    import { whatever } from 'mypackage/whatever';


    ---

    Если речь идёт о том, чтобы использовать алиасы внутри одного проекта, то следует сконфигурировать алиасы в `vite.config.ts`, документация вот здесь, выглядеть будет примерно так:

    // vite.config.ts
    
    import { fileURLToPath, URL } from 'node:url';
    
    export default defineConfig({
      resolve: {
        alias: [
          { find: '~components', replacement: fileURLToPath(new URL('./src/components', import.meta.url)) },
        ],
    }),


    И в `(js|ts)config.json`, при наличии, добавить:
    {
      "compilerOptions": {
        "paths": {
          "~components/*": ["./src/components/*"]
        }
      }
    }
    Ответ написан
    4 комментария
  • Как получить переменную из callback php?

    Можно использовать замыкание. Тут фишка в том, что надо использовать в замыкании не обычную строковую переменную, а объект, потому что строковая переменная будет передана в виде копии, и не получится её изменить.
    В коде я заменил класс Client на его мок.

    class Client {
        public function miniTicker(array $callbacks) {
            foreach ($callbacks as $key => $callback) {
                $conn = 'aaaaa';
                $msg = 'msg-'.$key;
                $callback($conn, $msg);
            }
        }
    }
    
    class Message {
        public array $messages = [];
    
        public function addMessage(string $msg) {
            $this->messages[] = $msg;
        }
    }
    
    $message = new Message();
    
    $callbacks = [
        'message' => function ($conn, $msg) use ($message) {
            $message->addMessage($msg);
            
        },
        'ping' => function ($conn, $msg) use ($message) {
            $message->addMessage($msg);
        }
    ];
    
    $client = new Client();
    $client->miniTicker($callbacks);
    var_dump($message->messages);


    В результате в конце у нас выводятся все сообщения
    https://onlinephp.io/?s=tVK7boQwEOyR-IctkDDSkR8gR4...
    Ответ написан
    5 комментариев
  • Есть ли метод кеширования iframe стороннего сайта?

    yesbro
    @yesbro
    Думаю, помогаю думать
    Получать данные для ифрейма через отдельный пхп-скрипт, который будет их кешировать. Обновлять кеш с какой-то переодичностью (например запускать через крон). Данные для вывода на сайт брать из кеша.

    Так что направление мысли верно. Как-то закешировать их можно, а точнее, как угодно. Хоть весь ответ, хоть распрарсить и только необходимые данные. Для кеша тоже можно использовать что будет удобнее: базу данных, редис, мемкеш, файлы.
    Ответ написан
  • Как отслеживать и выводить обновления базы данных?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Есть ли другие способы как реализовать мою задумку или оптимизировать уже имеющийся?

    Да цельный воз и маленькая тележка.

    Обычно у каждой записи в БД имеется поле, в котором регистрируется штамп времени создания и/или последнего обновления записи. Так что всего и делов - запомнить, когда последний раз обращались к БД, и в следующий раз запросить те записи, что изменены позже. MySQL позволяет получать штамп времени с точностью до микросекунды.

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