Files
php-doc-ru/reference/filesystem/functions/stat.xml
Sergey Panteleev 6d43fd64d7 Исправление форматирования
[skip-spellcheck]
[skip-lint]
2022-12-27 03:42:36 +03:00

354 lines
12 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 1f7d8b1ee9e6c7350857ddc8bfce248a65a29787 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.stat" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>stat</refname>
<refpurpose>Возвращает информацию о файле</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>array</type><type>false</type></type><methodname>stat</methodname>
<methodparam><type>string</type><parameter>filename</parameter></methodparam>
</methodsynopsis>
<para>
Собирает статистическую информацию о файле
<parameter>filename</parameter>. Если <parameter>filename</parameter>
является символической ссылкой, информация собирается о самом файле,
а не ссылке.
До PHP 7.4.0 в Windows <abbrev>NTS</abbrev> в данном случае
строил статистику <literal>size</literal>,
<literal>atime</literal>, <literal>mtime</literal> и <literal>ctime</literal> из символьной ссылки.
</para>
<para>
Функция <function>lstat</function> идентична функции
<function>stat</function> за исключением того, что в данном случае она
вернёт информацию о самой символической ссылке.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>filename</parameter></term>
<listitem>
<para>
Путь к файлу.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
<table>
<title>Формат результата работы функций <function>stat</function> и
<function>fstat</function>
</title>
<tgroup cols="3">
<thead>
<row>
<entry>Числовой</entry>
<entry>Ассоциативный</entry>
<entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry>0</entry>
<entry>dev</entry>
<entry>номер устройства ***</entry>
</row>
<row>
<entry>1</entry>
<entry>ino</entry>
<entry>номер inode ****</entry>
</row>
<row>
<entry>2</entry>
<entry>mode</entry>
<entry>режим защиты inode *****</entry>
</row>
<row>
<entry>3</entry>
<entry>nlink</entry>
<entry>количество ссылок</entry>
</row>
<row>
<entry>4</entry>
<entry>uid</entry>
<entry>userid владельца *</entry>
</row>
<row>
<entry>5</entry>
<entry>gid</entry>
<entry>groupid владельца *</entry>
</row>
<row>
<entry>6</entry>
<entry>rdev</entry>
<entry>тип устройства, если устройство inode</entry>
</row>
<row>
<entry>7</entry>
<entry>size</entry>
<entry>размер в байтах</entry>
</row>
<row>
<entry>8</entry>
<entry>atime</entry>
<entry>время последнего доступа (временная метка Unix)</entry>
</row>
<row>
<entry>9</entry>
<entry>mtime</entry>
<entry>время последней модификации (временная метка Unix)</entry>
</row>
<row>
<entry>10</entry>
<entry>ctime</entry>
<entry>время последнего изменения inode (временная метка Unix)</entry>
</row>
<row>
<entry>11</entry>
<entry>blksize</entry>
<entry>размер блока ввода-вывода файловой системы **</entry>
</row>
<row>
<entry>12</entry>
<entry>blocks</entry>
<entry>количество используемых 512-байтных блоков **</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>
* В Windows это всегда будет <literal>0</literal>.
</para>
<para>
** Доступен только на системах, поддерживающих тип st_blksize - другие
системы (например, Windows) вернут <literal>-1</literal>.
</para>
<para>
*** В Windows, начиная с PHP 7.4.0, это серийный номер тома, содержащего файл,
который представляет собой 64-разрядное целое число <emphasis>без знака</emphasis>,
поэтому может переполниться в 32-разрядных системах.
Ранее это было числовое представление буквы диска (например, <literal>2</literal>
для <literal>C:</literal>) для <function>stat</function> и <literal>0</literal> для
<function>lstat</function>.
</para>
<para>
**** В Windows, начиная с PHP 7.4.0, идентификатор, связанный с файлом,
который представляет собой 64-разрядное целое число <emphasis>без знака</emphasis>, может переполниться в 32-разрядных системах.
Ранее он всегда был <literal>0</literal>.
</para>
<para>
***** В Windows бит разрешения на запись устанавливается в соответствии с атрибутом файла только для чтения,
одно и то же значение сообщается для всех пользователей, группы и владельца.
ACL не учитывается, в отличие от <function>is_writable</function>.
</para>
<para>
Значение <literal>mode</literal> содержит информацию, читаемую несколькими функциями.
При записи в восьмеричном виде, начиная справа, первые три цифры возвращаются функцией
<function>chmod</function>. Следующая цифра игнорируется PHP. Следующие две цифры указывают
тип файла:
<table>
<title><literal>mode</literal> типов файлов</title>
<tgroup cols="2">
<thead>
<row>
<entry><literal>mode</literal> в восьмеричном виде</entry>
<entry>Значение</entry>
</row>
</thead>
<tbody>
<row>
<entry><constant>0140000</constant></entry>
<entry>сокет</entry>
</row>
<row>
<entry><constant>0120000</constant></entry>
<entry>символическая ссылка</entry>
</row>
<row>
<entry><constant>0100000</constant></entry>
<entry>обычный файл</entry>
</row>
<row>
<entry><constant>0060000</constant></entry>
<entry>блочное устройство</entry>
</row>
<row>
<entry><constant>0040000</constant></entry>
<entry>директория</entry>
</row>
<row>
<entry><constant>0020000</constant></entry>
<entry>символьное устройство</entry>
</row>
<row>
<entry><constant>0010000</constant></entry>
<entry>fifo</entry>
</row>
</tbody>
</tgroup>
</table>
Так, например, обычный файл может быть <constant>0100644</constant>, а директория может быть <constant>0040755</constant>.
</para>
<para>
В случае возникновения ошибки <function>stat</function> возвращает &false;.
</para>
&fs.file.32bit;
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
В случае возникновения ошибки будет сгенерирована ошибка уровня <constant>E_WARNING</constant>.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.4.0</entry>
<entry>
В Windows номер устройства теперь является серийным номером тома,
содержащего файл и номер inode - это идентификатор, связанный с файлом.
</entry>
</row>
<row>
<entry>7.4.0</entry>
<entry>
Статистика символьных ссылок <literal>size</literal>, <literal>atime</literal>, <literal>mtime</literal> и
<literal>ctime</literal> всегда соответствует статистике целевого объекта.
Это было ранее не характерно для <abbrev>NTS</abbrev>-сборки на Windows.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>stat</function></title>
<programlisting role="php">
<![CDATA[
<?php
/* Получаем статистику файла */
$stat = stat('C:\php\php.exe');
/*
* Выводим последнее время доступа к файлу, это то же самое, что и
* вызов fileatime()
*/
echo 'Последнее время доступа: ' . $stat['atime'];
/*
* Выводим время изменения файла, это то же самое, что и
* вызов filemtime()
*/
echo 'Время изменения: ' . $stat['mtime'];
/* Выводим номер устройства */
echo 'Номер устройства: ' . $stat['dev'];
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Использование информации из <function>stat</function> вместе с <function>touch</function></title>
<programlisting role="php">
<![CDATA[
<?php
/* Получаем статистику файла */
$stat = stat('C:\php\php.exe');
/* Удалось получить эту статистику? */
if (!$stat) {
echo 'вызов stat() не удался...';
} else {
/*
* Мы хотим увеличить время последнего доступа к файлу
* на 1 неделю вперёд.
*/
$atime = $stat['atime'] + 604800;
/* Касаемся файла */
if (!touch('some_file.txt', time(), $atime)) {
echo 'Не удалось коснуться файла...';
} else {
echo 'touch() выполнился успешно...';
}
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
&note.filesystem-time-res;
&note.clearstatcache;
&tip.fopen-wrapper.stat;
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>lstat</function></member>
<member><function>fstat</function></member>
<member><function>filemtime</function></member>
<member><function>filegroup</function></member>
<member><classname>SplFileInfo</classname></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
-->