Я начинаю с PHP для динамических веб-страниц. У меня есть несколько библиотек, написанных в ANSI C для получения / настройки параметров и других проприетарных материалов. Интересно, есть ли простое решение использовать оболочку внутри PHP для вызова этих функций? Есть ли уже существующий класс / библиотека? Какая была бы лучшая практика для этого? Я не хочу делать вызовы внешним приложениям и использовать stdin / stdout!
Есть ли простой пример? На данный момент я не хочу копать документацию Zend, мне нужно только чувство сложности.
Можете ли вы упаковать библиотеки в DLL? Если это так, вы можете вызвать их через COM-интерфейс PHP.
PHP COM Docs: http://us3.php.net/manual/en/book.com.php
Пример кода:
<?php $com = new COM("DynamicWrapper"); $com->Register("KERNEL32", "Beep", "i=ll", "f=s", "r=l"); $com->Beep(800, 10);
В противном случае вы можете написать расширение, содержащее пользовательскую функцию-оболочку (т. Е. Execute_through_wrapper ('yourfunc')). Вот документ о написании php-функций в C.
http://php.net/manual/en/internals2.funcs.php
Редактировать:
http://abhinavsingh.com/blog/2008/12/php-extensions-how-and-why/
Вот краткое руководство по написанию расширений на C. Не должно быть слишком сложно написать функцию обертки. После создания расширения он может динамически загружаться через dl()
(очень опасный и обесцениваемый).
http://us2.php.net/manual/en/function.dl.php
Это единственные варианты в вашем случае. Не существует эквивалента linux (.so loader) загрузчика dll (его связанного с win32 вызова api).
Вы также можете иметь посредника в качестве посредника.
Gearman предоставляет общую инфраструктуру приложений для работы с другими машинами или процессами, которые лучше подходят для работы. Он позволяет выполнять параллельную работу, обрабатывать баланс нагрузки и вызывать функции между языками. Он может использоваться в различных приложениях, с веб-сайтов высокой доступности и для транспорта событий репликации базы данных. Другими словами, именно нервная система связана с передачей распределенной обработки.
Что о SWIG? http://www.swig.org/
В http://pear.php.net/ я нашел расширение с именем «inline_c». К сожалению, я не поддерживаю. Но похоже, что это будет тот материал, который я бы предпочел.