FFI и Opcode cache

fixxxer

К.О.
Партнер клуба
можно :)
We can not hook into default object creation process without writing a C extension, but we have an access to the zend_class_entry->create_object callback. We can replace it with our own implementation that could allocate our custom object handlers list for this class and save a pointer to it in memory, providing API to modify object handlers in runtime, as they will point to one single place.

We will override low-level write_property handler to prevent changes of properties for every instance of class. But we should preserve original logic in order to allow initialization in class constructor, otherwise properties will be immutable from the beginning. Also we should throw an exception for attempts to unset property in unset_property hook. And we don't want to allow getting a reference to properties to prevent indirect modification like $obj->field++ or $byRef = &$obj->field; $byRef++;.
Ух, блин. Это сильно повезло, что коллбэк есть :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
про immutable прикольно!

но зачем ты хочешь делать include php-файлов в гамаке и стоя через stream wrapper?
 

fixxxer

К.О.
Партнер клуба
прикольно!
а зачем тебе читать php-файлы через stream wrapper?
чтобы евал не делать и на диск в рантайме не писать. у него там говногенерация говнокода в говноcms. нам с тобой такое не понять, у cms-ников свой мир с шаред хостингами с аплоадом кода по ftp на php 5.3.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ненене Дэвид Блейн, не надо кешировать динамически сгенерированный на лету код, нефиг opcode cache насиловать.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
нужна безопасность - разделяй и властвуй: middleware fpm принимает запрос от клиента, и делает запрос к backend на swoole/runner, для fpm все readonly, а backend может писать свой кеш, потери уровня 1mc ты не заметишь

безопасность - это дорого, так делается pci dss compliance, к слову
 

fixxxer

К.О.
Партнер клуба
бгг, в таких делах там шаред с mod_php одним на всех, какой swoole, какой pci dss :)

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

Yoskaldyr

"Спамер"
Партнер клуба
Как всегда любят здесь додумывать :)
Сразу почему-то решили что шаред. Но как бы я выше написал что есть админ который хочет чтобы все было RO и это с очень большой вероятностью подразумевает что речь о чем-то выделенном. Потому что какой может быть админ на шаред???
Проблема с кешированием твиг шаблонов, т.к. твиг используется для небольших блоков которые могут забивать менеджеры в админке (да они умеют в верстку и шаблоны, что не редкость в мелком и среднем бизнесе). Твиг работает без генерации файлов, но очень мееееедленно особенно когда таких блоков на странице относительно много. Потому и сделан велосипед через eval с хранением скомпилированного кода шаблона в базе/мемкеше. И все равно этот тормознутый велосипед быстрее компиляции шаблонов на лету. Так что почти никакой черной магии по типу AOP и подобного - просто шаблоны. Для пользовательских блоков используется твиг, т.к. писать свой шаблонизатор еще большее извращение, чем небольшой тюнинг того же твига.

Все-таки у большинства участников клуба серьезная профдеформация. Или бессмысленное и беспощадное велосипедостроительство (наш "любимый" Сталкер) или рабы с галер (хорошо что на долго не задерживаются в клубе) или большинство старожилов - лиды и синьоры из кровавого энтерпрайза. И если брать последний вариант - это редко о архитектуре и еще реже о коде как таковом - это больше об организации или распиле бюджета.
Только вот дофига и больше сайтов которые пилятся небольшими командами разработчиков 1-3 человека и получают они часто больше стандартной ставки синьора. Почему это важно - потому что таких программистов просто дофигища и работы в этой сфере тоже дофигища (мелкий и средний бизнес). А специалистов нет, хоть и деньги есть. Спецы не идут ибо не интересно и нет бюджетов для распила, а джуны и говнокодеры могут только как умеют :(
Потому там так и распространены коробочные решения. И часто это хорошо, потому что в 90% случаев когда самопис - это вообще лютый треш. А коробочные решения - это почти всегда посредственное в общем качество кода из-за кучи компромиссов или из-за уровня разработчков, т.е. код может быть от сала до металла. И вот всего этого я насмотрелся за последние несколько лет очень и очень много. Т.к. у меня неплохая выборка - внезапно я в этих случаях выступаю как сисадмин, а не как программист :))))
 

fixxxer

К.О.
Партнер клуба
Ситуация, когда на шареде php работает под юзером апача, а php-код под отдельным uid аккаунта, довольно частая, и как раз нежелание выставлять 777 на compile path вполне понятно. А админ, ну как, тот же, который Битрикс по фтп заливает и картриджи в принтере меняет, бгг. Вполне частая ситуация.

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

Yoskaldyr

"Спамер"
Партнер клуба
@fixxxer там выделенный сервер. И надо понимать что когда "админ" это кто-то из приближенных владельца - это неизлечимая ситуация. И в чем-то я его понимаю. Учитывая сколько говнокода было до текущего и они разрабам вообще теперь не доверяют. И в данном случае я больше как сторонний разработчик для тюнинга базы/запросов и вообще производительности, т.е. что можно подкрутить без глобального переписывания. Обычно с админами проблем нет, т.к. они отсутствуют как класс - нет админов и нет проблем :) Чаще я остаюсь админить на поддержке после настройки/тюнинга. Но не в этом случае

Когда создавал тему исходил чисто из интереса, а можно сделать такое извращение или нет
 

MiksIr

miksir@home:~$
Большинство "старожилов", мне кажется, умеют разговаривать хоть с админами, хоть с "приближенными", донося свою мысль. А если там неадекват - не тратят свое время на такой бизнес вообще. Или делают "по инструкции". Например, сделать админку на внутреннем дев сервере, а потом все это по кнопке брать, собирать в пакет и хреначить на прод в RO. Формально задача выполнена. И даже можно премию попросить за систему отката изменений.
 

fixxxer

К.О.
Партнер клуба
Ну если свой дедик, я тебе дал, гхм, решение, я, конечно, не проверял, но судя по сорцам, на 99% уверен что сработает. Это конечно суперадовый костыль, но если исключить патчи на пхп, единственный вариант.
 

Yoskaldyr

"Спамер"
Партнер клуба
Например, сделать админку на внутреннем дев сервере, а потом все это по кнопке брать, собирать в пакет и хреначить на прод в RO. Формально задача выполнена. И даже можно премию попросить за систему отката изменений.
Какой нахрен деплой по кнопке, какой внутренний сервер? Бекап есть в лучшем случае у половины. У большинства все еще полное не понимание какой бардак в 90% случаев основной массы мелких и средних сайтов, даже когда сайт приносит основной доход для кучи народа. И все советуют будто бы я этот мрак весь писал.
Не моя задача все это делать, да и это просто никому не нужно. У меня часто задача оптимизировать сервер/базу/немного код и часто это можно сделать без глубоких знаний написанного говнокода (хорошо если после этого клиент останется на поддержке по сисадминству).
И это выборка только из тех кто может себе финансово и морально позволить заказать такую услугу. Когда шаред и подобное там вообще мрак.
Очень часто любят обсуждать большие команды и т.п. Но по факту для среднего и мелкого бизнеса это нереальная ситуация (кроме чисто ИТ компаний). Максимум что я видел 3 разработчика в команде, все что больше - аутсорс (например дизайн иногда). Ну еще где может быть относительно много разработчиков - это говностудии, но это те же галеры только в профиль.
 

Yoskaldyr

"Спамер"
Партнер клуба
Ну если свой дедик, я тебе дал, гхм, решение, я, конечно, не проверял, но судя по сорцам, на 99% уверен что сработает. Это конечно суперадовый костыль, но если исключить патчи на пхп, единственный вариант.
Как сказал выше - очень интересный вариант. О таком извращении не думал :) По свободе попробую
 

Yoskaldyr

"Спамер"
Партнер клуба
Большинство "старожилов", мне кажется, умеют разговаривать хоть с админами, хоть с "приближенными", донося свою мысль.
Так может писать только тот кто имеет очень небольшой опыт общения с владельцами или руководством мелкого и среднего бизнеса, не связанного с IT. У них всегда есть свой "проверенный" тыжпрограммист-специалист. И если он почему-то упрется (по любым причинам), доказать будет нереально, т.к. любой аутсорс - это люди со стороны и к ним всегда меньше доверия. И может доходить до абсурдного. Но как я писал не раз: фриланс он такой - бессмысленный и беспощадный :)
 

fixxxer

К.О.
Партнер клуба
Да в целом нифига не так, если наняли стороннего специалиста за немало денег, его слушают. Всегда можно все обсудить, обосновать свою точку зрения и прийти к нормальному решению. Бывают иногда, конечно, и упоротые, но с такими и долгосрочные отношения как-то не складываются. Долгосрочные в смысле дольше пары-тройки недель, бгг.

Хотя я по US рынку сужу, да и фрилансом я бы это называть не стал. А ру-фриланс я в гробу вертел. И, кстати, пассивно-агрессивный тыжпрограммист это в основном в exUSSR распространенное явление.
 
Последнее редактирование:

Yoskaldyr

"Спамер"
Партнер клуба
Хотя я по US рынку сужу, да и фрилансом я бы это называть не стал. А ру-фриланс я в гробу вертел. И, кстати, пассивно-агрессивный тыжпрограммист это в основном в exUSSR распространенное явление.
у меня как раз exUSSR и Европа. Тыжпрограммист - это да рунет (и не зависимо от размера фирмы). А в Европе вообще разброс и шатание, уровень неадеквата колеблется от значительно хуже рунета, до почти уровень Штатов. Уровень кода и всего что с ним связано в Европе в среднем по больнице в разы хуже чем в рунете. Но это мелкий и средний бизнес.

Вот со Штатами тоже проблем нет. Но они у меня редко бывают.
 

fixxxer

К.О.
Партнер клуба
С Европой как-то не складывалось, но могу предположить, что, скажем, Германия и Испания это две большие разницы. :)
 
Сверху