Вместо eval()
Я изучаю плюсы и минусы создания файлов .php на лету с использованием php-кода.
Главным образом потому, что сгенерированный код должен быть доступен для других посетителей и в течение длительного периода времени, а не только для текущего сеанса. Сгенерированные php-файлы создаются с использованием функций, предназначенных для этого и только для этого, и в строго контролируемых условиях (пользовательский ввод никогда не достигнет этих файлов кода).
Таким образом, с точки зрения производительности, какая нагрузка возлагается на веб-сервер при создании .php-файлов для мгновенного выполнения с использованием include()
позже по сравнению с обновлением записи базы данных и всегда запрашивать базу данных при каждом посещении?
Сгенерированные файлы должны обновляться (перезаписываться) довольно часто, но не очень часто по сравнению с тем, как часто они будут выполняться
Каковы другие плюсы / минусы? Должна ли возможность сочетания одного пользователя, перезаписывающего файлы кода в то же время, что и другие, выполняющего их в настоящее время, вводить сложное одновременное разрешение конфликтов? Используете Mutex? Возможно ли перезаписать файлы, если посетители постоянно их «просматривают» (исполняют)?
PS. я не заинтересованы в альтернативных методах / решениях для достижения «той же» цели, например:
РЕДАКТИРОВАТЬ:
Есть много вопросов о том, какой «тип» кода генерируется. Не вдаваясь в подробности, могу сказать: это очень контекстно-зависимый код. Код не основан на прямом вводе пользователем, но вводится с точки зрения выбора, положения и флагов. Как «закрытые» объекты по отношению к другим объектам. Большинство частей кода связаны друг с другом многими различными, но очень контролируемыми способами (аналогично связанным спискам, генетическим ячейкам в AI-code и так далее), поэтому запрос к базе данных исключен. Один файл кода будет включать один или несколько других и т. Д.
Я делаю то же самое в приложении. Он генерирует статический код PHP из данных в базе данных MySQL. Я храню код в memcached и использую «eval» для его выполнения. Только когда что-то меняется в базе данных MySQL, я регенерирую PHP. Это экономит очень много чтения MySQL
Других решений пока нет …