Задать вопрос
  • Что означает синтаксис dockerfile (php-fpm)?

    Vamp
    @Vamp
    а почему у мня такой вывод (отличается от вашего) (FROM php:7.4-fpm-alpine3.16)

    Потому что apk info не лезет в интернет, а смотрит информацию в кешированном индексе. Вы во всех командах apk прописываете флаг --no-cache, поэтому индекса у вас нет, из-за чего команда и валится с ошибкой.

    в какой момент и для чего нам нужно libmcrypt (без дев)?

    Нужно в момент запуска php-fpm. Когда php загружает модули, автоматически загружаются и системные библиотеки из so файлов.

    если же apk add libmcrypt-dev и потом НЕ удалять -dev пакет - все работает (подозревая что он( libmcrypt-dev) скачивает как зависимость libmcrypt (поэтому, как вы и пояснили, при удалении -dev из папки .so пропадает), а тут НЕ удаляем -dev поэтому и простой пакет сохраняется

    Всё правильно, так как при установке сразу двух пакетов apk add libmcrypt libmcrypt-dev, пакет libmcrypt будет промаркирован пакетным менеджером apk как "установленный вручную" и поэтому не будет удаляться автоматически при удалении libmcrypt-dev.

    но я-то всегда думал что libmcrypt-dev (вместе с g++ gcc make ....) компилируют мне этот .so файлик и мне после этого не нужен пакет без -dev суффикса (все ведь у меня в папке so лежит и именно он "работает"), но, когда ковыряюсь - понимаю что все не так, файлик so пропадет, нужена библиотека без -dev, но в какой момент и для чего....

    Ещё раз для закрепления материала. Пакет libmcrypt содержит скомпилированную динамическую библиотеку, которая распаковывается по пути /usr/lib/libmcrypt.so.4. Пакет libmcrypt-dev содержит в себе сишный заголовочный файл, который нужен для компиляции php модуля mcrypt. После компиляции php модуля mcrypt этот сишный заголовочный файл больше не нужен и его следует удалить. У скомпилированного php модуля mcrypt образуется зависимость от файла /usr/lib/libmcrypt.so.4:

    /var/www/html # ldd /usr/local/lib/php/extensions/no-debug-non-zts-20190902/mcrypt.so
    	/lib/ld-musl-x86_64.so.1 (0x7f07e7381000)
    	libmcrypt.so.4 => /usr/lib/libmcrypt.so.4 (0x7f07e7346000) <--------- вот она
    	libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7f07e7381000)
    	...

    Так как пакет libmcrypt неявно устанавливается вместе с libmcrypt-dev, то при удалении пакета libmcrypt-dev, пакет libmcrypt так же будет неявно удалён. Это поведение не уникальное для альпиновского пакетного менеджера. Так действуют и apt, и yum, и прочие менеджеры пакетов из других дистрибутивов. Так как libmcrypt нужен для работы php модуля mcrypt, то чтобы пакет libmcrypt неявно не удалялся вместе с пакетом libmcrypt-dev, пакет libmcrypt необходимо устанавливать явно. Рецепт успеха выглядит так:

    apk add libmcrypt libmcrypt-dev
    pecl install mcrypt
    docker-php-ext-enable mcrypt
    apk del libmcrypt-dev
  • Что означает синтаксис dockerfile (php-fpm)?

    Vamp
    @Vamp
    вы говорите "Устанавливать нужно обе версии. Обычная версия "freetype" содержит саму библиотеку в so файле, которую gd будет подключать в рантайме. " можно пояснить более простыми словами?

    so - это формат файла, в котором создаются динамические библиотеки. Ближайшим аналогом будут dll файлы в ОС windows. Ещё можно усмотреть некоторую аналогию с composer пакетами.

    я проксперементировал и удалил apk add freetype, оставив только dev версию и у меня образ собрался запустился и php -m показываем пакеты, но, как я понимаю все же что-то не так, как мне понять что не так?

    Это потому что пакет freetype всё равно установился, так как является зависимостью к freetype-dev.
    /var/www/html # apk info --depends freetype-dev
    freetype-dev-2.12.1-r0 depends on:
    freetype=2.12.1-r0 <------ вот
    pc:libbrotlidec
    pc:libpng
    pc:zlib
    pkgconfig

    То есть, устанавливая freetype-dev, автоматически установится ещё и freetype.

    а еще добавил удаление -dev библиотек в конце dockerfile образ собрался но теперь ругается сам php

    Вероятно это из-за того, что вы не устанавливали пакет imagemagick. Установили imagemagick-dev, вместе с ним установился imagemagick. При удалении imagemagick-dev удалилась ещё и зависимость imagemagick, так как она не была установлена явным образом.
  • Отличия GET от POST?

    Vamp
    @Vamp
    Василий Банников, частенько вижу кнопки выхода из аккаунта в таком виде:
    <a href="/logout">выйти</a>
    Такая ссылка не идемпотентна.
  • Как данные перемещаются в сети интернет, всегда конвертируются в кадры Ethernet или остаются в пакетах IP?

    Vamp
    @Vamp
    jofumi, я не очень разбираюсь в истории сетей. После комментария Максим Гришин, сходил в википедию и оказалось, что Ethernet изобрели вообще раньше упомянутых Token Ring и ARCnet, что подтверждает моё невежество в этом вопросе. Так-то конечно были разные протоколы и до IP, и до Ethernet, но они были разработаны под конкретное оборудование и я сомневаюсь, что там была какая-то иерархия и классификация.

    Классификация по уровням OSI довольно условная и не обязывает производить упаковку данных строго сверху вниз. Например, тот же самый протокол ARP считается L2 протоколом. То есть, находящимся на втором уровне OSI, так же как и Ethernet. И всё же ARP оборачивается в Ethernet.

    Или взять VPN, где упаковка вообще зиг-загом идёт - сначала трафик заворачивается как обычно сверху вниз, а затем ещё раз сверху вниз, после чего наконец покидает машину. То есть HTTP -> TCP -> IP -> Ethernet -> TCP/UDP (в зависимости от технологии VPN) -> IP -> Ethernet -> физический линк. Или если нарисовать эту же схему уровнями OSI: L7 -> L4 -> L3 -> L2 -> L4 -> L3 -> L2 -> L1. И это вполне обыденная ситуация. Бывают и более экзотические варианты. Например, мне встречалась схема, когда внутри VPN туннеля строился GRE туннель, внутри которого был ещё vxlan туннель. Вот уж где я наелся проблем с MTU и фрагментацией пакетов.

    Спасибо за уточнение про DHCP, я не сильно углублялся, но его всегда указывают между сетевым уровнем и сетевых интерфейсов по TCP/IP, а он еще и по UDP...
    DHCP, между прочим, считается прикладным протоколом (L7 по OSI).

    Я не собираюсь работать с сетями, но базовые знания нужны.
    Отличный настрой! Расширить кругозор всегда полезно.
  • Русский open-source, есть ли он?

    Vamp
    @Vamp
    Вы искали что-то конкретное и поэтому не нашли? Так-то российского опенсорса полно.
  • Почему поток не останавливается?

    Vamp
    @Vamp
    pshevnin, чтобы засыпали liche и sude, то wait() нужно вызывать именно в них. То есть в методе run(). А в методе main убрать wait() и оставить только notify().
  • Как подключиться к wss по такому адресу?

    Vamp
    @Vamp
    aspirantes, а дальше думать особо нечего - выкидывайте свой код и берите готовую библиотеку. Socket функции настолько низкоуровневые, что при их использовании вам придется самостоятельно написать код реализующий протоколы tls, http и websocket.
  • Поиск IP-адреса по MAC адресу. Разные VLAN. Как быть?

    Vamp
    @Vamp
    SpecAgent42, тогда смотреть arp таблицу на компьютере, находящемся в нужном vlan.
  • Есть ли какие-то работающие альтернативы IP-адресации (и до кучи - DNS) как таковой? Как еще можно организовать сеть?

    Vamp
    @Vamp
    Роми, верно, IP резолвится в MAC посредством протокола ARP. Вот только область действия IP - весь мир, а MAC - только ваша локалочка (L2 сегмент).

    А какое приложение за это отвечает? Драйвер сетевой карты?

    Да.

    И, соответственно, мой wifi-роутер ничего не знает о mac-адресе моего ноута?

    Конечно знает. А ещё хранит таблицу соответствия MAC-IP, чтобы правильно маршрутизировать трафик.


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

    Можно, почему нет. В микросхемах реализован только 1 уровень, но в очень продвинутых роутерах в железе может быть имплементирован ещё и ethermet (MAC именно здесь).
  • Как получить четвертый элемент ассоциативного массива?

    Vamp
    @Vamp
    Михаил, это документированная фича, а не особенность реализации.

    An array in PHP is actually an ordered map.
  • Как получить четвертый элемент ассоциативного массива?

    Vamp
    @Vamp
    Массивы в php реализованы через структуру linked hash map. Так что порядок элементов сохраняется всегда.
  • Технический нейминг серверов. По какому принципу называть сервера?

    Vamp
    @Vamp
    Нравится эта идея. Но опять же хотелось бы покрывать не только физические, но и виртуальные

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

    Это получатся тоже самое, что и номер из таблицы m1,a0.

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

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

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

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

    Не бойтесь экспериментировать. С первого раза вы точно не придумаете идеальный нейминг. Это эволюционный процесс.
  • За Vulkan API будущее?

    Vamp
    @Vamp
    Александр Скуснов, тем, что он только на windows и xbox?
  • Как сделать проксирование на тот же домен в Nginx?

    Vamp
    @Vamp
    Денис Гончаренко, если IP динамический, то без костылей не получится, так как nginx производит резолвинг доменов только единожды в момент релоада конфигурации и дальше работает уже с IP адресом.

    Попробуйте костыль с переменной:
    server {
            listen          80;
            server_name     domain.com;
    
            resolver 8.8.8.8;
            set $backend "http://domain.com";
    
            location / {
                    proxy_set_header Host $host;
                    proxy_set_header X-Real-IP  $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_pass $backend;
            }
    }
  • Как сделать проксирование на тот же домен в Nginx?

    Vamp
    @Vamp
    Опишите лучше проблему, которую вы пытаетесь решить таким странным образом.
  • Как правильно написать свой обработчик ошибок php?

    Vamp
    @Vamp
    IvanIF, будет то же самое как и при возникновении ошибки в любом другом месте - она попадёт в error_handler, превратится в ErrorException и полетит в ближайший catch блок.

    Вы можете делать вложенные конструкции
    try {
        // ...
    } catch (\PDOException $e) {
        try {
            // ...
        } catch (\Throwable $e2) {
            
        }
    }
  • Как правильно написать свой обработчик ошибок php?

    Vamp
    @Vamp
    IvanIF, у ErrorException есть поля для хранения имени файла и номера строки, на которой возникла ошибка. По сути ErrorException как раз и придуман для замены обычных ошибок на исключения.
  • Какие еще проекты сделать junior на php помимо дефолтных?

    Vamp
    @Vamp
    ivanivanov15122021, я наоборот считаю, что нужно начинать с хардкора. Когда меня спрашивают "что бы такое сделать для тренировки на пхп" я всегда отвечаю - "делай cms". Задача максимум. Во-первых её можно делать по частям, во-вторых, в cms есть работа с базой, файлами, регулярками, разработка архитектуры... чего там только нет. Практики будет выше крыши в совершенно разных областях. Ну и я избавлен от дальнейших вопросов "сделал, что дальше?" )). Если человек осилил создание cms, то что делать дальше он уже и так знает сам.