git-svn-id: https://svn.php.net/repository/phpdoc/ru/trunk@342800 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
Andrey Gromov
2017-08-07 10:53:19 +00:00
parent 70343a89cd
commit e9340ef8ef
13 changed files with 3217 additions and 0 deletions

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1634a886415d0ab4df195fe49d18a1c150b70758 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<book xml:id="book.parsekit" xmlns="http://docbook.org/ns/docbook">
<title>Parsekit</title>
<preface xml:id="intro.parsekit">
&reftitle.intro;
<para>
Эти функции позволяют анализировать скомпилированные опкоды PHP-скриптов во время выполнения.
</para>
</preface>
&reference.parsekit.setup;
&reference.parsekit.constants;
&reference.parsekit.reference;
</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
-->

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<section xml:id="parsekit.installation" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.install;
<para>
&pecl.moved;
</para>
<para>
&pecl.info;
<link xlink:href="&url.pecl.package;parsekit">&url.pecl.package;parsekit</link>.
</para>
<para>
&pecl.windows.download;
</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
-->

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: dfd913a054ce5301220bec9b8d400ae462ae3564 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.parsekit-compile-file" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>parsekit_compile_file</refname>
<refpurpose>Компилирует скрипт PHP и возвращает результат в виде массива</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>parsekit_compile_file</methodname>
<methodparam><type>string</type><parameter>filename</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter role="reference">errors</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>options</parameter><initializer>PARSEKIT_QUIET</initializer></methodparam>
</methodsynopsis>
&warn.experimental.func;
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>filename</parameter></term>
<listitem>
<para>
Строка, содержащая путь к файлу скрипта..
Аналогично как для <function>include</function>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>errors</parameter></term>
<listitem>
<para>
2D хэш ошибок (включая фатальные) обнаруженных во время компиляции.
Передается по ссылке.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>options</parameter></term>
<listitem>
<para>
<constant>PARSEKIT_QUIET</constant> или
<constant>PARSEKIT_SIMPLE</constant>.
Влияет на уровень детализации результата.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает массив содержащий сложную многоразмерную структуру, как показано ниже.
</para>
</refsect1>
<!-- No changelog: it's only in PECL. -->
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>parsekit_compile_file</function></title>
<programlisting role="php">
<![CDATA[
<?php
var_dump(parsekit_compile_file('hello_world.php', $errors, PARSEKIT_SIMPLE));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
array(5) {
[0]=>
string(37) "ZEND_ECHO UNUSED 'Hello World' UNUSED"
[1]=>
string(30) "ZEND_RETURN UNUSED NULL UNUSED"
[2]=>
string(42) "ZEND_HANDLE_EXCEPTION UNUSED UNUSED UNUSED"
["function_table"]=>
NULL
["class_table"]=>
NULL
}
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>parsekit_compile_string</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
-->

View File

@ -0,0 +1,212 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.parsekit-compile-string" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>parsekit_compile_string</refname>
<refpurpose>Компилирует строку PHP-кода и возвращает результат в виде массива</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>parsekit_compile_string</methodname>
<methodparam><type>string</type><parameter>phpcode</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter role="reference">errors</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>options</parameter><initializer>PARSEKIT_QUIET</initializer></methodparam>
</methodsynopsis>
&warn.experimental.func;
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>phpcode</parameter></term>
<listitem>
<para>
Строка содержащая код PHP. Аналогично как аргумент для <function>eval</function>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>errors</parameter></term>
<listitem>
<para>
2D хэш ошибок (включая фатальные) обнаруженных во время компиляции.
Передается по ссылке.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>options</parameter></term>
<listitem>
<para>
<constant>PARSEKIT_QUIET</constant> или
<constant>PARSEKIT_SIMPLE</constant>.
Влияет на уровень детализации результата.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает массив содержащий сложную многоразмерную структуру, как показано ниже.
</para>
</refsect1>
<!-- No changelog: it's only in PECL. -->
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>parsekit_compile_string</function></title>
<programlisting role="php">
<![CDATA[
<?php
$ops = parsekit_compile_string('
echo "Foo\n";
', $errors, PARSEKIT_QUIET);
var_dump($ops);
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
array(20) {
["type"]=>
int(4)
["type_name"]=>
string(14) "ZEND_EVAL_CODE"
["fn_flags"]=>
int(0)
["num_args"]=>
int(0)
["required_num_args"]=>
int(0)
["pass_rest_by_reference"]=>
bool(false)
["uses_this"]=>
bool(false)
["line_start"]=>
int(0)
["line_end"]=>
int(0)
["return_reference"]=>
bool(false)
["refcount"]=>
int(1)
["last"]=>
int(3)
["size"]=>
int(3)
["T"]=>
int(0)
["last_brk_cont"]=>
int(0)
["current_brk_cont"]=>
int(-1)
["backpatch_count"]=>
int(0)
["done_pass_two"]=>
bool(true)
["filename"]=>
string(17) "Parsekit Compiler"
["opcodes"]=>
array(3) {
[8594800]=>
array(5) {
["opcode"]=>
int(40)
["opcode_name"]=>
string(9) "ZEND_ECHO"
["flags"]=>
int(768)
["op1"]=>
array(3) {
["type"]=>
int(1)
["type_name"]=>
string(8) "IS_CONST"
["constant"]=>
&string(4) "Foo
"
}
["lineno"]=>
int(2)
}
["859484C"]=>
array(6) {
["opcode"]=>
int(62)
["opcode_name"]=>
string(11) "ZEND_RETURN"
["flags"]=>
int(16777984)
["op1"]=>
array(3) {
["type"]=>
int(1)
["type_name"]=>
string(8) "IS_CONST"
["constant"]=>
&NULL
}
["extended_value"]=>
int(0)
["lineno"]=>
int(3)
}
[8594898]=>
array(4) {
["opcode"]=>
int(149)
["opcode_name"]=>
string(21) "ZEND_HANDLE_EXCEPTION"
["flags"]=>
int(0)
["lineno"]=>
int(3)
}
}
}
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>parsekit_compile_file</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
-->

View File

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.parsekit-func-arginfo" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>parsekit_func_arginfo</refname>
<refpurpose>Возвращает информацию о аргументах функции</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>parsekit_func_arginfo</methodname>
<methodparam><type>mixed</type><parameter>function</parameter></methodparam>
</methodsynopsis>
&warn.experimental.func;
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>function</parameter></term>
<listitem>
<para>
Строка, описывающая функцию или массив, описывающий класс/метод.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает массив, содержащий информацию об аргументах.
</para>
</refsect1>
<!-- No changelog: it's only in PECL. -->
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>parsekit_func_arginfo</function></title>
<programlisting role="php">
<![CDATA[
<?php
function foo($bar, stdClass $baz, &$bomb, $bling = false) {
}
var_dump(parsekit_func_arginfo('foo'));
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
array(4) {
[0]=>
array(3) {
["name"]=>
string(3) "bar"
["allow_null"]=>
bool(true)
["pass_by_reference"]=>
bool(false)
}
[1]=>
array(4) {
["name"]=>
string(3) "baz"
["class_name"]=>
string(8) "stdClass"
["allow_null"]=>
bool(false)
["pass_by_reference"]=>
bool(false)
}
[2]=>
array(3) {
["name"]=>
string(4) "bomb"
["allow_null"]=>
bool(true)
["pass_by_reference"]=>
bool(true)
}
[3]=>
array(3) {
["name"]=>
string(5) "bling"
["allow_null"]=>
bool(true)
["pass_by_reference"]=>
bool(false)
}
}
]]>
</screen>
</example>
</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
-->

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<section xml:id="parsekit.configuration" xmlns="http://docbook.org/ns/docbook">
&reftitle.runtime;
&no.config;
</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
-->

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<reference xml:id="ref.parsekit" xmlns="http://docbook.org/ns/docbook">
<title>&Functions; Parsekit</title>
&reference.parsekit.entities.functions;
</reference>
<!-- 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
-->

View File

@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="parsekit.setup" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.setup;
<section xml:id="parsekit.requirements">
&reftitle.required;
&no.requirement;
</section>
&reference.parsekit.configure;
&reference.parsekit.ini;
<section xml:id="parsekit.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
-->

View File

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 95f6764aef0aaf5b99cb692de6783831b2431226 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.password-get-info" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>password_get_info</refname>
<refpurpose>Возвращает информацию о заданном хеше</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>array</type><methodname>password_get_info</methodname>
<methodparam><type>string</type><parameter>hash</parameter></methodparam>
</methodsynopsis>
<para>
Если передан корректный хеш, созданный поддерживаемым
<function>password_hash</function> алгоритмом, то эта функция вернет
информацию об этом хеше.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>hash</parameter></term>
<listitem>
<para>
&password.parameter.hash;
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает ассоциативный массив с тремя элементами:
<itemizedlist>
<listitem>
<simpara>
<literal>algo</literal>, содержащий одну из
<link linkend="password.constants">констант алгоритмов паролей</link>
</simpara>
</listitem>
<listitem>
<simpara>
<literal>algoName</literal>, содержащий имя алгоритма в человеко-читаемом виде.
</simpara>
</listitem>
<listitem>
<simpara>
<literal>options</literal>, включающий опции переданные
при вызове <function>password_hash</function>
</simpara>
</listitem>
</itemizedlist>
</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
-->

View File

@ -0,0 +1,349 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 7e65787ddc8fbb01d8239e0c593c2347200d2b7c Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.password-hash" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>password_hash</refname>
<refpurpose>Создает хеш пароля</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>password_hash</methodname>
<methodparam><type>string</type><parameter>password</parameter></methodparam>
<methodparam><type>integer</type><parameter>algo</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>options</parameter></methodparam>
</methodsynopsis>
<para>
<function>password_hash</function> создает хеш пароля используя сильный,
необратимый алгоритм хеширования.
Функция <function>password_hash</function> совместима с функцией
<function>crypt</function>.
Следовательно, хэши паролей, созданные <function>crypt</function> можно использовать
с <function>password_hash</function>.
</para>
<simpara>
В данный момент поддерживаются следующие алгоритмы:
</simpara>
<para>
<itemizedlist>
<listitem>
<simpara>
<constant>PASSWORD_DEFAULT</constant> - используется алгоритм bcrypt (по умолчанию с PHP 5.5.0).
Обратите внимание, что используемый алгоритм может со временем меняться на более
сильный, когда таковой добавляется в PHP. Соответственно и длина результата может со
временем меняться. В связи с этим рекомендуется выбирать длину поля для хранения
в базе данных более 60 символов (255 - вообще идеально).
</simpara>
</listitem>
<listitem>
<simpara>
<constant>PASSWORD_BCRYPT</constant> - использует алгоритм
<constant>CRYPT_BLOWFISH</constant>. Генерирует стандартный хеш, совместимый
с генерированным функцией <function>crypt</function> с использованием
идентификатора "$2y$". В результате будет сгенерирована строка длиной 60 символов, &return.falseforfailure;.
</simpara>
</listitem>
</itemizedlist>
</para>
<simpara>
Поддерживаемые опции:
</simpara>
<para>
<itemizedlist>
<listitem>
<para>
<literal>salt</literal> - для самостоятельного задания соли для хеширования.
Обратите внимание, что это приведет к переопределению и предотвращению
автоматического создания соли.
</para>
<para>
Если не задано, то <function>password_hash</function> будет генерировать
случайную соль для каждого хешируемого пароля. Это предпочтительный
режим работы.
</para>
<warning>
<para>
Эта опция была объявлена устаревшей начиная с PHP 7.0.0.
Рекомендуется использовать автоматически генерируемую соль.
</para>
</warning>
</listitem>
<listitem>
<para>
<literal>cost</literal> - задает необходимую алгоритмическую сложность.
Пример использования этого значения можно посмотреть на странице посвященной
функции <function>crypt</function>.
</para>
<para>
Если не задано, то будет использовано значение по умолчанию <literal>10</literal>.
Это хорошая базовая стоимость, но вы можете ее увеличить в зависимости
от возможностей своего железа.
</para>
</listitem>
</itemizedlist>
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>password</parameter></term>
<listitem>
<para>
&password.parameter.password;
</para>
<caution>
<para>
Использование алгоритма <constant>PASSWORD_BCRYPT</constant> приведет
к обрезанию поля <parameter>password</parameter> до максимальной длины
в 72 символа.
</para>
</caution>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>algo</parameter></term>
<listitem>
<para>
&password.parameter.algo;
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>options</parameter></term>
<listitem>
<para>
&password.parameter.options;
</para>
<para>
Если не задано, то будет использована стандартная стоимость и соль будет
генерироваться автоматически.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает зашехированный пароль, &return.falseforfailure;.
</para>
<para>
Использованный алгоритм, стоимость и соль будут возвращены как часть шеша.
Таким образом, информация необходимая для проверки хеша будет в него
включена. Это позволит функции <function>password_verify</function> проверять
хеш без необходимости отдельного хранения информации о соли и алгоритме.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>password_hash</function></title>
<programlisting role="php">
<![CDATA[
<?php
/**
* Мы просто хотим захешировать свой пароль используя настройки по умолчанию.
* Значит будет использован BCRYPT и результат будет 60 символов длиной.
*
* Помните, что алгоритм по умолчанию может измениться в будущем, так что
* имеет смысл заранее позаботиться о том, чтобы система хранения хешей
* смогла хранить более 60 символов (255 в самый раз)
*/
echo password_hash("rasmuslerdorf", PASSWORD_DEFAULT)."\n";
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Пример использования <function>password_hash</function> с ручным заданием стоимости</title>
<programlisting role="php">
<![CDATA[
<?php
/**
* Тут мы увеличиваем алгоритмическую стоимость BCRYPT до 12.
* Но это никак не скажется на длине полученного результата, она останется 60 символов
*/
$options = [
'cost' => 12,
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
$2y$12$QjSH496pcT5CEbzjD/vtVeH03tfHKFy36d4J0Ltp3lRtee9HDxY3K
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Пример использования <function>password_hash</function> с ручным заданием соли</title>
<programlisting role="php">
<![CDATA[
<?php
/**
* Обратите внимание, что мы все равно генерируем соль автоматически.
* Никогда не используйте для соли заранее заданное статическое значение.
*
* Самым лучшим выбором будет позволить password_hash создавать соль автоматически
*/
$options = [
'cost' => 11,
'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),
];
echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT, $options)."\n";
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
$2y$11$q5MkhSBtlsJcNEVsYh64a.aCluzHnGog7TQAKVmQwO9C8xb.t89F.
]]>
</screen>
</example>
</para>
<para>
<example>
<title>Пример поиска хорошего значения стоимости для <function>password_hash</function></title>
<programlisting role="php">
<![CDATA[
<?php
/**
* Данный код замерит скорость выполнения операции хешитрования для вашего сервера
* с разными значениями алгоритмической сложности для определения максимального
* его значения, не приводящего к деградации производительности. Хорошее базовое
* значение лежит в диапазоне 8-10, но если ваш сервер достаточно мощный, то можно
* задать и больше. Данный скрипт ищет максимальное значение, при котором
* хеширование уложится в 50 миллисекунд.
*/
$timeTarget = 0.05; // 50 миллисекунд.
$cost = 8;
do {
$cost++;
$start = microtime(true);
password_hash("test", PASSWORD_BCRYPT, ["cost" => $cost]);
$end = microtime(true);
} while (($end - $start) < $timeTarget);
echo "Оптимальная стоимость: " . $cost . "\n";
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
Appropriate Cost Found: 10
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<caution>
<para>
Настоятельно рекомендуется использовать автоматическую генерацию соли.
Данная функция самостоятельно создаст хорошую соль если вы не будете ей мешать
подсовывая свою.
</para>
<para>
Как было замечены выше, опция <literal>salt</literal> была объявлена
устаревшей в PHP 7.0 и будет вызывать соответствующее предупреждение.
Поддержка ручного задания соли может быть удалена в более новых версиях.
</para>
</caution>
<note>
<para>
Рекомендуется протестировать данную функцию на вашем железе для определения
оптимального значения алгоритмической сложности. Убедитесь, что с выбранной
сложностью функция выполняется быстрее 100 миллисекунд для интерактивных
систем. Скрипт показанный выше поможет вам выбрать подходящее значение.
</para>
</note>
<note>
<simpara>
Обновление поддерживаемых алгоритмов для этой функции (или изменение значения по
умолчанию) обязаны следовать правилам:
</simpara>
<para>
<itemizedlist>
<listitem>
<simpara>
Любой новый алгоритм должен присутствовать в ядре как минимум
1 полный релиз PHP для того, чтобы его можно было установить по умолчанию.
Таким образом если, к примеру, новый алгоритм был добавлен в
7.5.5, то задать по умолчанию его можно юудет только в 7.7 (7.6 будет тем самым
полным релизом, в течении которого он должен присутствовать, от 7.6.0 до 7.7.0). Но
если новый алгоритм добавлен в 7.6.0, то его также можно будет задать по умолчанию
в 7.7.0.
</simpara>
</listitem>
<listitem>
<simpara>
Алгоритм по умолчанию может быть изменен только в полном релизе
(7.3.0, 8.0.0, и т.д.), но не в промежуточных. Единственное исключение - это
если в текущем алгоритме найдена критическая уязвимость.
</simpara>
</listitem>
</itemizedlist>
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>password_verify</function></member>
<member><function>crypt</function></member>
<member><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&url.password.compat;">пользовательская реализация</link></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
-->

View File

@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 5650ac40beff0b033fa8351ab57641391dacaee8 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.password-needs-rehash" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>password_needs_rehash</refname>
<refpurpose>Проверяет, что указанный хеш соответствует заданным опциям</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>boolean</type><methodname>password_needs_rehash</methodname>
<methodparam><type>string</type><parameter>hash</parameter></methodparam>
<methodparam><type>integer</type><parameter>algo</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>options</parameter></methodparam>
</methodsynopsis>
<para>
Проверяет, что указанный хеш соответствует заданным опциям и заданному алгоритму.
Если нет, то можно сделать вывод о том, что хеш надо переделать.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>hash</parameter></term>
<listitem>
<para>
&password.parameter.hash;
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>algo</parameter></term>
<listitem>
<para>
&password.parameter.algo;
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>options</parameter></term>
<listitem>
<para>
&password.parameter.options;
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>password_needs_rehash</function></title>
<programlisting role="php">
<![CDATA[
<?php
$password = 'rasmuslerdorf';
$hash = '$2y$10$YCFsG6elYca568hBi2pZ0.3LDL5wjgxct1N8w/oLR/jfHsiQwCqTS';
// Параметр стоимости может изменяться в связи со сменой оборудования
$options = array('cost' => 11);
// Проверка сохраненного хеша с помощью пароля
if (password_verify($password, $hash)) {
// Проверяем, не нужно ли использовать более новый алгоритм
// или другую алгоритмическую стоимость
if (password_needs_rehash($hash, PASSWORD_DEFAULT, $options)) {
// Если таки да, перехешируем и сохраняем новый хеш
$newHash = password_hash($password, PASSWORD_DEFAULT, $options);
}
// Авторизуем пользователя
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает &true; если пароль должен быть перехеширован с использованием
алгоритма <parameter>algo</parameter> и опций <parameter>options</parameter>,
или &false;, если нет.
</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
-->

View File

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: f0e80e2c3f4455e06c34f052a091b1d9b22e81fe Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.password-verify" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>password_verify</refname>
<refpurpose>Проверяет, соответствует ли пароль хешу</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>boolean</type><methodname>password_verify</methodname>
<methodparam><type>string</type><parameter>password</parameter></methodparam>
<methodparam><type>string</type><parameter>hash</parameter></methodparam>
</methodsynopsis>
<para>
Проверяет, соответствует ли пароль хешу.
</para>
<para>
обратите внимание, что <function>password_hash</function> возвращает алгоритм,
стоимость и соль как части хеша. Таким образом, вся необходимая для проверки
информация включена в него. Это позволяет производить проверку без
необходимости хранить все эти данные раздельно.
</para>
<para>
Эта функция безопасна для атак по времени.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>password</parameter></term>
<listitem>
<para>
&password.parameter.password;
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>hash</parameter></term>
<listitem>
<para>
&password.parameter.hash;
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Возвращает &true; или &false;, в зависимости от результатов проверки.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>password_verify</function></title>
<programlisting role="php">
<![CDATA[
<?php
// Смотрите пример использования password_hash(), для понимания откуда это взялось.
$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';
if (password_verify('rasmuslerdorf', $hash)) {
echo 'Пароль правильный!';
} else {
echo 'Пароль неправильный.';
}
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
Пароль правильный!
]]>
</screen>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>password_hash</function></member>
<member><link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="&url.password.compat;">пользовательская реализация</link></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
-->