Mam aplikację internetową PHP, która musi wywoływać funkcję w bibliotece C++. Ta biblioteka jest dostarczana przez dostawcę (libfoo.a na komputerze z systemem Linux).Wywołanie biblioteki C++ z aplikacji internetowej PHP: system() vs rozszerzenie SWIG PHP?
Moim pierwszym odruchem jest stworzenie pliku wykonywalnego C++, która łączy przeciwko libfoo.a i przekazuje parametry wiersza polecenia do funkcji. Aplikacja internetowa PHP może następnie wykonać wywołanie system() do mojego pliku wykonywalnego C++. To byłoby łatwe do wdrożenia. Moją obawą jest to, czy spowodowałoby to dodatkowe obciążenie dla stworzenia nowego procesu systemowego dla każdego połączenia. Ile kosztowałoby to obciążenie?
Alternatywą jest to, że mogę użyć SWIG do objęcia funkcji C++ w rozszerzeniu PHP, ale nie mam kodu źródłowego C++. Czy SWIG obsługuje łączenie z biblioteką ".a"? Czy wymagałoby to od każdego innego inżyniera z mojego zespołu, aby zmienili konfigurację PHP tak, aby tworzył bibliotekę libfoo.a?
Jeżeli narzut system() wywołanie jest mała (< 30 ms), wolałbym opcję nr 1, jak wydaje się o wiele prostsze do tworzenia C++ wykonywalny raz, a nie budować go w PHP podanie. Jakie są twoje zalecenia dotyczące dwóch opcji?
Czy potrzebujesz danych wyjściowych z 'C++'? jeśli nie, możesz rozważyć wypchnięcie wywołania do tła - http://stackoverflow.com/questions/45953/php-execute-a-background-process – ajreal
tylko zwykłą obserwację zewnętrzną, ale nie wiedząc, jak często będzie ona wywoływana, brzmi, jakbyś był lepszy od tworzenia pliku wykonywalnego C++ (który pozwoliłby na użycie poza PHP jako bonus). Jeśli zrobiłeś to w rozszerzeniu PHP, wyobrażam sobie, że nieuchronnie zmierzysz się z koszmarem dystrybucji i kompatybilności nawet dla małej, prywatnej bazy użytkowników. Czy próbowałeś lub odkryłeś coś, odkąd otworzyłeś to pytanie? –