Комментарии 12
Спасибо за статью! До 7 версии ещё давно все знал, когда писал на PHP, а вот всё что после уже не следил, спасибо что собрали вcе воедино.
Лет 20 назад неплохо зарабатывал устанавливая внешние реалищации opcode cache )))
Есть ли возможность вытаскивать, хранить и запускать opcode? Например, скомпилировать скрипт заранее и распространять в таком виде? И такой же вопрос про машинный код (JIT).
В версиях 5.x было интересное расширение bcompiler, которое позволяло делать это и сохранять в php-файл и нативно запускать php-скрипт (по факту opcode), но при условии что расширение bcompiler присутствует в среде исполнения и скрипт был "скомпилирован" в такой же версии и в такой же архитектуре. Изменение любого условия приводит скрипт в нерабочее состояние.
Это опять история "как бы мне скрыть свой позорный код от заказчика"?
Программы компилируют не для этого.
Так она и так компилируется. Вы же спрашиваете не "как скомпилировать", а как отдать заказчику байткод вместо исходного.
Вопрос про распространение - это не передача заказчику, а условно размещение кода в репозитории и дальнейшее использование (внутри системы, организации или публично).
В частности, проблема с компилированием и использованием на разных архитектурах, версиях и окружении явно должна проявиться. Возможно, есть решение этого вопроса.
Компилируется код в версиях >5.5 под капотом и только в кэш, то есть не хранится на диске рядом с исходником.
У вас логика вверх тормашками
проблема с компилированием и использованием на разных архитектурах, версиях и окружении явно должна проявиться
Разумеется, она и проявится, если класть в репу скомпилированный для определенной версии и архитектуры код, который, действительно не будет работать на других архитектурах :)))
А если класть исходник, то вообще никаких проблем с архитектурами не будет. Как их никогда и не было.
Схематично, простыми словами о внутреннем устройстве PHP (Zend Engine, OPCache, JIT)