Загрузка c библиотек из php

В недавнем проекте мне понадобилась библиотека соответствия библиотек.

Однако проект находится в php, и для библиотеки нет привязок php.

Я пытался Google, как создать интерфейс для C libs, но все, что я нашел, было dl функция, которая швы, чтобы загрузить только расширения PHP.

Что мне не хватает?

3 ответа

Решение

Если " php bindings " не существует, похоже, вам придется их разрабатывать;-)

Это делается с помощью расширения PHP, такого как, например:

  • mysql расширение, которое используется для связи с MySQL, связывая библиотеку libmysql (с PHP <= 5.2)
  • curl расширение, это обертка вокруг библиотеки curl
  • и многие другие...


Если вы хотите узнать больше о написании расширений PHP, эти ссылки, вероятно, заинтересуют вас:
(Обратите внимание, что это не совсем легкая задача - но если вам нужно... хорошо ^^; а некоторые скажут, что это не так сложно)

И, если вы действительно интересуетесь этой темой и готовы потратить на нее немного денег, вы можете купить книгу " Расширение и встраивание PHP" ( некоторые страницы также доступны в качестве предварительного просмотра в Google Книгах); Она считается книгой для чтения, когда она заинтересована в этом предмете (на самом деле я купил ее некоторое время назад, и, на мой взгляд, это действительно интересное чтение)

Кстати, автор этой книги также является автором первых четырех статей, на которые я ссылался;-)

Напишите расширение, которое предоставляет tre для PHP (или найдите такое, которое уже делает). Хорошая отправная точка здесь.

Имейте в виду, что вы не сможете загрузить свое расширение на большинстве хостинговых услуг.

Начиная с PHP 7.4, расширение FFI (интерфейс внешних функций) включено, но по умолчанию отключено.

Следует отметить, что на момент написания этой статьи расширение по-прежнему считается ЭКСПЕРИМЕНТАЛЬНЫМ, т.е. его интерфейс может быть изменен без предварительного уведомления.

Пример

Вызов libc printf():

      $ffi = FFI::cdef('int printf(const char *format, ...);', 'libc.so.6');

$ffi->printf('It %s!%s', 'works', PHP_EOL);

SAPI без CLI

По умолчанию FFI работает только в PHP CLI SAPI. Для других SAPI, таких как FPM, есть следующие варианты:

  • Использование предзагрузки через OPcache ( пример ) или
  • параметрffi.enableк true(медленный).

дальнейшее чтение

Другие вопросы по тегам