svn: /phpdoc/ru/trunk/reference/ffi/ book.xml configure.xml constants.xml examples.xml ffi.cdata.xml ffi.ctype.xml ffi.exception.xml ffi.parserexception.xml ffi.xml setup.xml
[email protected] (Andrey Gromov)
| Newsgroups | php.doc.ru |
|---|---|
| Message-ID | <[email protected]> |
rjhdby Sun, 15 Dec 2019 10:07:01 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=348518
Log:
new
Changed paths:
A phpdoc/ru/trunk/reference/ffi/book.xml
A phpdoc/ru/trunk/reference/ffi/configure.xml
A phpdoc/ru/trunk/reference/ffi/constants.xml
A phpdoc/ru/trunk/reference/ffi/examples.xml
A phpdoc/ru/trunk/reference/ffi/ffi.cdata.xml
A phpdoc/ru/trunk/reference/ffi/ffi.ctype.xml
A phpdoc/ru/trunk/reference/ffi/ffi.exception.xml
A phpdoc/ru/trunk/reference/ffi/ffi.parserexception.xml
A phpdoc/ru/trunk/reference/ffi/ffi.xml
A phpdoc/ru/trunk/reference/ffi/setup.xml
svn-diffs-348518.txt
(text/x-diff, 40.6 KB)
Added: phpdoc/ru/trunk/reference/ffi/book.xml
===================================================================
--- phpdoc/ru/trunk/reference/ffi/book.xml (rev 0)
+++ phpdoc/ru/trunk/reference/ffi/book.xml 2019-12-15 10:07:01 UTC (rev 348518)
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 347385 Maintainer: rjhdby Status: ready -->
+<!-- Reviewed: no -->
+
+<book xml:id="book.ffi" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <title>Интерфейс внешней функции (Foreign Function Interface)</title>
+ <titleabbrev>FFI</titleabbrev>
+
+ <preface xml:id="intro.ffi">
+ &reftitle.intro;
+ &warn.experimental;
+ <para>
+ Это расширение позволяет загружать общие(shared)
+ библиотеки (<filename>.DLL</filename> или
+ <filename>.so</filename>), вызывать C-функции и получать
+ доступ с структурам языка C из PHP без необходимости
+ глубоко изучать API расширений Zend и стороннего,
+ "промежуточного" языка. Публичный API реализован как
+ один единственный класс <classname>FFI</classname> с
+ некоторым набором статических методов (некоторые из них
+ могут вызываться динамически) и переопределенными методами
+ объекта, что позволяет взаимодействовать с данными С.
+ </para>
+ <caution>
+ <para>
+ Расширение FFI довольно опасно, поскольку позволяет
+ взаимодействовать с системой на очень низком уровне.
+ Расширение FFI должно использоваться только разработчиками,
+ знакомыми с языком С и умеющими использовать его API.
+ Для минимизации риска, расширение может быть запрещено
+ директивой <link linkend="ini.ffi.enable">ffi.enable</link>
+ в &php.ini;.
+ </para>
+ </caution>
+ <note>
+ <para>
+ Расширение FFI не делает классический API расширений PHP
+ устаревшим; оно предназначено для
+ взаимодействия с функциями и структурами данных C.
+ </para>
+ </note>
+ <tip>
+ <para>
+ Сейчас доступ к структурам данных FFI примерно в 2 раза
+ медленнее чем доступ к объектам и массивам PHP. Таким
+ образом, нет повода использовать FFI для ускорения;
+ однако его можно использовать для сокращения потребляемой памяти.
+ </para>
+ </tip>
+ </preface>
+
+ &reference.ffi.setup;
+ &reference.ffi.constants;
+ &reference.ffi.examples;
+ &reference.ffi.ffi;
+ &reference.ffi.ffi.cdata;
+ &reference.ffi.ffi.ctype;
+ &reference.ffi.ffi.exception;
+ &reference.ffi.ffi.parserexception;
+</book>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/ru/trunk/reference/ffi/book.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
Added: phpdoc/ru/trunk/reference/ffi/configure.xml
===================================================================
--- phpdoc/ru/trunk/reference/ffi/configure.xml (rev 0)
+++ phpdoc/ru/trunk/reference/ffi/configure.xml 2019-12-15 10:07:01 UTC (rev 348518)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 347649 Maintainer: rjhdby Status: ready -->
+<!-- Reviewed: no -->
+
+<section xml:id="ffi.installation" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
+ &reftitle.install;
+
+ <para>
+ Для включения расширения FFI, PHP надо сконфигурировать
+ с ключем <option role="configure">--with-ffi</option>.
+ </para>
+
+ <para>
+ Пользователям Windows будет необходимо добавить
+ <filename>php_ffi.dll</filename> в &php.ini;.
+ </para>
+
+</section>
+
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/ru/trunk/reference/ffi/configure.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
Added: phpdoc/ru/trunk/reference/ffi/constants.xml
===================================================================
--- phpdoc/ru/trunk/reference/ffi/constants.xml (rev 0)
+++ phpdoc/ru/trunk/reference/ffi/constants.xml 2019-12-15 10:07:01 UTC (rev 348518)
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 347385 Maintainer: rjhdby Status: ready -->
+<!-- Reviewed: no -->
+
+<appendix xml:id="ffi.constants" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
+ &reftitle.constants;
+ &no.constants;
+</appendix>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/ru/trunk/reference/ffi/constants.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
Added: phpdoc/ru/trunk/reference/ffi/examples.xml
===================================================================
--- phpdoc/ru/trunk/reference/ffi/examples.xml (rev 0)
+++ phpdoc/ru/trunk/reference/ffi/examples.xml 2019-12-15 10:07:01 UTC (rev 348518)
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 347522 Maintainer: rjhdby Status: ready -->
+<!-- Reviewed: no -->
+
+<chapter xml:id="ffi.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
+ &reftitle.examples;
+ <section xml:id="ffi.examples-basic">
+ <title>Простые примеры использования FFI</title>
+ <para>
+ Перед погружением в детали FFI API, давайте рассмотрим
+ несколько примеров упрощенного использования FFI API
+ в стандартных задачах.
+ </para>
+ <note>
+ <para>
+ Для некоторых из этих примеров понадобится
+ библиотека <filename>libc.so.6</filename>. Они не будут
+ работать в системах, где её нет.
+ </para>
+ </note>
+ <para>
+ <example xml:id="ffi.examples.function">
+ <title>Вызов функции из общей библиотеки</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// создаем объект FFI, загружаем libc и экспортируем функцию printf()
+$ffi = FFI::cdef(
+ "int printf(const char *format, ...);", // это стандартная декларация C
+ "libc.so.6");
+// вызываем printf()
+$ffi->printf("Hello %s!\n", "world");
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+Hello world!
+]]>
+ </screen>
+ </example>
+ </para>
+ <para>
+ <example xml:id="ffi.examples.structure">
+ <title>Вызов функции и возврат структуры через аргумент</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// создаем привязку gettimeofday()
+$ffi = FFI::cdef("
+ typedef unsigned int time_t;
+ typedef unsigned int suseconds_t;
+
+ struct timeval {
+ time_t tv_sec;
+ suseconds_t tv_usec;
+ };
+
+ struct timezone {
+ int tz_minuteswest;
+ int tz_dsttime;
+ };
+
+ int gettimeofday(struct timeval *tv, struct timezone *tz);
+", "libc.so.6");
+// создаем структуры данных C
+$tv = $ffi->new("struct timeval");
+$tz = $ffi->new("struct timezone");
+// вызываем gettimeofday()
+var_dump($ffi->gettimeofday(FFI::addr($tv), FFI::addr($tz)));
+// получаем доступ к полю структуры данных C
+var_dump($tv->tv_sec);
+// печатаем всю структуру данных
+var_dump($tz);
+?>
+]]>
+ </programlisting>
+ &example.outputs.similar;
+ <screen>
+<![CDATA[
+int(0)
+int(1555946835)
+object(FFI\CData:struct timezone)#3 (2) {
+ ["tz_minuteswest"]=>
+ int(0)
+ ["tz_dsttime"]=>
+ int(0)
+}
+]]>
+ </screen>
+ </example>
+ </para>
+ <para>
+ <example xml:id="ffi.examples.variable-existing">
+ <title>Доступ к существующим переменным C</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// создаем объект FFI, загружаем libc и экспортируем переменную errno
+$ffi = FFI::cdef(
+ "int errno;", // это стандартная декларация C
+ "libc.so.6");
+// печатаем errno
+var_dump($ffi->errno);
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+int(0)
+]]>
+ </screen>
+ </example>
+ </para>
+ <para>
+ <example xml:id="ffi.examples.variable-creating">
+ <title>Создание и модификация переменной C</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// создаем переменную C типа int
+$x = FFI::new("int");
+var_dump($x->cdata);
+
+// простое присваивание
+$x->cdata = 5;
+var_dump($x->cdata);
+
+// не простое присвоение
+$x->cdata += 2;
+var_dump($x->cdata);
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+int(0)
+int(5)
+int(7)
+]]>
+ </screen>
+ </example>
+ </para>
+ <para>
+ <example xml:id="ffi.examples.array">
+ <title>Работа с массивами C</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+// создаем структуру данных
+$a = FFI::new("long[1024]");
+// работаем с ней как с обычным массивом PHP
+for ($i = 0; $i < count($a); $i++) {
+ $a[$i] = $i;
+}
+var_dump($a[25]);
+$sum = 0;
+foreach ($a as $n) {
+ $sum += $n;
+}
+var_dump($sum);
+var_dump(count($a));
+var_dump(FFI::sizeof($a));
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+int(25)
+int(523776)
+int(1024)
+int(8192)
+]]>
+ </screen>
+ </example>
+ </para>
+ </section>
+
+ <section xml:id="ffi.examples-callback">
+ <title>Функции обратного вызова PHP</title>
+ <para>
+ Можно присвоить замыкание PHP переменной типа "указатель"
+ (pointer) либо передать его как аргумент функции:
+ <example>
+ <programlisting role="php">
+<![CDATA[
+<?php
+$zend = FFI::cdef("
+ typedef int (*zend_write_func_t)(const char *str, size_t str_length);
+ extern zend_write_func_t zend_write;
+");
+
+echo "Hello World 1!\n";
+
+$orig_zend_write = clone $zend->zend_write;
+$zend->zend_write = function($str, $len) {
+ global $orig_zend_write;
+ $orig_zend_write("{\n\t", 3);
+ $ret = $orig_zend_write($str, $len);
+ $orig_zend_write("}\n", 2);
+ return $ret;
+};
+echo "Hello World 2!\n";
+$zend->zend_write = $orig_zend_write;
+echo "Hello World 3!\n";
+?>
+]]>
+ </programlisting>
+ &example.outputs;
+ <screen>
+<![CDATA[
+Hello World 1!
+{
+ Hello World 2!
+}
+Hello World 3!
+]]>
+ </screen>
+ </example>
+ Хоть это и работает, но данная функциональность
+ поддерживается не на всех платформах libffi, не эффективна
+ и вызывает утечку ресурсов при завершении запросов.
+ <tip>
+ <simpara>
+ Поэтому рекомендуется минимизировать использование обратных вызовов PHP.
+ </simpara>
+ </tip>
+ </para>
+ </section>
+
+ <section xml:id="ffi.examples-complete">
+ <title>Комплексный пример PHP/FFI/preloading</title>
+ <example>
+ <simpara><filename>php.ini</filename></simpara>
+ <programlisting role="ini">
+<![CDATA[
+ffi.enable=preload
+opcache.preload=preload.php
+]]>
+ </programlisting>
+ <simpara><filename>preload.php</filename></simpara>
+ <programlisting role="php">
+<![CDATA[
+<?php
+FFI::load(__DIR__ . "/dummy.h");
+opcache_compile_file(__DIR__ . "/dummy.php");
+?>
+]]>
+ </programlisting>
+ <simpara><filename>dummy.h</filename></simpara>
+ <programlisting role="c">
+<![CDATA[
+#define FFI_SCOPE "DUMMY"
+#define FFI_LIB "libc.so.6"
+
+int printf(const char *format, ...);
+]]>
+ </programlisting>
+ <simpara><filename>dummy.php</filename></simpara>
+ <programlisting role="php">
+<![CDATA[
+<?php
+final class Dummy {
+ private static $ffi = null;
+ function __construct() {
+ if (is_null(self::$ffi)) {
+ self::$ffi = FFI::scope("DUMMY");
+ }
+ }
+ function printf($format, ...$args) {
+ return (int)self::$ffi->printf($format, ...$args);
+ }
+}
+?>
+]]>
+ </programlisting>
+ <simpara><filename>test.php</filename></simpara>
+ <programlisting role="php">
+<![CDATA[
+<?php
+$d = new Dummy();
+$d->printf("Hello %s!\n", "world");
+?>
+]]>
+ </programlisting>
+ </example>
+ </section>
+</chapter>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/ru/trunk/reference/ffi/examples.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
Added: phpdoc/ru/trunk/reference/ffi/ffi.cdata.xml
===================================================================
--- phpdoc/ru/trunk/reference/ffi/ffi.cdata.xml (rev 0)
+++ phpdoc/ru/trunk/reference/ffi/ffi.cdata.xml 2019-12-15 10:07:01 UTC (rev 348518)
@@ -0,0 +1,164 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 347522 Maintainer: rjhdby Status: ready -->
+<!-- Reviewed: no -->
+
+<phpdoc:classref xml:id="class.ffi-cdata" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <title>Доступ к данным C</title>
+ <titleabbrev>FFI\CData</titleabbrev>
+
+ <partintro>
+
+ <!-- {{{ FFI\CData intro -->
+ <section xml:id="ffi-cdata.intro">
+ &reftitle.intro;
+ <para>
+ Объекты <classname>FFI\CData</classname> могут использоваться множеством разных способов как обычные данные PHP:
+ <itemizedlist>
+ <listitem>
+ <simpara>
+ Данные C скалярных типов могут читаться и присваиваться
+ через свойство <property>$cdata</property>:
+ <code>$x = FFI::new('int'); $x->cdata = 42;</code>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Поля структур(struct) и объединений(union) C доступны
+ как обычные свойства объекта PHP:
+ <code>$cdata->field</code>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Доступ к элементам массивов C происходит так же, как доступ
+ к элементам обычного массива PHP:
+ <code>$cdata[$offset]</code>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Массивы C можно перебирать с помощью &foreach;.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Для массивов C можно можно использовать
+ функцию <function>count</function>.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Указатели C могут быть разыменованы как массив:
+ <code>$cdata[0]</code>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Указатели C можно сравнивать обычными операторами
+ сравнения (<code><</code>,
+ <code><=</code>, <code>==</code>, <code>!=</code>, <code>>=</code>, <code>></code>).
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Для указателей C можно использовать операции инкремента
+ и декремента <code>+</code>/<code>-</code>/
+ <code>++</code>/<code>–-</code>: <code>$cdata += 5</code>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Указатели C можно вычитать друг из друга с помощью
+ операции <code>-</code>.
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Указатели на функции можно вызывать как обычные
+ замыкания PHP: <code>$cdata()</code>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Любые данные C можно клонировать с помощью
+ <link linkend="language.oop5.cloning">clone</link>:
+ <code>$cdata2 = clone $cdata;</code>
+ </simpara>
+ </listitem>
+ <listitem>
+ <simpara>
+ Любые данные C можно визуализировать с помощью
+ <function>var_dump</function>, <function>print_r</function>, и т.д.
+ </simpara>
+ </listitem>
+ </itemizedlist>
+ <note>
+ <simpara>
+ Обратите внимание, что для экземпляров
+ <classname>FFI\CData</classname> не поддерживаются
+ функции <function>isset</function>,
+ <function>empty</function> и <function>unset</function>.
+ А для тех, что оборачивают структуры и объединения не
+ реализован интерфейс
+ <interfacename>Traversable</interfacename>.
+ </simpara>
+ </note>
+ </para>
+ </section>
+ <!-- }}} -->
+
+ <section xml:id="ffi-cdata.synopsis">
+ &reftitle.classsynopsis;
+
+ <!-- {{{ Synopsis -->
+ <classsynopsis>
+ <ooclass><classname>FFI\CData</classname></ooclass>
+
+ <!-- {{{ Class synopsis -->
+ <classsynopsisinfo>
+ <ooclass>
+ <classname>FFI\CData</classname>
+ </ooclass>
+ </classsynopsisinfo>
+ <!-- }}} -->
+
+ <!--
+ <classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
+ <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.ffi-cdata')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])">
+ <xi:fallback />
+ </xi:include>
+ -->
+
+ </classsynopsis>
+ <!-- }}} -->
+
+ </section>
+
+ </partintro>
+
+ <!-- &reference.ffi.entities.ffi-cdata; -->
+
+</phpdoc:classref>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/ru/trunk/reference/ffi/ffi.cdata.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
Added: phpdoc/ru/trunk/reference/ffi/ffi.ctype.xml
===================================================================
--- phpdoc/ru/trunk/reference/ffi/ffi.ctype.xml (rev 0)
+++ phpdoc/ru/trunk/reference/ffi/ffi.ctype.xml 2019-12-15 10:07:01 UTC (rev 348518)
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 347385 Maintainer: rjhdby Status: ready -->
+<!-- Reviewed: no -->
+
+<phpdoc:classref xml:id="class.ffi-ctype" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <title>Доступ к типам C</title>
+ <titleabbrev>FFI\CType</titleabbrev>
+
+ <partintro>
+
+ <!-- {{{ FFI\CType intro -->
+ <section xml:id="ffi-ctype.intro">
+ &reftitle.intro;
+ <para>
+
+ </para>
+ </section>
+ <!-- }}} -->
+
+ <section xml:id="ffi-ctype.synopsis">
+ &reftitle.classsynopsis;
+
+ <!-- {{{ Synopsis -->
+ <classsynopsis>
+ <ooclass><classname>FFI\CType</classname></ooclass>
+
+ <!-- {{{ Class synopsis -->
+ <classsynopsisinfo>
+ <ooclass>
+ <classname>FFI\CType</classname>
+ </ooclass>
+ </classsynopsisinfo>
+ <!-- }}} -->
+
+ <!--
+ <classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
+ <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.ffi-ctype')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])">
+ <xi:fallback />
+ </xi:include>
+ -->
+
+ </classsynopsis>
+ <!-- }}} -->
+
+ </section>
+
+ </partintro>
+
+ <!-- &reference.ffi.entities.ffi-ctype; -->
+
+</phpdoc:classref>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/ru/trunk/reference/ffi/ffi.ctype.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
Added: phpdoc/ru/trunk/reference/ffi/ffi.exception.xml
===================================================================
--- phpdoc/ru/trunk/reference/ffi/ffi.exception.xml (rev 0)
+++ phpdoc/ru/trunk/reference/ffi/ffi.exception.xml 2019-12-15 10:07:01 UTC (rev 348518)
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 347385 Maintainer: rjhdby Status: ready -->
+<!-- Reviewed: no -->
+
+<phpdoc:classref xml:id="class.ffi-exception" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <title>Исключения FFI</title>
+ <titleabbrev>FFI\Exception</titleabbrev>
+
+ <partintro>
+
+ <!-- {{{ FFI\Exception intro -->
+ <section xml:id="ffi-exception.intro">
+ &reftitle.intro;
+ <para>
+
+ </para>
+ </section>
+ <!-- }}} -->
+
+ <section xml:id="ffi-exception.synopsis">
+ &reftitle.classsynopsis;
+
+ <!-- {{{ Synopsis -->
+ <classsynopsis>
+ <ooclass><classname>FFI\Exception</classname></ooclass>
+
+ <!-- {{{ Class synopsis -->
+ <classsynopsisinfo>
+ <ooclass>
+ <classname>FFI\Exception</classname>
+ </ooclass>
+
+ <ooclass>
+ <modifier>extends</modifier>
+ <classname>Error</classname>
+ </ooclass>
+
+ <oointerface>
+ <interfacename>Throwable</interfacename>
+ </oointerface>
+ </classsynopsisinfo>
+ <!-- }}} -->
+ <classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
+ <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('error.synopsis')/descendant::db:fieldsynopsis)">
+ <xi:fallback />
+ </xi:include>
+
+ <!--
+ <classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
+ <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.ffi-exception')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])">
+ <xi:fallback />
+ </xi:include>
+ -->
+
+ <classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
+ <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.error')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])">
+ <xi:fallback />
+ </xi:include>
+
+ </classsynopsis>
+ <!-- }}} -->
+
+ </section>
+
+ </partintro>
+
+ <!-- &reference.ffi.entities.ffi-exception; -->
+
+</phpdoc:classref>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/ru/trunk/reference/ffi/ffi.exception.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
Added: phpdoc/ru/trunk/reference/ffi/ffi.parserexception.xml
===================================================================
--- phpdoc/ru/trunk/reference/ffi/ffi.parserexception.xml (rev 0)
+++ phpdoc/ru/trunk/reference/ffi/ffi.parserexception.xml 2019-12-15 10:07:01 UTC (rev 348518)
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 347385 Maintainer: rjhdby Status: ready -->
+<!-- Reviewed: no -->
+
+<phpdoc:classref xml:id="class.ffi-parserexception" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <title>Исключения парсера FFI</title>
+ <titleabbrev>FFI\ParserException</titleabbrev>
+
+ <partintro>
+
+ <!-- {{{ FFI\ParserException intro -->
+ <section xml:id="ffi-parserexception.intro">
+ &reftitle.intro;
+ <para>
+
+ </para>
+ </section>
+ <!-- }}} -->
+
+ <section xml:id="ffi-parserexception.synopsis">
+ &reftitle.classsynopsis;
+
+ <!-- {{{ Synopsis -->
+ <classsynopsis>
+ <ooclass><classname>FFI\ParserException</classname></ooclass>
+
+ <!-- {{{ Class synopsis -->
+ <classsynopsisinfo>
+ <ooclass>
+ <classname>FFI\ParserException</classname>
+ </ooclass>
+
+ <ooclass>
+ <modifier>extends</modifier>
+ <classname>FFI\Exception</classname>
+ </ooclass>
+
+ <oointerface>
+ <interfacename>Throwable</interfacename>
+ </oointerface>
+ </classsynopsisinfo>
+ <!-- }}} -->
+ <classsynopsisinfo role="comment">&InheritedProperties;</classsynopsisinfo>
+ <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('error.synopsis')/descendant::db:fieldsynopsis)">
+ <xi:fallback />
+ </xi:include>
+
+ <!--
+ <classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
+ <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.ffi-parserexception')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])">
+ <xi:fallback />
+ </xi:include>
+ -->
+
+ <!--
+ <classsynopsisinfo role="comment">&InheritedMethods;</classsynopsisinfo>
+ <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.ffi-exception')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])">
+ <xi:fallback />
+ </xi:include>
+ -->
+
+ </classsynopsis>
+ <!-- }}} -->
+
+ </section>
+
+ </partintro>
+
+ <!-- &reference.ffi.entities.ffi-parserexception; -->
+
+</phpdoc:classref>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/ru/trunk/reference/ffi/ffi.parserexception.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
Added: phpdoc/ru/trunk/reference/ffi/ffi.xml
===================================================================
--- phpdoc/ru/trunk/reference/ffi/ffi.xml (rev 0)
+++ phpdoc/ru/trunk/reference/ffi/ffi.xml 2019-12-15 10:07:01 UTC (rev 348518)
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 347385 Maintainer: rjhdby Status: ready -->
+<!-- Reviewed: no -->
+
+<phpdoc:classref xml:id="class.ffi" xmlns:phpdoc="http://php.net/ns/phpdoc" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+ <title>Основной интерфейс к коду и данным C</title>
+ <titleabbrev>FFI</titleabbrev>
+
+ <partintro>
+
+ <!-- {{{ FFI intro -->
+ <section xml:id="ffi.intro">
+ &reftitle.intro;
+ <para>
+ Объекты этого класса создаются фабричными методами
+ <methodname>FFI::cdef</methodname>,
+ <methodname>FFI::load</methodname> и
+ <methodname>FFI::scope</methodname>. Объявленные
+ переменные C доступны как свойства инстанса FFI, а функции
+ как его методы. Объявленные типы C можно использовать
+ для создания структур данных с помощью
+ <methodname>FFI::new</methodname> и
+ <methodname>FFI::type</methodname>.
+ </para>
+ <para>
+ Разбор объявлений FFI и загрузка разделяемой библиотеки
+ может занять значителбьное время. Не имеет смысла делать
+ это для каждого HTTP запроса в окружении Web. Тем не
+ менее можно предзагрузить объявления FFI и библиотеки
+ при старте PHP и инстанциировать объекты FFI по
+ необходимости. Заголовочные файлы могут быть расширены
+ специальными объявлениями <literal>FFI_SCOPE</literal>
+ (например <code>#define FFI_SCOPE "foo"”"</code>;
+ скоуп по умолчанию "C") и загружены с помощью
+ <methodname>FFI::load</methodname> во время предзагрузки.
+ Это приведет к созданию постоянных привязок, которые
+ будут доступны для всех запросов через
+ <methodname>FFI::scope</methodname>.
+ Более подробно читайте на странице
+ <link linkend="ffi.examples-complete">Простые примеры использования FFI</link>.
+ </para>
+ <para>
+ В один и тот же скоуп можно загрузить несколько
+ заголовочных файлов.
+ </para>
+ </section>
+ <!-- }}} -->
+
+ <section xml:id="ffi.synopsis">
+ &reftitle.classsynopsis;
+
+ <!-- {{{ Synopsis -->
+ <classsynopsis>
+ <ooclass><classname>FFI</classname></ooclass>
+
+ <!-- {{{ Class synopsis -->
+ <classsynopsisinfo>
+ <ooclass>
+ <classname>FFI</classname>
+ </ooclass>
+ </classsynopsisinfo>
+ <!-- }}} -->
+
+ <classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
+ <xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.ffi')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])" />
+ </classsynopsis>
+ <!-- }}} -->
+
+ </section>
+
+ </partintro>
+
+ &reference.ffi.entities.ffi;
+
+</phpdoc:classref>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/ru/trunk/reference/ffi/ffi.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property
Added: phpdoc/ru/trunk/reference/ffi/setup.xml
===================================================================
--- phpdoc/ru/trunk/reference/ffi/setup.xml (rev 0)
+++ phpdoc/ru/trunk/reference/ffi/setup.xml 2019-12-15 10:07:01 UTC (rev 348518)
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- $Revision$ -->
+<!-- EN-Revision: 348203 Maintainer: rjhdby Status: ready -->
+<!-- Reviewed: no -->
+
+<chapter xml:id="ffi.setup" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
+ &reftitle.setup;
+
+ <section xml:id="ffi.requirements">
+ &reftitle.required;
+ <para>
+ Для работы этого расширения необходимо установить библиотеку <link xlink:href="&url.libffi;">libffi</link>.
+ </para>
+ </section>
+
+ <!-- {{{ Installation -->
+ &reference.ffi.configure;
+ <!-- }}} -->
+
+ <section xml:id="ffi.configuration">
+ &reftitle.runtime;
+ &extension.runtime;
+ <para>
+ <table>
+ <title>&ConfigureOptions; FFI</title>
+ <tgroup cols="4">
+ <thead>
+ <row>
+ <entry>&Name;</entry>
+ <entry>&Default;</entry>
+ <entry>&Changeable;</entry>
+ <entry>&Changelog;</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><link linkend="ini.ffi.enable">ffi.enable</link></entry>
+ <entry>"preload"</entry>
+ <entry>PHP_INI_SYSTEM</entry>
+ <entry></entry>
+ </row>
+ <row>
+ <entry><link linkend="ini.ffi.preload">ffi.preload</link></entry>
+ <entry>""</entry>
+ <entry>PHP_INI_SYSTEM</entry>
+ <entry></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ &ini.php.constants;
+ </para>
+
+ &ini.descriptions.title;
+
+ <para>
+ <variablelist>
+ <varlistentry xml:id="ini.ffi.enable">
+ <term>
+ <parameter>ffi.enable</parameter>
+ <type>string</type>
+ </term>
+ <listitem>
+ <para>
+ Позволяет разрешить (<literal>"true"</literal>) или запретить
+ (<literal>"false"</literal>) использование FFI API, либо
+ ограничить использование только для CLI SAPI и
+ предзагруженных файлов (<literal>"preload"</literal>).
+ </para>
+ <para>
+ Ограничения FFI API влияют только на класс
+ <classname>FFI</classname>, но не на перезагруженные
+ функции объекта <classname>FFI\CData</classname>.
+ Это значит, что можно создать объекты
+ <classname>FFI\CData</classname> в предзагружаемых
+ файлах и использовать потом напрямую из скриптов PHP.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry xml:id="ini.ffi.preload">
+ <term>
+ <parameter>ffi.preload</parameter>
+ <type>string</type>
+ </term>
+ <listitem>
+ <para>
+ Позволяет предзагружать привязки FFI во время
+ старта, что невозможно с
+ <methodname>FFI::load</methodname>
+ если включено <link linkend="ini.opcache.preload-user">opcache.preload_user</link>.
+ Эта директива принимает список разделителей имен файлов
+ <constant>DIRECTORY_SEPARATOR</constant>.
+ Предзагруженные привязки доступны с помощью
+ вызова <methodname>FFI::scope</methodname>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </section>
+
+ <section xml:id="ffi.resources">
+ &reftitle.resources;
+ &no.resource;
+ </section>
+
+</chapter>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:1
+sgml-indent-data:t
+indent-tabs-mode:nil
+sgml-parent-document:nil
+sgml-default-dtd-file:"~/.phpdoc/manual.ced"
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
Property changes on: phpdoc/ru/trunk/reference/ffi/setup.xml
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
\ No newline at end of property