Не думайте в терминах PHP или другого языка общего назначения, подумайте о минимальном языке, достаточном для выражения операций в вашем домене обработки изображений. Пользователи представляют выражения на этом языке (DSL), эти выражения анализируются на стороне сервера и передаются в ваш код.
Важно, чтобы сначала подумать о диапазоне операций обработки изображений и о том, как их можно комбинировать. Это скажет вам, насколько выразительным должен быть язык. После того, как вы это проработали, есть много вариантов того, как язык будет выглядеть синтаксически. Синтаксис языка может зависеть от компромисса между простотой использования и простотой синтаксического анализа.
Если вы можете написать или найти парсер для таких выражений, это может быть проще всего для пользователей. На самом деле, может ли кто-нибудь рекомендовать существующий оценщик выражений, который будет работать в таких случаях (например, может ли Smarty безопасно запускать пользовательские выражения?) Или действительно генератор парсеров для PHP?
resize(rotate("foo.png", 90), 50)
Язык как this может быть менее легким для пользователей, но он может быть обработан с помощью довольно простой стек машины:
"foo.png" 90 rotate 50 resize
Еще проще, XML-язык, основанный, как это не делает нужен свой собственный парсер:
<resize percent="50"><rotate degrees="90"><img src="foo.png"></rotate></resize>
Использование DSL не защищает вас от атак, относящихся к домену, например, кто-то может использовать язык выше, чтобы изменить размер изображения в зиллионы Пиксели и используйте всю память сервера. Таким образом, для DSL должна быть какая-то среда выполнения, которая ограничивает количество ресурсов, которые может использовать любой пользовательский сценарий.
Предоставление пользователям возможности запуска PHP-кода не имеет безопасных путей. – RaYell