PHP.mk документација

FFI::load

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

ffi.load.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека ffi.load.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
FFI::load

Референца за `ffi.load.php` со подобрена типографија и навигација.

ffi.load.php

FFI::load

(PHP 7 >= 7.4.0, PHP 8)

FFI::loadВчитува C декларации од C заглавие датотека

= NULL

public static FFI::load(string $filename): ?FFI

Вчитува C декларации од C заглавие датотека. Можно е да се специфицираат споделени библиотеки што треба да се вчитаат, користејќи специјални FFI_LIB дефиниции во вчитаната C заглавие датотека.

Параметри

filename
Името на C заглавие датотека. Низа што содржи секвенца од декларации на обичен C јазик (типови, структури, функции, променливи, итн.). Всушност, оваа низа може да биде копирана од C заглавја. #include, #define и CPP макроата не работат, освен за специјални случаи наведени подолу. Заглавие датотека should содржи #define изјава за FFI_SCOPE променлива, на пр.: #define FFI_SCOPE "MYLIB". Погледнете го вовед во класа интерполација на низи Заглавие датотека may содржи #define изјава за FFI_LIB променлива за да се специфицира библиотеката што ја изложува. Ако е системска библиотека, потребно е само името на датотеката, на пр.: #define FFI_LIB "libc.so.6". Ако е прилагодена библиотека, потребен е релативен пат, на пр.: #define FFI_LIB "./mylib.so".

Вратени вредности

во нормалниот глобален опсег. Други системи нема да успеат да ги решат овие симболи. FFI објект, или null при неуспех.

Дневник на промени

Верзија = NULL
8.3.0 Името на опсегот дефинирано со специјален сега е дозволено во претходно вчитани скрипти кога тековниот системски корисник е ист како оној дефиниран во opcache.preload_user директива за конфигурација.

Види Исто така

Белешки од корисници 2 забелешки

jungmann0 at gmail dot com
пред 5 години
Since #include's and #define's other than FFI_LIB and FFI_SCOPE are not supported in the header, you may want to use the C preprocessor to pre-process your headers in order to resolve all #include's and macros.

I use -D"__attribute__(ARGS)=" to remove function attributes as well, which are not supported by FFI either.

This is my script:

echo '#define FFI_SCOPE "YOUR_SCOPE"' > header-ffi.h
echo '#define FFI_LIB "/path/to/your_lib.so"' >> header-ffi.h
cpp -P -C -D"__attribute__(ARGS)=" header_original >> header-ffi.h
ojrask at gmail dot com
пред 6 години
Regarding the `FFI_LIB` constant:

The path given can be either relative, or absolute, or then refer to a library that is in your global libraries path (i.e. where libc.so.6 and friends are).

The absolute path and global lib path work as expected. The relative path does not work from the header file path, but the current working directory instead. So when you create header files for FFI usage, remember that the PHP script can be called anywhere and this means any relative paths in `FFI_LIB` will most probably fail.

Not sure if there is some possibility to make it use paths relative to the script being called, or relative to the header file being loaded. That would make more sense to me at least.

Right now `FFI_LIB` is quite unusable when it comes to making FFI-powered PHP packages that can be installed literally anywhere on a system. `FFI::cdef` works just as well, but `FFI::scope` also seems to rely on `FFI_LIB` meaning it will fail with relative paths as well.

I guess this comes from the C function `dlopen` as is.
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.