Я бы рекомендовал вариант 2. У меня нет опыта работы с PHP / SWIG, но я проделал то же самое для perl, java и PLSQL (oracle). Мы немного закодируем некоторые основные функции на языке C / C ++ (и будем использовать сторонние библиотеки), которые затем обернем в соответствующую оболочку.
Мы делаем это главным образом, чтобы у нас не было дублирования основных функций в трех языках приложения. Эффективность использования C является дополнительным преимуществом. И использование такой обертки (на мой взгляд) безопаснее, чем «оболочка» с системой, потому что вы можете передавать правильные параметры и возвращаемые значения как переменные, в отличие от грязного бизнеса анализа стандартного вывода.
Основные моменты, которые следует запомнить:
- Вам потребуется использовать некоторую функцию, предоставляемую языком приложения (PHP для вас), чтобы выделить любую память для новых данных. например в Perl его NewSV.
- Обычно для настройки PHP требуется определенный конфигурационный файл .so / .dll