1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-23 23:32:16 +01:00
Files
archived-doc-ru/features/remote-files.xml
Sergey Panteleev daef8df962 Обнуление тега Reviewed (#364)
[skip-lint]
[skip-spellcheck]
2021-11-16 13:03:53 +03:00

119 lines
5.2 KiB
XML
Raw Permalink 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: a0ae28d3bc85f927c22649ebd9a590b921534b7d Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="features.remote-files" xmlns="http://docbook.org/ns/docbook">
<title>Работа с удалёнными файлами</title>
<para>
В случае, если опция <option>allow_url_fopen</option> включена
в конфигурационном файле &php.ini;, вы можете использовать
URL-адреса <acronym>HTTP</acronym> и <acronym>FTP</acronym>
в большинстве функций, принимающих в качестве
параметра имя файла. Также вы можете использовать ссылки в операторах
<function>include</function>,
<function>include_once</function>,
<function>require</function> и
<function>require_once</function>
(для корректной работы этих функций
должна быть включена опция <option>allow_url_include</option>).
Дополнительную информацию о поддерживаемых в PHP протоколах вы можете
найти в <xref linkend="wrappers"/>.
</para>
<para>
Например, вы можете использовать это для того, чтобы открыть файл на
удалённом сервере, извлечь необходимые вам данные и использовать их
в запросе к базе данных или же просто отобразить их в дизайне вашего сайта.
</para>
<para>
<example>
<title>Получение заголовка удалённой страницы</title>
<programlisting role="php">
<![CDATA[
<?php
$file = fopen ("http://www.example.com/", "r");
if (!$file) {
echo "<p>Невозможно открыть удалённый файл.\n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file, 1024);
/* Сработает, только если заголовок и сопутствующие теги расположены в одной строке */
if (preg_match ("@\<title\>(.*)\</title\>@i", $line, $out)) {
$title = $out[1];
break;
}
}
fclose($file);
?>
]]>
</programlisting>
</example>
</para>
<para>
Вы также можете работать с удалёнными файлами, расположенными на FTP-сервере
(подразумевается, что вы авторизовались с необходимыми для этого
привилегиями). Таким образом вы можете только создавать новые файлы, но
попытка перезаписать существующий файл при помощи функции <function>fopen</function>
приведёт к ошибке.
</para>
<para>
Для того, чтобы авторизоваться под пользователем, отличным от 'anonymous',
вам необходимо указать логин (и, возможно, пароль) в адресной строке, например
так: '<literal>ftp://user:password@ftp.example.com/path/to/file</literal>'. (Вы можете
использовать этот же синтаксис для доступа к удалённым файлам по <acronym>HTTP</acronym>-протоколу,
если необходима Basic-аутентификация.)
</para>
<para>
<example>
<title>Сохранение данных на удалённом сервере</title>
<programlisting role="php">
<![CDATA[
<?php
$file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!$file) {
echo "<p>Невозможно перезаписать удалённый файл.\n";
exit;
}
/* Запись данных. */
fwrite ($file, $_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($file);
?>
]]>
</programlisting>
</example>
</para>
<para>
<note>
<para>
Глядя на приведённый выше пример, у вас может возникнуть идея
использовать эту технику для ведения удалённого лог-файла. К сожалению,
это нереализуемо, поскольку попытка записи в уже существующий
удалённый файл при помощи функции <function>fopen</function>
приведёт к ошибке. В реализации распределённого логирования,
возможно, вам поможет функция <function>syslog</function>.
</para>
</note>
</para>
</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
-->