PHP: как вызывать стандартные библиотечные функции
Я начинаю с PHP для динамических веб-страниц. У меня есть несколько библиотек, написанных на ANSI C для получения / установки параметров и других проприетарных вещей. Интересно, есть ли простое решение использовать оболочку внутри PHP для вызова этой функции? Есть ли уже существующий класс / библиотека? Какова была бы лучшая практика, чтобы сделать это самостоятельно? Я не хочу делать звонки на внешние приложения и использовать stdin / stdout!
Есть ли простой пример? Я не хочу сейчас копаться в документации Zend, мне нужно только чувство сложности.
4 ответа
Можете ли вы упаковать свои библиотеки в DLL? Если это так, вы можете вызывать их через COM API PHP.
PHP COM Документы: 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 загрузчик) загрузчика DLL (это вызов API, связанный с win32).
Вы также можете иметь посредника.
Gearman предоставляет универсальную прикладную среду для переноса работы на другие машины или процессы, которые лучше подходят для этой работы. Это позволяет вам выполнять работу параллельно, обрабатывать балансировку нагрузки и вызывать функции между языками. Он может использоваться в различных приложениях, от веб-сайтов высокой доступности до транспорта событий репликации базы данных. Другими словами, именно нервная система взаимодействует с распределенной обработкой.
На http://pear.php.net/ я нашел расширение с именем "inline_c". К сожалению я не поддерживается. Но, похоже, я бы предпочел это.