1
0
mirror of https://github.com/php/doc-ru.git synced 2026-04-26 08:48:12 +02:00
Files
archived-doc-ru/reference/dba/functions/dba-open.xml
T
2023-02-13 08:20:54 +03:00

294 lines
13 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: e4faf426c06f29bef4b1fbd7043d56f4756a0a50 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.dba-open" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>dba_open</refname>
<refpurpose>Открывает базу данных</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>resource</type><type>false</type></type><methodname>dba_open</methodname>
<methodparam><type>string</type><parameter>path</parameter></methodparam>
<methodparam><type>string</type><parameter>mode</parameter></methodparam>
<methodparam choice="opt"><type class="union"><type>string</type><type>null</type></type><parameter>handler</parameter><initializer>&null;</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>permission</parameter><initializer>0644</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>map_size</parameter><initializer>0</initializer></methodparam>
<methodparam choice="opt"><type class="union"><type>int</type><type>null</type></type><parameter>flags</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
<function>dba_open</function> устанавливает экземпляр базы данных по пути
<parameter>path</parameter> в режиме <parameter>mode</parameter> используя
обработчик <parameter>handler</parameter>.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>path</parameter></term>
<listitem>
<para>
Путь до файлов базы данных.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>mode</parameter></term>
<listitem>
<para>
<literal>r</literal> для режима чтения, <literal>w</literal> для
режима чтения/записи с уже существующей базой данных. <literal>c</literal>
для режима чтения/записи и создания базы данных, если она ещё не была создана,
и <literal>n</literal> для создания, обрезания и доступа для чтения/записи.
База данных создаётся с архитектурой BTree, другие архитектуры (вроде Hash или Queue)
не поддерживаются.
</para>
<para>
Дополнительно, с помощью следующего символа, вы можете задать режим блокировки
базы данных. <literal>l</literal> для блокировки базы данных с помощью файла
<filename>.lck</filename>, или <literal>d</literal> для самостоятельной блокировки
средствами самой базы. Важно, чтобы все ваши приложения делали это согласованно.
</para>
<para>
Если вы хотите просто проверить доступ и не хотите ждать освобождения блокировки,
вы можете добавить третий символ <literal>t</literal>. Если вы абсолютно уверены,
что вам не нужно использовать блокировку базы данных, вы можете использовать
символ <literal>-</literal> вместо <literal>l</literal> или <literal>d</literal>.
Если ни один из символов: <literal>d</literal>, <literal>l</literal> или
<literal>-</literal> не задан, база данных будет использовать режим <literal>d</literal>.
</para>
<note>
<para>
В один момент времени может быть только один процесс, пишущий в базу данных.
Когда вы используете dba на веб-сервере, и более чем один запрос требует
записи в базу данных, они могут это делать только строго по очереди.
Также, в момент чтения, запись не доступна. Модуль dba использует
блокировки для предотвращения нежелательного поведения.
Изучите следующую таблицу:
<table>
<title>Блокировки DBA</title>
<tgroup cols="9">
<thead>
<row>
<entry>уже открыта</entry>
<entry><parameter>mode</parameter> = "rl"</entry>
<entry><parameter>mode</parameter> = "rlt"</entry>
<entry><parameter>mode</parameter> = "wl"</entry>
<entry><parameter>mode</parameter> = "wlt"</entry>
<entry><parameter>mode</parameter> = "rd"</entry>
<entry><parameter>mode</parameter> = "rdt"</entry>
<entry><parameter>mode</parameter> = "wd"</entry>
<entry><parameter>mode</parameter> = "wdt"</entry>
</row>
</thead>
<tbody>
<row>
<entry>не открыта</entry>
<entry>ok</entry>
<entry>ok</entry>
<entry>ok</entry>
<entry>ok</entry>
<entry>ok</entry>
<entry>ok</entry>
<entry>ok</entry>
<entry>ok</entry>
</row>
<row>
<entry><parameter>mode</parameter> = "rl"</entry>
<entry>ok</entry>
<entry>ok</entry>
<entry>wait</entry>
<entry>false</entry>
<entry>illegal</entry>
<entry>illegal</entry>
<entry>illegal</entry>
<entry>illegal</entry>
</row>
<row>
<entry><parameter>mode</parameter> = "wl"</entry>
<entry>wait</entry>
<entry>false</entry>
<entry>wait</entry>
<entry>false</entry>
<entry>illegal</entry>
<entry>illegal</entry>
<entry>illegal</entry>
<entry>illegal</entry>
</row>
<row>
<entry><parameter>mode</parameter> = "rd"</entry>
<entry>illegal</entry>
<entry>illegal</entry>
<entry>illegal</entry>
<entry>illegal</entry>
<entry>ok</entry>
<entry>ok</entry>
<entry>wait</entry>
<entry>false</entry>
</row>
<row>
<entry><parameter>mode</parameter> = "wd"</entry>
<entry>illegal</entry>
<entry>illegal</entry>
<entry>illegal</entry>
<entry>illegal</entry>
<entry>wait</entry>
<entry>false</entry>
<entry>wait</entry>
<entry>false</entry>
</row>
</tbody>
</tgroup>
</table>
<simplelist>
<member>ok: второй вызов будет успешным.</member>
<member>wait: второй вызов будет ждать, пока первый не вызовет
<function>dba_close</function>.</member>
<member>false: второй вызов вернёт &false;.</member>
<member>illegal: вы не можете смешивать модификаторы <literal>"l"</literal> и <literal>"d"</literal> в параметре <parameter>mode</parameter>.</member>
</simplelist>
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>handler</parameter></term>
<listitem>
<para>
Имя <link linkend="dba.requirements">обработчика</link>, который будет
использоваться для доступа по пути <parameter>path</parameter>. Ему передаются
все необязательные параметры, заданные в <function>dba_open</function>.
Если параметр <parameter>handler</parameter> равен &null;,
то вызывается обработчик по умолчанию.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>permission</parameter></term>
<listitem>
<para>
Необязательный параметр, заданный целым числом (&integer;), который передаётся драйверу.
У него то же значение, что и у параметра <parameter>permissions</parameter> функции <function>chmod</function>,
значение по умолчанию - <literal>0644</literal>.
</para>
<para>
Драйверы <literal>db1</literal>, <literal>db2</literal>, <literal>db3</literal>,
<literal>db4</literal>, <literal>dbm</literal>, <literal>gdbm</literal>,
<literal>ndbm</literal> и <literal>lmdb</literal> поддерживают
параметр <parameter>permission</parameter>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>map_size</parameter></term>
<listitem>
<para>
Необязательный параметр, заданный целым числом (&integer;), который передаётся драйверу.
Его значение должно быть кратно размеру страницы ОС или равно нулю,
чтобы использовать размер карты по умолчанию.
</para>
<para>
Только драйвер <literal>lmdb</literal> допускает параметр <parameter>map_size</parameter>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
Флаги для передачи драйверам базы данных. Если указано значение &null;,
будут переданы флаги по умолчанию.
В настоящее время только драйвер LMDB поддерживает следующие флаги:
<constant>DBA_LMDB_USE_SUB_DIR</constant> и
<constant>DBA_LMDB_NO_SUB_DIR</constant>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает обработчик в случае успешного выполнения&return.falseforfailure;.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Функция возвращает значение &false; и выдаёт ошибку уровня <constant>E_WARNING</constant>,
если параметр <parameter>handler</parameter> равен &null;, но нет обработчика по умолчанию.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.2.0</entry>
<entry>
Добавлен параметр <parameter>flags</parameter>.
</entry>
</row>
<row>
<entry>8.2.0</entry>
<entry>
Параметр <parameter>handler</parameter> теперь допускает значение &null;.
</entry>
</row>
<row>
<entry>7.3.14, 7.4.2</entry>
<entry>
Драйвер <literal>lmdb</literal> теперь поддерживает дополнительный
параметр <parameter>map_size</parameter>.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>dba_popen</function></member>
<member><function>dba_close</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->