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>&lt;</code>,
+       <code>&lt;=</code>, <code>==</code>, <code>!=</code>, <code>&gt;=</code>, <code>&gt;</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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.