mirror of
https://github.com/php/doc-ru.git
synced 2025-08-04 08:04:39 +00:00
394 lines
19 KiB
XML
394 lines
19 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<!-- EN-Revision: ea62fb83196997032641b50fe44420305466195e Maintainer: shein Status: ready -->
|
||
<!-- Reviewed: no -->
|
||
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.fopen">
|
||
<refnamediv>
|
||
<refname>fopen</refname>
|
||
<refpurpose>Открывает файл или URL</refpurpose>
|
||
</refnamediv>
|
||
|
||
<refsect1 role="description">
|
||
&reftitle.description;
|
||
<methodsynopsis>
|
||
<type class="union"><type>resource</type><type>false</type></type><methodname>fopen</methodname>
|
||
<methodparam><type>string</type><parameter>filename</parameter></methodparam>
|
||
<methodparam><type>string</type><parameter>mode</parameter></methodparam>
|
||
<methodparam choice="opt"><type>bool</type><parameter>use_include_path</parameter><initializer>&false;</initializer></methodparam>
|
||
<methodparam choice="opt"><type class="union"><type>resource</type><type>null</type></type><parameter>context</parameter><initializer>&null;</initializer></methodparam>
|
||
</methodsynopsis>
|
||
<para>
|
||
<function>fopen</function> закрепляет именованный ресурс, указанный
|
||
в аргументе <parameter>filename</parameter>, за потоком.
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="parameters">
|
||
&reftitle.parameters;
|
||
<para>
|
||
<variablelist>
|
||
<varlistentry>
|
||
<term><parameter>filename</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
Если <parameter>filename</parameter> передан в форме "scheme://...",
|
||
он считается URL и PHP проведёт поиск обработчика протокола
|
||
(также известного как "обёртка") для этой схемы. Если ни одна
|
||
обёртка не закреплена за протоколом, PHP выдаст замечание,
|
||
чтобы помочь вам отследить потенциальную проблему в вашем
|
||
скрипте и затем продолжит выполнение, как если бы <parameter>filename</parameter>
|
||
указывал на обыкновенный файл.
|
||
</para>
|
||
<para>
|
||
Если PHP установлено, что <parameter>filename</parameter> указывает на
|
||
локальный файл, тогда выполняется попытка открыть поток к этому файлу.
|
||
Файл должен быть доступен PHP, так что вам следует убедиться,
|
||
что права доступа на файл это разрешают.
|
||
Если вы включили <link linkend="ini.open-basedir">open_basedir</link>, то накладываются
|
||
дальнейшие ограничения.
|
||
</para>
|
||
<para>
|
||
Если PHP установил, что <parameter>filename</parameter> указывает на
|
||
зарегистрированный протокол и этот протокол зарегистрирован как
|
||
сетевой URL, PHP выполняет проверку состояния директивы
|
||
<link linkend="ini.allow-url-fopen">allow_url_fopen</link>.
|
||
Если она выключена, PHP выдаст предупреждение и вызов fopen закончится
|
||
неудачей.
|
||
</para>
|
||
<note>
|
||
<para>
|
||
Список поддерживаемых протоколов доступен в разделе <xref linkend="wrappers"/>.
|
||
Некоторые протоколы (<literal>обёртки</literal>) поддерживают
|
||
<literal>контекст</literal> и/или опции &php.ini;.
|
||
Обратитесь к соответствующей странице с описанием используемого протокола
|
||
для получения списка опций, которые могут быть установлены.
|
||
(например, значение &php.ini; <literal>user_agent</literal> используется
|
||
обёрткой <literal>http</literal>).
|
||
</para>
|
||
</note>
|
||
<para>
|
||
На платформе Windows, необходимо экранировать все
|
||
обратные слеши в пути к файлу или использовать прямые слеши.
|
||
<informalexample>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$handle = fopen("c:\\folder\\resource.txt", "r");
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</informalexample>
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>mode</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
Параметр <parameter>mode</parameter> указывает тип доступа, который вы
|
||
запрашиваете у потока. Он может быть одним из следующих вариантов:
|
||
<table>
|
||
<title>
|
||
Список возможных режимов для <function>fopen</function>,
|
||
используя <parameter>mode</parameter>
|
||
</title>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry><parameter>mode</parameter></entry>
|
||
<entry>Описание</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry><literal>'r'</literal></entry>
|
||
<entry>
|
||
Открывает файл только для чтения; помещает указатель
|
||
в начало файла.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>'r+'</literal></entry>
|
||
<entry>
|
||
Открывает файл для чтения и записи; помещает указатель
|
||
в начало файла.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>'w'</literal></entry>
|
||
<entry>
|
||
Открывает файл только для записи; в противном случае ведёт
|
||
себя так же, как и <literal>'w+'</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>'w+'</literal></entry>
|
||
<entry>
|
||
Открывает файл для чтения и записи; помещает указатель
|
||
в начало файла и обрезает файл до нулевой длины.
|
||
Если файл не существует - пытается его создать.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>'a'</literal></entry>
|
||
<entry>
|
||
Открывает файл только для записи; помещает указатель в конец
|
||
файла. Если файл не существует - пытается его создать.
|
||
В данном режиме функция <function>fseek</function> не применима, записи всегда добавляются в конец.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>'a+'</literal></entry>
|
||
<entry>
|
||
Открывает файл для чтения и записи; помещает указатель в конец
|
||
файла. Если файл не существует - пытается его создать. В данном режиме функция <function>fseek</function> влияет только на позицию чтения, записи всегда добавляются в конец.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>'x'</literal></entry>
|
||
<entry>
|
||
Создаёт и открывает только для записи; помещает указатель в
|
||
начало файла. Если файл уже существует, вызов
|
||
<function>fopen</function> закончится неудачей, вернёт &false; и
|
||
выдаст ошибку уровня <constant>E_WARNING</constant>.
|
||
Если файл не существует, попытается его создать. Это эквивалентно
|
||
указанию флагов <literal>O_EXCL|O_CREAT</literal> для внутреннего
|
||
системного вызова <literal>open(2)</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>'x+'</literal></entry>
|
||
<entry>
|
||
Создаёт и открывает для чтения и записи; в остальном имеет то же поведение, что и<literal>'x'</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>'c'</literal></entry>
|
||
<entry>
|
||
Открывает файл только для записи. Если файл не существует, то он создаётся.
|
||
Если же файл существует, то он не обрезается (в отличие от
|
||
<literal>'w'</literal>), и вызов к этой функции не вызывает ошибку (также как
|
||
и в случае с <literal>'x'</literal>). Указатель на файл будет установлен
|
||
на начало файла. Это может быть полезно при желании заблокировать
|
||
файл (смотрите <function>flock</function>) перед изменением, так как использование
|
||
<literal>'w'</literal> может обрезать файл ещё до того как была получена блокировка
|
||
(если вы желаете обрезать файл, можно использовать функцию
|
||
<function>ftruncate</function> после запроса на блокировку).
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>'c+'</literal></entry>
|
||
<entry>
|
||
Открывает файл для чтения и записи; в остальном имеет то же поведение, что и <literal>'c'</literal>.
|
||
</entry>
|
||
</row>
|
||
<row>
|
||
<entry><literal>'e'</literal></entry>
|
||
<entry>
|
||
Установить флаг close-on-exec (закрыть при запуске) на открытый файловый
|
||
дескриптор. Доступно только в PHP скомпилированном на системах
|
||
поддерживающих POSIX.1-2008.
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</table>
|
||
</para>
|
||
<note>
|
||
<para>
|
||
Разные семейства операционных систем имеют разные соглашения
|
||
относительно окончания строк. Когда вы пишете текст и хотите вставить
|
||
разрыв строки, вы должны использовать правильные символы (или символ) для
|
||
вашей операционной системы. Системы семейства Unix используют
|
||
<literal>\n</literal> в качестве символа конца строки, системы
|
||
семейства Windows используют <literal>\r\n</literal> в качестве
|
||
символов окончания строки и системы семейства Macintosh (Mac OS Classic) используют
|
||
<literal>\r</literal> в качестве символа конца строки.
|
||
</para>
|
||
<para>
|
||
Если вы используете неверный символ конца строки при редактировании
|
||
файлов, вы можете обнаружить, что при открытии эти файлы "странно
|
||
выглядят".
|
||
</para>
|
||
<para>
|
||
Windows предлагает флаг режима текстовой трансляции
|
||
(<literal>'t'</literal>), который автоматически переведёт
|
||
<literal>\n</literal> в <literal>\r\n</literal> во время работы с файлом.
|
||
И наоборот - вы также можете использовать <literal>'b'</literal>, чтобы
|
||
принудительно включить бинарный режим, в котором ваши данные
|
||
не будут преобразовываться. Чтобы использовать эти режимы, укажите
|
||
<literal>'b'</literal> или <literal>'t'</literal> последней
|
||
буквой параметра <parameter>mode</parameter>.
|
||
</para>
|
||
<para>
|
||
Флагом трансляции по умолчанию является <literal>'b'</literal>.
|
||
Вы можете использовать режим
|
||
<literal>'t'</literal>, если работаете с текстовыми файлами и
|
||
используете <literal>\n</literal> для обозначения
|
||
конца строки в вашем скрипте, но при этом предполагаете,
|
||
что ваши файлы будут использоваться в таких приложениях, как "Блокнот" (в устаревших версиях).
|
||
Во всех остальных случаях используйте флаг <literal>'b'</literal>.
|
||
</para>
|
||
<para>
|
||
Если вы укажете флаг 't' во время работы с бинарными файлами,
|
||
вы можете столкнуться со странными проблемами с вашими данными, включая
|
||
повреждённые файлы изображений и проблемы с символами <literal>\r\n</literal>.
|
||
</para>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
Опять же из соображений портируемости крайне
|
||
рекомендуется переписать старый код, который полагается на режим
|
||
<literal>'t'</literal>, чтобы вместо этого он использовал правильные
|
||
концы строк и режим <literal>'b'</literal>.
|
||
</para>
|
||
</note>
|
||
<note>
|
||
<simpara>
|
||
Параметр <parameter>mode</parameter> игнорируется при работе с
|
||
обёртками потока <filename>php://output</filename>,
|
||
<filename>php://input</filename>, <filename>php://stdin</filename>,
|
||
<filename>php://stdout</filename>, <filename>php://stderr</filename> и
|
||
<filename>php://fd</filename>.
|
||
</simpara>
|
||
</note>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>use_include_path</parameter></term>
|
||
<listitem>
|
||
<para>
|
||
Необязательный третий параметр <parameter>use_include_path</parameter>
|
||
может быть установлен в '1' или &true;, если вы также хотите провести
|
||
поиск файла в <link linkend="ini.include-path">include_path</link>.
|
||
</para>
|
||
</listitem>
|
||
</varlistentry>
|
||
<varlistentry>
|
||
<term><parameter>context</parameter></term>
|
||
<listitem>
|
||
¬e.context-support;
|
||
</listitem>
|
||
</varlistentry>
|
||
</variablelist>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="returnvalues">
|
||
&reftitle.returnvalues;
|
||
<para>
|
||
Возвращает указатель на файл в случае успешного выполнения&return.falseforfailure;
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="errors">
|
||
&reftitle.errors;
|
||
&fs.emits.warning.on.failure;
|
||
</refsect1>
|
||
|
||
<refsect1 role="changelog">
|
||
&reftitle.changelog;
|
||
<para>
|
||
<informaltable>
|
||
<tgroup cols="2">
|
||
<thead>
|
||
<row>
|
||
<entry>&Version;</entry>
|
||
<entry>&Description;</entry>
|
||
</row>
|
||
</thead>
|
||
<tbody>
|
||
<row>
|
||
<entry>7.0.16, 7.1.2</entry>
|
||
<entry>
|
||
Добавлена опция <literal>'e'</literal>.
|
||
</entry>
|
||
</row>
|
||
</tbody>
|
||
</tgroup>
|
||
</informaltable>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="examples">
|
||
&reftitle.examples;
|
||
<para>
|
||
<example>
|
||
<title>Примеры использования <function>fopen</function></title>
|
||
<programlisting role="php">
|
||
<![CDATA[
|
||
<?php
|
||
$handle = fopen("/home/rasmus/file.txt", "r");
|
||
$handle = fopen("/home/rasmus/file.gif", "wb");
|
||
$handle = fopen("http://www.example.com/", "r");
|
||
$handle = fopen("ftp://user:password@example.com/somefile.txt", "w");
|
||
?>
|
||
]]>
|
||
</programlisting>
|
||
</example>
|
||
</para>
|
||
</refsect1>
|
||
|
||
<refsect1 role="notes">
|
||
&reftitle.notes;
|
||
&warn.ssl-non-standard;
|
||
<note>
|
||
<para>
|
||
Если вы сталкиваетесь с проблемами во время чтения или записи
|
||
файлов, и вы используете PHP в виде серверного модуля, убедитесь
|
||
в том, что процесс сервера имеет доступ к используемым вами файлам и директориям.
|
||
</para>
|
||
</note>
|
||
<note>
|
||
<para>
|
||
Данная функция также может принимать директории в качестве параметра <parameter>filename</parameter>.
|
||
Если вы не знаете, является ли <parameter>filename</parameter> файлом или директорией,
|
||
то вам может понадобиться использовать функцию <function>is_dir</function>
|
||
до вызова функции <function>fopen</function>.
|
||
</para>
|
||
</note>
|
||
</refsect1>
|
||
|
||
<refsect1 role="seealso">
|
||
&reftitle.seealso;
|
||
<para>
|
||
<simplelist>
|
||
<member><xref linkend="wrappers"/></member>
|
||
<member><function>fclose</function></member>
|
||
<member><function>fgets</function></member>
|
||
<member><function>fread</function></member>
|
||
<member><function>fwrite</function></member>
|
||
<member><function>fsockopen</function></member>
|
||
<member><function>file</function></member>
|
||
<member><function>file_exists</function></member>
|
||
<member><function>is_readable</function></member>
|
||
<member><function>stream_set_timeout</function></member>
|
||
<member><function>popen</function></member>
|
||
<member><function>stream_context_create</function></member>
|
||
<member><function>umask</function></member>
|
||
<member><classname>SplFileObject</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
|
||
-->
|