Файлы и сети

 

Файловая система

Работа с каталогами

basename

Получение компонента файлового имени в пути

string basename (string path)

Возвращает имя файла, выделенного из строки path, представляющей путь к файлу.

В большинстве систем разделителем каталогов в пути служит прямой слеш «/>>. В Windows также может использоваться обратный слеш «\».

Spath = "/home/httpd/html/index.php3":
$file =basename ($path).
// $file is set to "index.php3"

См. также dirname()

dirname

Исключение имени файла из пути

string dirname (string path)

Возвращает строку пути path, из которой исключено имя файла.

В большинстве систем разделителем каталогов в пути служит прямой слеш «/». В Windows также может использоваться обратный слеш «\».

Spath = "/etc/passwd"
Sfile = dirname ($path);
// Sfile is set to "/etc"

См. также basename().

realpath

Исключение сокращений в строке пути

string realpath (string path)

Заменяет все символьные ссылки и сокращения типа: «/./», «/../» (с дополнительными слешами «/») в строке path и возвращает полученный безоговорочный путь.

$real_path = realpath
(". /. ./index.php"):

getcwd

Определение текущего каталога

string getcwd(void);

Возвращает текущую директорию, касательно которой проводятся файловые операции.

chdir

Смена текущего каталога

int chdir (string directory)

Возвращает FALSE при ошибке, в отвратном случае — TRUE.

mkdir

Создание каталога

int mkdir (string pathname, int mode)

Пытается сделать новый каталог pathname с знаками доступа mode (если они указываются в восьмеричной системе, первой цифрой должен быть нуль).

mkdir ("/path/to/my/chr". 0700).

Возвращает TRUE либо FALSE — при ошибке.

См. также rmdirz().

rmdir

Удаление каталога

int rmdir (string dirname)

Пытается удалить каталог dirname. Ката/юг должен быть пустым, и его знаки обязаны разрешать это.

При ошибке возвращает 0 (то есть FALSE).

См. также mkdir().

diskfreespace

Определение свободного пространства в каталоге

float diskfreespace (string directory)

Возвращает в байтах свободное пространство в каталоге directory, то есть в соответствующей ей файловой системе либо на разделе диска.

$df - diskfreespacet"/");
// свободное место в корневой директории "/"

dir

Класс каталога

new dir (string directory)

Псевдоориентированный механизм для получения списка файлов каталога. При создании объекта на основе класса открывается каталог, указанный directory.

Позднее этого становятся доступны два свойства объекта: дескриптор каталога handle (тот, что может использоваться с функциями readdir(), rewinddir() и closedir()) и строка path, указывающая, какой каталог в достоверный момент используется. У класса имеются три метода: read, rewind и close.

$d = dirC'/etc").
echo "Дескриптор: " .$d->handle."<br>\n".
echo "Путь: " $d->path."<br>\n":
while($entry=Sd->read()) {
// ступенчато выводить
echo Sentry."<br>\n".// имя каждого файла. }
// имеющегося в каталоге
$d->close():

opendir

Открытие дескриптора каталога

int opendir (string path)

Возвращает дескриптор открытого каталога path, тот, что позже этого позволено использовать в функциях closedir(), readdir(), rewinddir().

closedir

Закрытие открытого дескриптора каталога

void closedir (int dir_handle)

В аргументе указывается дескриптор каталога, возвращенный функцией opendir ().

readdir

Получение имени последующего файла в списке каталога

string readdir (int dir_handle)

Возвращает имя последующего файла в каталоге. Файлы возвращаются в виде неупорядоченной последовательности.

<?php
$handle=opendir('.').
echo "Directory handle: $handle\n",
echo "FilesAn";
while («file = readdir($handle))
!==FALSE) {
echo "$file\n":
closedir($handle).

Заметьте, что функция также возвращает значения «.» и «..». Если они не требуются, их позволено просто исключать: $handle=opendir('.'):

while (FALSE!==
($flie = readdir(Shandle))) { if
(Sfile != "." && Sfile != "..")
{ echo "$file\n".
closedir($handle):

rewinddir

Реинициализация дескриптора каталога

void rewinddir (int dir_handle)

Позднее вызова этой функции функция readdir() с аргументом dir_ hand! e будет возвращать имена файлов с начала в списке каталога.

Получение свойств и знаков файлов

file_exists

Проверка существования файла

bool file_exists (string filename)

Возвращает TRUE, если файл, указанный filename, существует; наоборот — FALSE. Функция не работает с удаленными файлами, файл должен находиться в доступной для сервера файловой системе.

Выводы функции кэшируются, см. функцию clearstatcache().

is_dir

Проверка существования каталога

bool is_dir (string filename)

Возвращает TRUE, если указанный каталог filename существует. Выводы функции кэшируются, см. функцию clearstatcache().

См. также: is_file() и isJink().

is_executable

Проверка существования запускаемого файла

bool is_executable (string filename)

Результаты функции кэшируются, см. функцию clearstatcache().

См. также: is file() и is link().

is_file

Проверка существования обычного файла

bool is_file (string filename)

Выводы функции кэшируются, см. функцию clearstatcache().

См. также: is_dir() и is_link().

is_ link

Проверка существования символической ссылки на файл

bool isjink (string filename)

Результаты функции кэшируются, см. функцию clearstatcache().

Функция не работает под Windows.

См. также: is_dir() и is_file().

is_eadable

Проверка существования файла, доступного для чтения bool is_readable (string filename)

Обычно PUP осуществляет доступ к файлу с привилегиями пользователя, запускающего web-сервер (нередко «nobody»). Соображения безопасности обязаны приниматься в расчет.

Выводы функции кэшируются, см. функцию clearstatcache().

См. также is_writeable().

is_writeable

Проверка существования файла, доступного для записи

bool is_writeable (string filename)

Обычно PHP осуществляет доступ к файлу с привилегиями пользователя, запускающего web-сервер (нередко «nobody»). Соображения безопасности обязаны приниматься в расчет.

Результаты функции кэшируются, см. функцию clearstatcache().

См. также is_readable().

is_uploaded file

Проверка существования файла, загруженного методом HTTP POST bool is_uploaded_file (string filename)

Возвращает TRUE, если файл с именем filename был загружен на сервер посредством HTTP POST. Нередко это полезно, чтобы убедиться, что пользователи из злого умысла не пытались принудить сценарий работать с теми файлами, с которыми им работать не следует, скажем: /etc/ passwd.

См. также: move_uploaded_file().

filetype

Получение типа файла

string filetype (string filename)

Возможные возвращаемые значения: fifo, char, dir, block, link, file, unknown. В случае ошибки возвращается FALSE.

Выводы функции кэшируются, см. функцию clearstatcache().

fileatime

Получение времени последнего доступа к файлу

int fileatime (string filename)

Возвращает время в формате «Unix timestamp» пли FALSE в случае / ошибки.

Выводы функции кэшируются. см. функцию clearstatcache().

Знак времени последнего доступа к файлу изменяется каждый раз, когда данные файла читаются. Так как это прочно снижает производительность при интенсивной работе с файлами и каталогами, нередко изменение этого знака в операционных системах блокируют, и тогда функция бесполезна.

filemtime

Получение времени последней записи в файл int filemtime (string filename)

Возвращает время в формате «Unix timestamp» либо FALSE в случае ошибки.

Результаты функции кэшируются. см. функцию clearstatcache().

Данный знак файла отражает последнее изменение самих данных файла (при операциях результата в файл). Используйте функцию date() для преобразования возвращаемого значения в читабельный формат.

filectime

Получение времени последнего изменения файла

int filectime (string filename)

Возвращает время в формате «Unix timestamp» либо FALSE в случае ошибки.

Результаты функции кэшируются, см. функцию clearstatcache().

В большинстве систем изменением файла считается также изменение его знаков (скажем, прав доступа).

См. также: filemtime() и fileatime().

В некоторых системах данный знак неправильно рассматривается как время создания файла.

filegroup

Получение группы принадлежности файла

int filegroup (string filename)

Возвращает ID группы владельца файла либо FALSE в случае ошибки. Идентификатор группы возвращается в численном формате, используйте posix_getgrgid() для преобразования его в имя группы.

Выводы функции каптируются, см. функцию clearstatcache(). Функция не работает под Windows.

fileowner

Получение группы владельца файла

int fileowner (string filename)

Возвращает ID владельца файла либо FALSE в случае ошибки.

Идентификатор владельца возвращается в численном формате, используйте posix_getpwuid() для преобразования его в имя владельца (username).

Результаты функции кэшируются, см. функцию clearstatcache().

Функция не работает под Windows.

fileperms

Получение знаков доступа файла

int fileperms (string filename)

Возвращает FALSE в случае ошибки.

Выводы функции кэшируются, см. функцию clearstatcache().

filesize

Получение размера файла

int filesize (string filename)

Возвращает FALSE в случае ошибки.

Выводы функции кэшируются, см. функцию clearstatcache().

fileinode

Получение файлового блока inode int fileinode (string filename)

Возвращает номер блока файла в файловой системе либо FALSE в случае ошибки.

Выводы функции кэшируются, см. функцию clearstatcache(). Функция не работает под Windows.

Манипулирование файлами

touch

Установка времени последней модификации либо создание файла

int touch (string filename [, int time])

Пытается установить для файла filename знак последней модификации time. Если он не указывается, используется текущее время. Если файл не существует, он создается (следовательно эту функцию нередко используют для создания файла). Возвращает TRUE либо FALSE — при ошибке.

if (touch (SFileName)) { print "Ок";} else { print "Ошибка". }

unlink

Удаление файла

int unlink (string filename)

В системах Unix для удаления файлов используется системная функция unlink().

Возвращает TRUE либо FALSE — при ошибке. Для удаления каталога используйте: rmdir(). Функция может не работать под Windows.

сору

Копирование файла

int copy (string source, string dest)

Копирует файл source в место, указанное dest. Возвращает TRUE либо FALSE — при ошибке.

if (!copy($file, Sfile.' bak')j {
print ("Оплошность копирования
$file...<br>\n"): }

См. также rename().

rename

Переименование либо перемещение файла

int rename (string oldname, string newname)

Переименовывает файл oldname в newname. Возвращает TRUE либо FALSE — при ошибке.

move_uploaded_file

Перемещение загруженного файла

boo! move_uploaded_file (string filename, string destination)

Функция проверяет, является ли файл filename реально загруженным t подмогой метода HTTP POST, если нет — возвращается FALSE.

Позже этого функция перемещает файл в новое место destination; а если это неосуществимо, возвращается FALSE (с выдачей системного сообщения).

См. также: is_uploaded_file().

tempnam

Генерация уникального имени временного файла string tempnam (string dir, string prefix)

Возвращает имя несуществующего в каталоге dir файла, начинающегося с prefix. Если аргументы не указываются, то используется непостоянный каталог системы (в Windows он указан в системной переменной ТМР и значение аргумента dir не используется; в Linux аналогично используется значение.TMPDIR; проверьте системную документацию функции tempnam(3) для разрешения вопросов).

При ошибке возвращается пустая строка.

Stmpfname " tempram ("/tmp". TOO");
// в Windows 2000 выдаст,
скажем:
//E:\DOCUMr-i\9335-l\LOCALS-l\
Temp\F009.tmp

В версии РНР 4.0.3 поведение функции было изменено: при получении имени одновременно создается такой файл. Это сделано для того, чтобы в промежутке между получением уникального имени и созданием такого файла друюе приложение либо сценарий не могли сделать идентичный непостоянный файл.

См. также tmp'ile().

tmpfile

Создание временного файла int tmpfile (void)

Создает уникальный файл в режиме записи, возвращая его дескриптор, подобно функции fopen(). Данный файл механически удаляется при его явственном закрытии (функцией fclose()) либо завершении сценария.

Для огромнее подробной информации просмотрите использование системной функции tmpfile()) и заголовочный файл stdio.h.

См. также tempnam().

chgrp

Изменение группы файпч

int chgrp (string f;,aname, mixed group)

Пытается сменить у файла filename группу на значение group. Только администратор может безоговорочно изменять данный знак у каждого файла, наоборот необходимо входить в группу владельцев файла.

Возвращает TRUE либо FALSE — при ошибке. Функция не работает под Windows.

См. также: chown() и chmod().

Пытается сменить у файла filename группу на значение group. Только администратор может безоговорочно изменять данный знак у любого файла, наоборот надобно входить в группу владельцев файла.

Возвращает TRUE либо FALSE — при ошибке. Функция не работает под Windows.

См. также: chown() и chmod().

chmod

Изменение знаков доступа файла

int chmod (string filename, int mode)

Аргумент mode необходимо видимо задавать как восьмеричное число (то есть первой цифрой должен быть 0), а строки типа «g+vv» не будут приниматься:

chmod ("/somedir/somefile". 755).
// десятичное число; возможно неверное
значение chmod
("/somedir/somefile". "u+rwx.go+rx"),
// строка; неверное значение
chmod ("/somedir/somefile". 0755).
// десятичное число; правильный вариант

Возвращает TRUE либо FALSE — при ошибке. Функция не работает иод Windows.

См. также: chown() и chgrp().

chown

Смена владельца файла

int chown (string filename, mixed user)

Только администратор может изменять данный знак файла.

Возвращает TRUE либо FALSE — при ошибке.

Функция не работает иод Windows.

См. также: chown() и chmod().

umask

Изменение текущего значения umask int umask (int mask)

Устанавливает значение PHP umask равным (mask & 0777) и возвращает предыдущее значение umask. При использовании РНР как серверного модуля значение umask восстанавливается при завершении каждого запроса.

При неуказании аргументов просто возвращается текущая маска. Функция может не работать под Windows.

Системные функции

linkinfo

Получение информации о файловой ссылке int linkinfo (string path)

Возвращает поле st_dev конструкции stat UNIX С, возвращаемой системным запросом Istat, либо FALSE (0) при ошибке. Используется для проверки существования файловой ссылки (с именем path ). Такой же метод используется макросом S_ISLNK, определенным в файле stat.h.

Функция не работает под Windows.

См. также: symlink(), link() и readlink().

readlink

Получение назначения символьной ссылке string readlink (string path)

Возвращает путь к файлу, на тот, что указывает ссылка path, либо О — при ошибке.

Функция не работает под Windows.

См. также: symlink(), readlink() и linkinfo().

symlink

Создание символьной ссылки на файл

int symlink (string target, string link)

Создает файл link, являющийся ссылкой на присутствующий файл target.

Функция не работает под Windows.

См. также: link(), readlink(), linkinfo().

link

Создание жесткой файловой связи

int link (string target, string link)

Функция не работает под Windows.

См. также: symlink(), readlink(), linkinfo().

stat

Получение информации о файле

array stat (string filename)

Возвращает массив следующих элементов:

0. номер устройства (device);
1. номер файлового блока (mode);
2. режим охраны файлового блока (inode);
3. число файловых связей (links);
4. идентификатор владельца (user id);
5. идентификатор группы (group id);
6. тип блочного устройства (inode);
7. размер в байтах;
8. время последнего доступа;
9. время последней модификации;
10. время последнего изменения;
11. размер блока для системного ввода-вывода;
12. число занимаемых блоков.

Результаты функции кэшируются, см. функцию clearstatcache().

Istat

Получение информации о файле либо ссылке на файл array Istat (string filename)

Функция подобна stat(), но она также работает с файловыми ссылками (причем информация возвращается о самой ссылке).

clearstatcache

Чистка кэша файловой информации void clearstatcache(void);

Во многих системах системный вызов stat() либо Istat ()(а также функций, перечисленных ниже) достаточно накладен, следовательно их результаты кэшируются и при последующем вызове извлекаются из кэша. При необходимости обновления кэшированных данных (скажем, когда файл мог быть изменен другим приложением) вызывается данная функция.

Воздействует на функции stat(), Istat(), file_exists(), is_writeable(), is_readable(), is executable(), is file(), is_dir(), isJink(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() и fileperms().

ftruncate

Урезание размера файла

int ftruncate (int fp, int size)

В качестве аргумента fp принимается дескриптор файла (а не имя), возвращаемый fopen(). Возвращает TRUE либо FALSE — при ошибке.

set_file_buffer

Установка буферизации файловых операций

int set_fi1e_buffer (int fp, int buffer)

Вывод в файл, осуществляемый функцией fwrite(), обычно буферизируется долями по 8 Кбайт. Это обозначает, что если два процесса одновременно осуществляют запись в один поток результата (файл), каждый из них позднее записи очередных 8 Кбайт данных останавливается, чтобы позволить другому выполнить операцию записи.

Функция устанавливает размер буфера buffer байтов для операций записи в файл, имеющий дескриптор fp. Если аргумент buffer указывается со значением 0, то тогда буферизация отменяется, что- позволяет быть уверенным, что все операции записи, выполненные функцией fwrite(), совершаются при ее завершении (до того, как другим приложениям будет разрешена запись в тот же файл).

Возвращается 0 либо EOF, если запрос не может быть выполнен.

$fp=fopen($file, "w"): if($fp){
set_file_buffer($fp. 0).
fputs($fp. Soutput);
fclose(Sfp): }

См. также: fopen(), fwrite().

flock

Блокирование совместного доступа

boo! flock (int fp, int operation [, int wouldblock]}

PHP поддерживает совместимый способ блокировки файла в целом для разделения совместного доступа (при этом все приложения, осуществляющие доступ, обязаны использовать данный цельный способ блокировки, наоборот это не будет работать).

Функция использует простой метод блокировки чтения и записи, имеющийся в большинстве систем (Unix и Windows). В аргументах функции указывается: дескриптор открытого файла fp и способ его блокировки operation, тот, что может принимать следующие значения

  • LOCK_SH — разделяемый доступ для чтения,
  • LOCKJiX — монопольный доступ для записи,
  • LOCKJJN — отмена разделяемой либо монопольной блокировки,
  • LOCK_NB — блокировка не требуется.

Если в необязательном третьем аргументе указывается значение TRUE, то таким образом выясняется возможность блокировки (состояние errno: EWOULDBLOCK).

Возвращается TRUE либо FALSE — если блокировка невероятна.

В большинстве операционных систем функция реализована для уровня приложения, и при использовании на многопоточном сервере с API, подобным ISAPI, нереально всецело полагаться на нее для охраны от сценариев РНР параллельно исполняемых различными «потоками» (threads) одного серверного модуля. Реально для операционной системы «потоки» одного процесса неразличимы.

Ввод и результат

fopen

Открытие файла либо URL

int fopen (string filename, string mode [, int use_include_path])

Функция открывает указанный аргументом filename поток ввода/ результата (файл) в режиме чтения/записи mode и возвращает определенный для него дескриптор.

Для того чтобы позволено было открывать удаленные файлы (посредством протоколов http и ftp), необходимо, чтобы параметр конфшу-рации allow_url_fopen был разрешен (по умолчанию он разрешен). Эта способность РНР именуется «URL fopen wrapper». В грядущем также станет возможно открывать сжатые файлы (gxip и bz2) аналогичным способом.

Если строка пути filename начинается с «http://» (регистр не основен) и HTTP 1.0 доступ к указанному серверу возможен, то открывается сеанс связи (указанный URL посылается серверу с указанным в пути заголовком 'Host:' для разрешения имен виртуальных хостов) и указатель файла настраивается на текст, получаемый в итог на запрос. Это не обрабатывает редиректы адреса HTTP, следовательно необходимо включать завершающие слеши для каталогов. Файл может быть открыт только для чтения.

Если строка пути filename начинается с «ftp://» (регистр не основен), то файл запрашивается через протокол FTP. При этом сервер должен поддерживать пассивный метод ftp-передачи. Если это разрешает сервер, файл может быть открыт либо для чтения, либо для записи (но не одновременно).

Если в аргументе filename указывается значение «php://stdin» либо "php://stdout", "php://stderr", открывается соответствующий типовой ноток.

Если filename начинается с чего-либо иного, открывается соответствующий файл в локальной файловой системе. Позволено указать добровольный аргумент use_include path со значением 1, и тогда файл будет искаться не только в текущем каталоге, но и в установленном по умолчанию (директивой include_path в файле php.ini) для подключаемых файлов.

Если открыть файл (в заданном режиме) не удастся, то возвращается значение FALSE.

Режим открытия mode может быть одним из следующих:

  • г — только для чтения; курсор файла устанавливается в (и последующее чтение производится с) начала файла;
  • г+ — для чтения и записи; о г начала файла;
  • w — только для записи «набело»; если файл существует, его содержимое удаляется, если не существует, то он создается;
  • w+ — для чтения и записи «набело»; если файл существует, его содержимое удаляется, если не существует, то он создастся;
  • а — только для дозаписи в конец; если файл существует, курсор устанавливается в его конец, если не существует, то он создается;
  • • а+ — для чтения и дозаписи в конец; если файл существует, курсор устанавливается в его конец, если не существует, то он создается.

В аргументе mode позволено также указать символ b, что бывает целебно в системах, различающих двоичные (binary) и текстовые файлы1. Для других систем (скажем, Unix) это бесполезно и игнорируется.

$fp - fopen ("/home/rasmus/file.txt". "г");
$fp = fopen ("/home/rasmus/file.gif". "wb"):

Различие между двоичными и текстовыми файлами о том, что конец первых определяется исходя из их размера, а вторых — по присутствию символа конца файла (EOF).

$fp = fopen
("http://www.php net/", "r"):
$fp = fopen
("ftp;//user:password@example.com/". "w");

He забывайте, что для доступа к файлу необходимы соответствующие полномочия.

В Windows обратные слеши обязаны быть двойными либо заменяться на прямые, если строка пути заключена в двойные кавычки.

$fp = fopen ("c:\\data\\info.txt". "r"):

Последующий пример открывает удаленный HTML-файл (по протоколу http) и выводит его заголовок:

<?php
Sfile = fopen ("http://www.php.nert/", "r");
if (!$file) {
echo "^Невозможно открыть
удаленный файл.\n":
exit; \ i
while (Ifeof ($file)) {
fgets ($nle. 1024);
/* Заголовок и его теги обязаны
располагаться в одной строке */
if (eregi ("<titie>( *)</title>".
Sline. $out)) { $title = $out[l]; break. }
fclose($fiie); echo Stitle; ?>

Еще один пример показывает открытие и запись в FTP-фапл (на самом деле для работы с FTP-файлами рекомендуется использовать специальные функции).

<?php
Sfile ' fopen
("ftp;//ftp.php.net/inconiing/outpL:tfile". "w").
if (!$file) { echo 'vp>
Невозножно открыть удаленный
файл для записи.\n"; exit;
/* Запись в файл */
fputs ($flle. "$HnP_USER_AGENT\n");
fclose (Sfile). ?>

Заметьте, что запись в конец FTP-файла не поддерживается (файл не должен существовать, а должен создаваться). Если для НТР-доступа надобен пароль (по умолчанию вход осуществляется под именем «anonymous» без пароля), то его позволено указывать в строке адреса в виде:

' ftp : //user : password@f tp . exampl e .
com/path/f ile

Такую же форму ввода пароля позволено использовать и для протокола HTTP, когда требуется аутентификация типа Basic.

См. также: fclose(), fsockopen(), socket_set_timeout() и popen().

fclose

Закрытие (дескриптора) файла int fclose (int fp)

Возвращает TRUE либо FALSE — при ошибке.

Дескриптор файла fp должен быть возвращен при успешном открытии файла функцией fopen() либо fsockopen().

рореn

Открытие дескриптора вывода процесса

int рореп (string command, string mode)

Запускает процесс приложения command и возвращает дескриптор потока ввода/вывода, определенный ему в режиме mode (аналогично fopen(J). При ошибке возвращает FALSE. Дескриптор может в грядущем использоваться функциями fgets(), fgetss() и fputs(), а позже этого закрыт pclose().

$fp = poptn ( VtTn/ls" "r"};

См. также pclose().

pclose

Закрытие дескриптора процесса

int pclose (int fp)

Закрывает дескриптор процесса (он должен быть заблаговременно удачно сделан функцией рореп()).

Возвращае r-код завершения процесса.

См. также рореn().

fstat

Получение информации о файле через дескриптор

array fstat (int fp)

Возвращает массив с информацией о файле аналогично функции stat(). но отличается от нее тем, что принимает в качестве аргумента дескриптор успешно открытого файла вместо его имени.

fgetc

Чтение символа из файла

string fgetc (int fp)

Возвращает строку, содержащую один символ из файла, имеющего дескриптор fp (ранее возвращенный функцией fopen(), popen() либо fsockopen()). Если это символ EOF (указатель конца файла), возвращает FALSE.

См. также: fread(), fopen(), popen(), fsockopen() и fgets().

fgets

Чтение строки из файла

string fgets (int fp, int length)

Возвращает строку из файла, имеющего дескриптор fp (ранее возвращенный функцией fopen(), popen() либо fsockopen()). Длина возвращаемой строки указывается аргументом length. Если в строке встречается символ EOF (указатель конца файла) либо «\n» (конец строки), то возвращаются все символы впритирку до этого (длина строки тогда может быть менее length). При ошибке возвращает FALSE.

$fd = fopen ("/tmp/inputfile.txt". "r"):
while (Ifeof ($fd)) {
$buffer = fgets($fd. 4096);
echo Sbuffer; } fclose ($fd):

См. также: fread(), fopen(), popen(), fgetc(), fsockopen() и socket_set_ timeout().

fgetss

Чтение строки из файла и удаление из нее HTML-тегов

string fgetss (int fp, int length [, string allowable_tags])

Функция подобна fgets(), за исключением того, что она также удаляет любые HTML- и PHP-теги из получаемого текста. В аргументе allowable_tags позволено указать, какие теги не следует удалять.

См. также: fgets(), fopen(), fsockopen(), popen() и strip_tags().

fgetcsv

Чтение строки файла и разделение ее на поля CSV

array fgetcsv (int fp, int length [, string delimiter])

Функция сходна с fgets(), но позднее чтения она разделяет полученную строку на поля (согласно формату CSV) и возвращает их в элементах массива. Разделителем полей считается запятая либо другой символ, тот, что позволено указать в аргументе delimiter.

Аргумент fp должен быть дескриптором благополучно открытого файла (возвращенный функциями fopen(), popen() либо fsockopen()).

Аргумент length должен быть громаднее, чем самая длинная строка CSV-файла (включая завершающие символы строки).

Возвращает FALSE при ошибке (которой также считается непредвиденный конец файла). Нередко в CSV-файлах знаком конца файла считается пустая строка, которая будет возвращена в виде массива, содержащего один нулевой элемент, и это не будет считаться оплошностью.

$l"OW = 1:
$fp = fopen ("test.csv"."r").
while
(Sdata = fgetcsv ($fp. 1000. ".")) {
$num = count ($data);
print "<p>
Jnura fields in line $row: <br>";
$row++:
for ($c=0: $c<$num: Ic++)
{ print $data[$c] "<br>";
} } fclose ($fp):

file

Чтение всякого файла в массив

array file (string filename [, int use_include_path])

Функция подобна readfile(), но строки файла возвращаются в массиве. Концом строки считается символ «\п» (он также возвращается).

Позволено указать добровольный аргумент use_include_path со значением 1, и тогда файл будет искаться не только в текущем каталоге, но и в установленном по умолчанию (директивой include_path в файле php.ini) для подключаемых файлов.

<?php
// прочитать web-страницу в массив
и распечатать Sfcontents = file
('http://www.php.net'): while (list (Slinejmm. Sline)
= each ($fcontents))
{ echo "<b>Line $line_num:</b> " .
htmlspecialchars ($line) .
"<br>\n", }
// прочитать в одну строку
$fcontents - join (". file
('http://www.php.net')): ?>

См. также: readfile(), fopen(), fsockopen() и popen().

fread

Чтение файла

string fread (int fp, int length)

Возвращается строка, представляющая последовательность байтов файла (указанного дескриптором fp) длиной length. Чтение прекращается также, если встречается символ EOF.

$filename = "/usr/local/something.txt";
$fd - fopen (Sfilename. "r").
$contents = fread ($fd, filesize (Sfllename)):
fclose ($fd):

См. также: fwrite(), fopen(), fsockopen(), popen(), fgets(), fgetss(), fscanf(), file(), fpassthru().

readfile

Вывод файла

int readfile (string filename [, int use_include_path])

Функция исполняет ступенчато три операции. Открывает файл, так же как функция fopen() (режим открытия не указывается, так как он используется только для чтения). Читает и выводит все содержимое файла в типовой поток результата и закрывает файл.

Отличие этой функции от директив include(), require() в том, что она возвращает число выведенных байтов (либо значение FALSE при ошибке). В случае происхождения ошибки также выводится стандартное уведомление (если, безоговорочно, при вызове функции сообщения об ошибках не блокируются, скажем, так: @readfile).

См. также: fpassthru(), file(), fopen(), include(), require(), virtual().

fpassthru

Вывод содержимого файла int fpassthru (int fp)

Читает содержимое файла с дескриптором (пока не встретится символ EOF) и выводит его в типовой поток результата. При ошибке возвращается FALSE.

Дескриптор должен быть возвращен при благополучном открытии файла функцией fopen(), popen() либо fsockopen(). Позднее результата файл механически закрывается (и дескриптор становится недействителен).

Для простого чтения и вывода файла (если не требуется заблаговременная запись в него) используйте функцию readfile().

См. также: readfile(), fopen(), popen() и fsockopen()

fscanf

Форматированный ввод из файла

mixed fscanf (int handle, string format [, string varl...])

Функция подобна sscanf(), но она читает данные из файла (указанного дескриптором handle) и интерпретирует их согласно формату, указанному аргументом format. Если в функции указываются только два аргумента, извлеченные данные возвращаются в массиве; в отвратном случае надобно указывать ссылки на переменные, в которых следует сохранить значения (тогда функция возвращает число инициализированных переменных).

$fp = fopen ("users.txt"."г").
while
(Suserinfo = fscanf ($fp. "ls\Ws\Us\n")) {
list ($name. Sprofession,
Scountrycode) = lusennfo;
//... делаем что-то со значениями
} fclose($fp),

Содержимое файла users.txt

Javier argonaut pe
hiroshi sculptor jp
robert slacker us

См. также: fread(), fgets(), fgetss(), sscanf(), printf() и sprintf().

fwrite

Запись в файл

int fwrite (int fp. string string [, int length])

Записывает содержимое строки string в файловый ноток (на тот, что указывает дескриптор fp). При указании аргумента length производится запись только указанного числа байтов (но не большего, чем содержится в строке), а также игнорируется параметр конфигурации magic_quotes_runtime (и слеши не исключаются из записываемой строки).

См. также: fread(), fopen(), fsockopen(), popen() и fputs().

fputs

Синоним функции fwrite

int fputs (int fp, string str [, int length])

Аргумент длины записываемой строки length может не указываться (тогда строка str записывается в файл целиком).

fflush

Запись стандартного вывода в файл int fflush (int fp)

Весь буферизированный вывод записывается в открытый файл, на тот, что указывает дескриптор fp. Возвращает TRUE либо FALSE — при ошибке.

feof

Проверка достижения конца файла

int feof (int fp)

Возвращает TRUE, если курсор файла указывает на символ EOF либо возникает оплошность; наоборот — FALSE.

Аргумент fp должен быть дескриптором успешно открытого файла (возвращенный функциями fopen(), popen() либо fsockopen()).

ftell

Проверка позиции курсора файла

int ftell (int fp)

Возвращает позицию курсора файла, на тот, что указывает дескриптор fp, то есть то смещение от начала файлового потока, в которое производится запись либо осуществляется чтение. При ошибке возвращает FALSE.

Аргумент fp должен быть дескриптором благополучно открытого файла (возвращенный функциями fopen(), popen()).

См. также: fopen(), popen(). fseek() и rewind().

fseek

Установка позиции курсора файла

int fseek (int fp, int offset [. int whence])

Новая позиция курсора файла указывается аргументом offset и измеряется в байтах от места, указанного аргументом whence, тот, что может принимать одно из значений:

  • SEEK_SET — от начала файла;
  • SEEK_CUR — от текущей позиции курсора;
  • SEEK_ENO — от конца файла.

Если аргумент whence не указывается, смещение вычисляется от начала файла. При ошибке возвращается -1, наоборот 0. Заметьте: указание смещения позднее символа EOF не считается оплошностью.

Дескриптор файла fp должен быть возвращен успешным вызовом функции fopen(). С файлами, открытыми через протокол HTTP либо FTP, функция не работает.

См. также: ftell() и rewind().

rewind

Установка курсора на вступление файлового потока

int rewind (int fp)

Функция эквивалентна вызову fseek(fp, 0). При ошибке возвращается 0.

См. также: fseek() и ftel().

Работа с архивами Zlib

Модуль zlib (http://www.info-zip.org/pub/infozip/zlib/), разработанный Jean-loup Gailly и Mark Adler, разрешает производить операции файлового ввода-результата в файлах, архивированных (сжатых) методом gzip (.gz). В этом модуле РНР используется библиотека zlib версии 1.0.9. Модуль содержит большую часть родных функций файловой системы (с префиксом gz), которые могут работать как с обычными, так и с архивными файлами (но не с секстами).

Для текущей версии РНР подмога этих функций должна быть неявно включена в обычные функции файловой системы. Таким образом, при подключении модуля zlib файловые функции (с помощью метода, называемого fopen-vvrapper для .gz-файлов) могут также легко работать с архивными файлами, как и с FTP-файлами. Для этого в строке имени файла (пути к нему) необходимо указывать нестандартный префикс 'zlib:', подобно указанию URL для доступа к FTP-файлам.

<?php
$filename='C:\ZZZ.gz1.
// открыть файл для записи с
максимальным сжатием
$zp - gzopen($filename. "w9"):
// записать строку в файл
$s =- "Only a test. test. test. test,
test test. test. test!\n"
g?wnte($zp. $s);
gzclose(SzD). // закрыть файл
$zp = gzopen($filename. "г").
print gzread($zp. 3):// прочитать
З символа gzpassthru($zp):
// выводить содержимое до
конца файла и закрыть его
// еще раз вывести содержимое файла
if (rea>1gzfile($filename) != strlen($s))
{ echo "Error with zlib functions!".} ?>

gzcompress

Сжатие строки методом Gz

string gzcompress (string data [, int level])

Аргументом level позволено указать степень сжатия (от минимального О до 9).

См. также gzuncompress().

gzuncompress

Распаковка gz-сжатой строки

string gzuncompress (string data [, int length])

Возвращает достоверную строку данных, сжатую ранее функцией gzcompress(), либо FALSE в случае ошибки. Оплошность может возникнуть (помимо случая поврежденных данных), если при распаковке размер строки повышается огромнее чем в 256 раз либо становится громаднее, чем указано в необязательном аргументе length.

См. также gzcompress().

readgzfile

Результат gz-файла

int readgzfile (string filename [, int use_include_path])

Читает файл filename, распаковывает его и выводит (в типовой поток результата). Функция может также работать с обычными файлами (тогда распаковка не производится).

Возвращает число выведенных байтов либо FALSE — в случае ошибки. В случае ошибки также выводится сообщение об ошибке (если только функция не была вызвана как Preadgzfile).

Добровольный аргумент include_path позволено использовать (если его значение равно 1), чтобы поиск файла также производился в установленных параметром include_path каталогах по умолчанию.

См. также: gzpassthru(), gzfile() и gzopen().

gzfile

Чтение всякого gz-файла в массив

array gzfile (string filename [, Int use_include_path])

Функция подобна readgzfi'le(), но распакованные данные не выводятся, а возвращаются в виде массива.

См. также: readgzfile() и gzopen().

gzopen

Открытие gz-файла

int gzopen (string filename, string mode [, int use_include_path])

Функция сходна с fopen(), но она работает с файлами gzip (.gz). Аргумент,mode может быть таким же, как в функции fopen() ("rb" либо "wb"), но может также включать цифру, указывающую на степень используемого сжатия (скажем: "wb9-") и метод: f для фильтруемых данных (скажем: "wb6f"), h -для компрессии Хаффмана ("wblh"). Изложение параметра deflatelnit2 смотрите в файле zlib.h.

Функция также может использоваться для открытия обычного файла; в таком случае gzread() будет читать данные файла без декомпрессии.

Функция возвращает дескриптор открытого файла (либо FALSE в случае ошибки), применяя тот, что, позволено осуществлять операции ввода-вывода, и сжатие и распаковка данных будут осуществляться механически.

Добровольный аргумент include_path позволено использовать (если его значение равно 1), чтобы поиск файла также производился в установленных параметром include_path каталогах по умолчанию.

$fp = gzopen ("/tmp/file gz". "r").

См. также gzclose().

gzclose

Закрытие gz-файла int gzclose (int zp)

Закрывает gz-файл, дескриптор которого zp должен был быть ранее удачно возвращен функцией gzopen(). Возвращает TRUE либо FALSE - при ошибке.

gzread

Чтение последовательности символов из gz-файла

string gzread (int zp, int length)

Число читаемых байтов указывается аргументом length. Дескриптор zp должен быть ранее успешно возвращен функцией gzopen(). Чтение прекращается, когда будет прочитано length распакованных байтов либо если будет обнаружен символ конца файла EOF.

Sfilename =
"/usr/local/something txt.gz": Szd =
gzopen (Sfilename. "r"). Scontents =
gzread (Szd. 10000). gzclose (Szd);

См. также: gzwrite(), gzopen(), gzgets(), gzgetss(), gzfile() и gzpassthru().

gzgetc

Чтение символа из gz-файла

string gzgetc (int zp)

Возвращает строку, содержащую исключительный (распакованный) символ файла, имеющего дескриптор zp. Если встречается символ EOF, то возвращается FALSE (так же как функцией gzeof()).

Дескриптор zp должен быть ранее успешно возвращен функцией gzopen().

См. также: gzopen() и gzgets().

gzgets

Чтение строки

string gzgets (int zp, int length)

Возвращает распакованную строку gz-файла, имеющего дескриптор zp.

Чтение прекращается, когда будет прочитано length-1 распакованных байтов, если будет обнаружен символ конца файла EOF либо встретится символ конца строки.

При ошибке возвращает FALSE.

Дескриптор zp должен быть ранее удачно возвращен функцией gzopen().

См. также: gzopen(), gzgetc() и fgets().

gzgetss

Аналог gzgets, удаляющий теги HTML и PHP из текста

string gzgetss (int zp, int length [, string allowablejtags])

Необязательным аргументом позволено указать, какие теги не следует удалять.

См. также: gzgets(), gzopen(), strip_tags().

gzpassthru

Вывод всякого содержимого gz-файла до его конца

int gzpassthru (int zp)

Читает (распаковывая) gz-файл с дескриптором zp от текущей позиции курсора и до конца (позиции, в которой находится символ EOF) и позже этого выводит полученное содержимое в типовой поток вывода. При ошибке возвращает FALSE.

Дескриптор zp должен быть ранее благополучно возвращен функцией gzopen().

Позднее вывода файл закрывается (функция gzclose() вызывается неявно).

gzwrite

Запись строки в gz-файл

int gzwrite (int zp, string string [, int length])

Записывает содержимое строки string (упаковывая) в gz-файл с дескриптором zp. Если указан аргумент length, то запись прекращается позднее того, как будет записано length (неупакованных) байтов (если размер строки огромнее length байтов).

Заметьте, что параметр magic_quotes_runtime (если он разрешен) игнорируется и слеши не удаляются из строки string, если указывается аргумент length.

См. также: gzread(), gzopen() и gzputs().

gzputs

Синоним функции gzwrite

int gzputs (int zp, string str [, int length])

gzeof

Проверка наличия символа конца файла

int gzeof (int zp)

Возвращает TRUE, если текущий символ gz-файла — это EOF либо если при операции чтения случилась оплошность; наоборот возвращает FALSE.

Дескриптор zp должен был быть ранее удачно возвращен функцией gzopen().

gztell

Определение позиции курсора gz-файла int gztell (int zp)

Возвращает ту позицию (в байтах) от начала файла (на тот, что указывает дескриптор zp), в которую будет осуществляться запись либо чтение (gz-функциями).

При ошибке возвращает FALSE.

Дескриптор zp должен был быть ранее успешно возвращен функцией gzopen().

См. также: gzopen(), gzseek() и gzrewind().

gzseek

Перемещение курсора gz-файла int gzseek (int zp, int offset)

Передвигает позицию курсора файла (на тот, что указывает дескриптор zp) на число байтов от его начала offset.

Если файл открыт для чтения, то функция эмулируется, и она будет выполняться крайне медлительно (так как в сжатых файлах смещение необходимо вычислять). Если файл открыт для записи, то курсор позволено сдвигать только вперед (тогда в файл просто записывается последовательность нулей впритирку до новой позиции).

Функция возвращает 0 либо -1 — при ошибке. Заметьте, перемещение курсора в позицию позднее символа EOF не считается оплошностью.

См. также: gztell() и gzrewind().

gzrewind

Перемещение курсора в вступление gz-файла

int gzrewind (int zp)

При ошибке возвращается 0.

Дескриптор zp должен был быть ранее благополучно возвращен функцией gzopen().

См. также: gzseek() и gztell().

Сжатые файлы Bzip2

Модуль bzip2 использует библиотеку (http://sources.redhat.com/bzip2/), написанную Джулианом Севардом (Julian Seward), которая позволяет проводить операции файлового ввода-результата из архивов bzip2 (.bz2).

Чтобы использовать функции bzip2 в РНР, необходимо при компиляции указать параметр —with-bz2[=DIR] (для этого требуется библиотека bzip2/ Iibbzip2 версии не ранее 1.0.x). Данный модуль позволено также подключить динамически. Так как модуль добавлен недавно, он может работать нестабильно.

<?php
Sfilename = "/tmp/testfile.bz2";
$str = "This is a test string.\n":
$bz = bzopen($filename. "w");
bzwrite($bz. $str),
bzclose($bz).
Ibz = bzopen($filename. "r").
echo print bzread($bz. 10). bzread($bz).
bzclose($bz). ?>

bzcompress

Сжатие строки методом bzip2

string bzcompress (string source [, int blocksize [, int workfactor]]) Исходная строка указывается в аргументе source.

В необязательном аргументе blocksize позволено указать уровень сжатия (от 1 до 9, где 9 — максимальное сжатие, требующее максимума источников), по умолчанию он равен 4.

Аргумент workfactor управляет сжатием данных с высокой частотностью. Возможные значения от 0 до 250. О — специальное значение. По умолчанию: 30.

$str = "sample data" :
$bzstr = bzcompress($str. 9);
pnnt( $bzstr ):

См. также: bzdeconpress().

bzdecompress

Распаковка строки, сжатой методом bzip2

string bzdecompress (string source [. int small])

Распаковывает строку source, содержащую сжатые методом bzip2 данные, и возвращает полученную строку. Если в необязательном аргументе указывается значение TRUE, используется алгоритм, потребляющий минимальный объем памяти (максимум 2.3 Мб), но при этом функция работает неспешней (в 2 раза).

<?php
$start_str = "Это первоначальная
несжатая строка":
Jbzstr -= bzcompress($start_str'>;
print( 'Compressed
String: Sbzstr \n<br>" ):
$str = Dzdecompress($bzstr);
print( "Decompressed
St1" rig. ' $str . "\n<br>" ): ?>

См. также: bzcompress().

bzopen

Открытие сжатого файла bzip2

int bzopen (string filename, string mode)

Возвращает дескриптор открытого файла либо FALSE в случае ошибки. Аргумент mode может быть таким же, как в функции fopen() ("r" для чтения, "w" для записи и т. д.).

<?php
$bz = bzopenf"/trap/too.bz2", "r"):
$decompressea_file = bzread($oz.
fiIesize("/tmp/foo.bz2")):
bzclose($bz):
print( "The contents of
/tmp/foo.Dz2 are: " ):
print( "\n<br>n" ):
print( $decompressed_file ). ?>

См. также bzclose().

bzclose

Закрытие файла bzip2 int bzclose (int bz)

Закрывает файл bzip2, дескриптор которого bz должен был быть ранее удачно возвращен функцией bzopen(). Возвращает TRUE либо FALSE - при ошибке.

См. также bzopen().

bzread

Чтение из файла bzip2

string bzread (int bz [, int length])

Число читаемых байтов позволено указать аргументом length (если он не указывается, то его значением считается 1024). Дескриптор bz должен быть ранее успешно возвращен функцией bzopen(). Чтение прекращается, когда будет прочитано length распакованных байтов либо если будет обнаружен символ конца файла EOF.

<?php
$bz = bzopen("/tmp/foo.bz2". "г"):
$str
bzread($bz. 2048), printt $str ):?>

См. также: bzwrite() и bzopen().

bzwrite

Запись в файл bzip2 данных

int bzwrite (int bz, string data [, int length])

В аргументе data указывается строка, содержащая записываемые данные. В аргументе bz указывается дескриптор открытого файла bzip2. Если указан аргумент length, то запись прекращается позднее того, как будет записано length (неупакованных) байтов (если размер строки огромнее length байтов).

<?php
$str = "uncompressed data".
$bz - bzopenCYtmp/foo.bzZ", V).
bzwnte($bz. $str. strlpn($str)).
bzclose($bz); ?>

См. также: bzread() и bzopen().

bzflush

Запись всякого буферизованного вывода в файл bzip2

int bzflush (int bz)

В аргументе bz указывается дескриптор открытого файла.

Возвращается TRUE либо FALSE — при ошибке.

См. также: bzread() и bzwrite().

bzerrno

Получение номера ошибки bzip2 int bzerrno (int bz)

В аргументе bz указывается дескриптор открытого файла, при операции с которым случилась оплошность.

См. также: bzerror() и bzerrstr().

bzerrstr

Получение изложения ошибки bzip2

string bzerrstr (int bz)

В аргументе bz указывается дескриптор открытого файла, при операции с которым случилась оплошность.

См. также: bzerrno() и bzerror().

bzerror

Получение номера и изложения ошибки bzip2 в массиве

array bzerror (int bz)

Возвращается ассоциативный массив, содержащий соответственно два элемента. В аргументе bz указывается дескриптор открытого файла, при операции с которым случилась оплошность.

Serror = bzerror($t>z):
echo $error["errno"]:
echo Sen or["errbtr"].

См. также: bzerrno() и bzerrstr().

FTP

При использовании модуля FTP им определяются две константы: FTP_ASCII и FTP_BINARY.

Функции используют дескриптор сеанса подключения (это 1-й аргумент, обозначенный как ftp_stream).

Простой сеанс FTP может проходить последующим образом:

<?php
/.' открытие простого FTP сеанса
$connjd = ftp_connect("$ftp_server").
// login with user-name and password
$login_result = ftp_login
($conn_id. "$ftp_user_name", "$ftp_user_pass").
// проверка связи
if ((!$conn_-d) || (!$login_result))
{ echo 'Невозможно установить
Ftp связь! ".
"Для сервера $ftp_server. пользователю
Suser", die; } else
echo "Подключение к
серверу $ftp_server удачно!"; }
// загрузить файл Supload =
ftp_put($conn_ia. "$dest,ination_file".
"Ssourcejile". rrp_BINARY):
// проверка загрузки if (!$upload)
{ echo "Загрузка не удалась!";
} else { echo "Файл $source_file был
загружен как $destination_file": }
// закрыть поток FTP
ftp_quitl$copn_id). ?>

ftp_connect

Подключение к FTP-серверу

Int ftp_connect (string host [, int port])

Аргумент host указывает имя сервера, к которому осуществляется доступ, a port — используемый для подключения порт (если он не указан либо указывается 0, то используется порт по умолчанию — 21).

Возвращает дескриптор потока FTP либо FALSE при ошибке.

ftp_ pasv

Переключение пассивного режима

int ftp_pasv (int ftp_stream. int pasv)

Переключает режим подключения в пассивный (если аргумент pasv равен TRUE) либо активный (если аргумент pasv равен FALSE). В пассивном режиме передача данных инициируется клиентом, а не сервером (это бывает надобно при блокировке портов у клиента).

Возвращает TRUE либо FALSE — при ошибке.

ftp_ login

Вход на сервер FTP

int ftpjogin (int ftp_stream, string usemame, string password)

Зарегистрироваться в системе под именем username с паролем password.

Возвращает TRUE либо FALSE — при ошибке.

ftp_quit

Завершение сеанса FTP

int ftp_quit (int ftp_stream)

ftp_pwd

Определение текущего каталога

string ftp_pwd (int ftp_stream)

Возвращает текущий каталог FTP-сервера либо FALSE — при ошибке.

ftp_cdup

Переход в корневой каталог

int ftp_cdup (int ftp_stream) Возвращает TRUE либо FALSE — при ошибке.

ftp_chdir

Переход в каталог

int ftp_chdir (int ftp_stream, string directory)

Возвращает TRUE либо FALSE — при ошибке.

ftp_mkdir

Создание каталога

string ftpjnkdir (int ftp_stream, string directory)

Возвращает имя сделанного каталога directory либо FALSE — при ошибке.

ftp_rmdir

Удаление каталога

int ftp_rmdir (int ftp_streara, string directory) Возвращает TRUE либо FALSE — при ошибке.

ftp_nlist

Получение листинга каталога

array ftp_nlist (int ftp_stream, string directory) Возвращает массив файловых имен либо FALSE — при ошибке.

ftp_rawlist

Получение детализированного листинга каталога

array ftp_raw1ist (int ftp_stream, string directory)

Исполняет РТР-команду LIST, и возвращает ее результат в массиве, где каждый элемент соответствует строке текста «как есть». Идентификатор типа системы, возвращаемый ftp_systype(), может быть использован для определения того, как следует интерпретировать выводы.

ftp_systype

Получение системного идентификатора типа FTP-сервера

string ftp_systype (int ftp_stream)

Возвращает строковое значение либо FALSE — при ошибке.

ftp_ get

Загрузка файла с FTP

int ftp_get (int ftp_stream, string 1ocal_file, string remote_file, int mode)

Загружает удаленный файл remote_file с сервера FTP и сберегает его локально под именем local_file. Режим передачи mode должен быть указан либо как FTP_ASCII, либо как FTP_BINARY.

Возвращает TRUE либо FALSE — при ошибке.

ftp_get

Загрузка и запись файла

int ftp_fget (int ftp_stream, int fp, string remote_file, int mode)

Загружает удаленный файл remote_file с сервера FTP и сберегает его содержимое в открытом файле, имеющем дескриптор fp. Режим передачи mode должен быть указан либо как FTP_ASCII, либо как FTP_ BINARY.

Возвращает TRUE либо FALSE — при ошибке.

 

ftp_put

Загрузка файла на сервер FTP

int ftp_put (int ftp_stream, string remote_file, string localjfile, int mode)

Сберегает файл local_file на сервере FTP под именем remote_file. Режим передачи mode должен быть указан либо как FTP_ASCII, либо как FTP_BINARY.

Возвращает TRUE либо FALSE — при ошибке.

Supload = ftp_put
($conn_id. "C:\\myfile.txt".
"/myfile.txt". FTP_ASCII);

ftp_fput

Чтение и загрузка файла на сервер

int ftp_fput (int ftp_stream, string remote_file, int fp, int mode)

Читает открытый файл (дескриптора fp) до сто конца и загружает его на сервер FTP под именем remote_fi!e. Режим передачи mode должен быть указан либо как FTP_ASCII, либо как FTP_BINARY.

Возвращает TRUE пли FALSE — при ошибке.

ftp_size

Определение размера файла

int ftp_size (int ftp_stream, string remotejfile)

Возвращает размер файла в байтах либо -1 — при ошибке. Не все серверы поддерживают эту возможность.

ftp_mdtm

Получение времени последней модификации файла

int ftpjndtm (int ftp_stream, string remote_file)

Возвращает время в формате «UNIX timcstamp» либо -1 — при ошибке.

Функция не работает с каталогами.

ftp_rename

Переименование файла на сервере

int ftp_rename (int ftp_stream, string from, string to)

Переименовывает файл from в to. Возвращает TRUE либо FALSE — при ошибке.

ftp_delete

Удаление файла на сервере

int ftpjJelete (int ftp_stream. string path) Возвращает TRUE либо FALSE — при ошибке.

flp_site

Выполнение команды SITE на сервере

int ftp_site (int ftp_stream, string cmd)

Посылает серверу команду cmd. Возвращает TRUE либо FALSE — при ошибке.

Так как команды SITE не стандартизированы, они могут различаться. Обычно они пригодны для изменения прав доступа к файлам и групповой принадлежности.

Сетевые функции

ip2long

Конвертация строки адреса IPv4 в число

int ip21ong (string ip_address)

Возвращает четырехбайтовое численное представление адреса IP v4 из строки (числа, поделенные точками, скажем: «127.0.0.1»).

$ip = gethostbyname("wvjw.php.net");
// получить IP адрес хоста echo
"Следующие URL эквивалентны:<bг>\n".
"http://www.php.net/. http://" Sip.
"/. и http://" .ip21ong($ip)."/<br>\n":

См. также Iong2ip().

Iong2ip

Конвертация числа в строку адреса IP v4

string Iong2ip (int proper_address)

Возвращает строковое представление IP-адреса (в формате: «ааа. bbb.ccc.ddd») из числового значения.

См. также ip2long().

gethostbyaddr

Получение имени хоста, соответствующего адресу IP string gethostbyaddr (string ip_address)

В аргументе указывается адрес IP в строковом формате. При ошибке возвращается ip_address. Заметьте: большинству IP-адресов в Интернете соответствует несколько имен (одно из них: localhost).

echo gethostbyaddr("127.001");

См. также gethostbyname().

gethostbyname

Получение IP-адреса хоста

string gethostbyname (string hostname)

print gethostbyname ("localhost");
// выведет: 127.0.0.1

См. также gethostbyaddr().

gethostbynamel

Получение списка IP-адресов, принадлежащих хосту

array gethostbynamel (string hostname)

Функция используется вместо gethostbynamez(), когда хост hostname имеет несколько сетевых интерфейсов с разными адресами.

См. также: gethostbyname(), gethostbyaddr(), checkdnsrr(), getmxrr() и раздел named справочной системы man.

getprotobyname

Определение номера порта, используемого протоколом1

int getprotobyname (string name)

В системах Unix соответствие портов и протоколов указывается в файле /etc/protocols.

См. также getprotobynumber().

getprotobynumber

Определение протокола порта

string getprotobynumber (int number)

См. также getprotobyname().

getservbyname

Определение порта Интернет-службы

Int getservbyname (string service, string protocol)

Возвращает номер порта, использующийся службой service. (В системах Uni\ это соответствие портов и служб указывается в файле /etc/services) В аргументе protocol указывается тип протокола — TCP либо UDP.

echo getservbyname ("HTTP"."TCP");
// может вывести- 80

См. также getservbyportt().

getservbyport

Определение Интернет-службы, использующей порт

string getservbyport (int port, string protocol)

В аргументе protocol указывается тип протокола — TCP либо UDP.

echo getservbyport(21."TCP"):
// обычно выводит ftp
echo getservbyport(23."TCP").
// обычно выводит: telnet

См. также getservbyname().

checkdnsrr

Проверка записи DNS

int checkdnsrr (string host [, string type])

Отправляет запрос DNS-сервсру для поиска записей, имеющихся для хоста host. Возвращает TRUE, если были найдены записи типа type, либо FALSE в отвратном случае, а также при ошибке.

Аргумент type может иметь одно из следующих значений: A, MX, NS, SO A, PTR, CNAME, ANY. По умолчанию (если аргумент не указан) его значение MX.

Аргумент host может указываться строкой IP-формата с разделением точками, либо быть именем хоста.

См. также: getmxrr(), gethostbyaddr(), gethostbyname(), gethostbynaroe() и раздел named справочной системы Unix man.

getmxrr

Получение MX записи для Интернет-хоста

int getmxrr (string hostname, array mxhosts [, array weight]) Инициирует поиск в БД DNS записи MX (почтовый сервер домена) для хоста hostname. Возвращает TRUE, если запись найдена; FALSE, если поиск прошел бесплодно.

Список записей MX заносится в массив mxhosts. Если указан массив weight, он заполняется дополнительной информацией о записях.

См. также: checkdnsrr(), gethostbyname(), gethostbynamel(), gethostbyaddr() и раздел named справочной системы Unix man.

Сетевая отладка PHP

debugger_off

Блокировка внутреннего отладчика РНР

int debugger_off(void):

Отладчик пока находится в стадии разработки (для РНР 4).

debugger_ on

Разрешение использования внутреннего отладчика РНР

int debugger_on (string address)

Подключает отладчик но адресу address (на удаленном сервере). Отладчик пока находится в стадии разработки, но он доступен для РНР версии 3.

define_ syslog_variab!es

Инициализация константы диспетчера системных событий

void define_syslogj/araibles (void)

Эти константы в грядущем используются функциями системных событий (syslog).

См. также: openlog(), syslog() и closelog().

openlog

Подключение к диспетчеру системных событий (system logger)

int openlog (string ident. int option, int facility)

Функция не обязательна для использования. Она механически (при необходимости) вызывается функцией syslog(), и в этом случае аргумент ident (по умолчанию) используется со значением FALSE. Строка ident будет добавляться к каждому отсылаемому сообщению. Обычно используется при необходимости явственной передачи аргументов option и facility.

Аргумент option используется для указания параметров при генерации системного события (log message). Могут использоваться следующие значения:

  • LOG_CONS — в случае ошибки при посылке сообщения оно выводится непосредственно в системную консоль;
  • LOG_NDEIAY — неотлагательно подключиться-к диспетчеру системных событий:
  • LOGJDDELAY — (по умолчанию) отложить подключение до посылки первого сообщения;
  • LOG_PERROR — также выводить сообщения в типовой поток ошибок;
  • LOG_PID — включать в сообщения идентификатор процесса (РШ).

Возможно одновременное указание нескольких значений при помощи битового оператора ЛИБО, скажем: LOG_CONS | LOG_NDELAY LOG_PID.

Аргумент facility указывает вид приложения, посылающего сообщение. Это влияет на их обработку системой;

  • LOG_AUTH — сообщения безопасности/авторизации (разумнее использовать LOG_AUTHPRIV на тех системах, где эта константа определена);
  • LOG_AUTHPRIV — персональные сообщения бсчогасности/авторнза-ции;
  • LOG_CRON — служба таймера (демоны сгоп и at);
  • LOGJDAEMON — другие системные службы (daemons);
  • LOGJCERN — сообщения ядра системы (kernel);
  • LOG_LOCALO ... LOG_LOCAL7 — зарезервировано для локального использования;
  • LOGJ.PR — подсистема линейного принтера;
  • LOG_MAIL — почтовая подсистема (mail);
  • LOG_NEWS — подсистема новостей USENET;
  • LOG_SYSLOG — нравственно генерируемые сообщения (демоном syslogd);
  • LOGJJSER — сообщения, порождаемые приложениями (user-level);
  • IOGJJUCP — подсистема UUCP.

См. также: define_syslog_variables(), syslog() и closelog().

closelog

Отключение от диспетчера системных событий

int closelog(void)

Использование функции необязательно.

См. также: define_syslog_variables(), syslog() и openlog().

syslog

Посылка системного сообщения

Int syslog (int priority, string message)

i В аргументе message укалывается содержание сообщения. Пары символов %т в этом сообщении заменяются на строку текущего сообщения об ошибке (strerror), представляющую значение еггпо. Аргу-/ мент priority является комбинацией уровня приложения и приоритета события. Его возможные значения (в порядке понижения приоритета):

  • LOG_EMERG — неработоспособность системы;
  • LOG_ALERT — необходимы срочные действия;
  • LOG_CRIT — скептическое состояние;
  • LOG_ERR — оплошность;
  • LOG_WARNING — предупреждение;
  • LOG_NOTICE — главное сообщение;
  • LOG_INFO — информационное сообщение;
  • LOG_DEBUG — сообщение отладки.

define_syslog_vcr ablest);
GpenlogC'mySrnpiog".
LOG_PID | LOG_PERROR. LOGJ.OCALO):
// ... if (!authorized_client())
{ // процедура авторизации
// неавторизирован! (сохранить сообщение об этом)
Sacress = date("Y/m/d H:i:s").
syslog(LOG_WARNING."Unauthorized client:
Saccess
$REMOTE_AODR ($HTTP_USER_AGENT)"): )
closelog():

В системной документации должно быть указано, как установить индивидуальный обработчик системных событий.

На системах Winch ws NT служба syslog эмулируется как Event Log.

См. также: define_syslog_variables(), openlog(), closelog().

Общий низкоуровневый сетевой интерфейс

fsockopen

Открытие сокета Интернета либо домена Unix

int fsockopen (string [udp://]hostname, int port [, int errno [, string errstr [, double timeout]]])

Инициирует поток подключения к Интернет (AF_INET, применяя TCP либо UDP) либо в домене Unix (AF_UNIX). Для доменов Интернет открывает сеанс подключения (TCP socket connection) с компьютером hostname через порт port. Значение hostname может быть либо полным доменным именем (FQDN), либо адресом IP. Для подключений UDP надобно видимо указывать протокол, скажем: «udp:// hostname». Для доменов Unix hostname может содержать путь к соке-ту, тогда значение port должно быть равно 0. Необязательным аргументом timeout позволено указать допустимый промежуток времени подключения в секундах.

Функция возвращает дескриптор файла, как при открытии локального файла, тот, что позже этого может использоваться в функциях файлового ввода/вывода: fgets(), fgetss(), fputs(), fclose() и feof().

При происхождении ошибки возвращает FALSE и устанавливает системные значения номера и сообщения причины ошибки в аргументы (они обязаны передаваться по ссылке) errno и errstr. Если возвращается FALSE, а аргумент errno равняется 0, то это обозначает, что оплошность случилась до вызова функции (возможная причина в инициализации сокета).

По умолчанию сеанс открывается в эксклюзивном (блокированном) режиме.

См. функцию socket_set_blocking().

$fp = fsockopen
("www.php.net". 80. &$errno. &$errstr. 30).
if (!$fp) {
echo "Serrstr ($errno)<br>\n". } else {

fputs ($fp. "GET / HTTP/1 0\r\n\r\n");
while (!feof($fp)) { echo fgets ($fp.l28).
fclose ($fp):

Последующий пример показывает получение даты и времени от UDP службы «daytime» (порт 13) на локальной машине.

$fp = fsockopen
("udp://127.0.0.1". 13. &$errno. Merrstr):
If (!$fp) {
echo "ERROR: Serrno - $errstr<br>\n", }
else { fwnte($fp,"\n");
echo fread($fp. 26):
fclose($fp): }

См. также: pfsockopen(), socket_set_blocking(), socket_set_timeout(), fgets(), fgetss(), fputs(), fclose() и feof().

pfsockopen

Открытие устойчивого подключения

j int pfsockopen (string hostname, int port [, int errno _jy [, string errstr [, int timeout]]])

Функция всецело подобна fsockopen() с той разницей, что подключение не закрывается по окончании сценария.

socket_get_status

Получение статуса подключения

array socket_get_status (resource socket_get_status)

Возвращает в массиве информацию об открытом подключении. В настоящее время возвращаются четыре элемента:

  • timed_out (bool) — длительность периода ожидания итога (тайм-аут);
  • blocked (bool) — заблокированность;
  • eof (bool) — получен ли символ EOF;
  • unread_bytes (int) — число байтов, оставшихся в буфере.

См. также: accept_connect(), bind(), connect(), listen(), strerror().

socket_set _timeout

Установка периода timeout для сокета

bool socket_set_timeout (int socket_descriptor, int seconds, int microseconds)

Устанавливает для подключения socket_descriptor длительность периода ожидания итога, это сумма аргументов seconds (секунды) и microseconds (микросекунды).

$fp = fsockopen("www.php net". 80).
if(!$fp) {
echo "Оплошность подключения \n":
} else { fputs($fp."GET /
HTTP/1 0\n\n"):
$start = time():
socket_set_t i meout($ fp. 2):
$res = fread($fp. 2000):
var_dump(socket_get_status($fp))
fclose($fp);
print $res: }

См. также: fsockopen() и fopen().

socket_set_blocking

Установка режима блокирования

int socket_set_blocking (int socket_descriptor, int mode)

Если в аргументе mode указывается значение FALSE, то обозначенный дескриптором socket_descriptor сокет переводится в неблокируемый режим. Отвратное происходит при TRUE. Это воздействует на вызовы функций чтения, подобные fgets(), которые исполняются незамедлительно в неблокированном режиме либо, наоборот, ожидают разблокировки (получения читаемых данных).

Низкоуровневый сетевой (сокет) интерфейс

Эта группа функций позволяет использовать низкоуровневый сетевой интерфейс и выступать как в качестве сервера, так и в качестве клиента. Для возможности их использования они обязаны быть разрешены при компиляции директивой --enable-sockets. Подразумевается, что вы имеете представление о том, как работает данный интерфейс на уровне системы.

Исключительно глобальный сетевой интерфейс предоставляют сокет-функции fsockopen() и pfsockopen() (их проще использовать в том случае, если вам не требуется создание сервера).

Пример 1. Простой TCP/IP сервер

Данный пример иллюстрирует реализацию простого сервера, отвечающего на запросы. Измените адрес и порт по вашему усмотрению. Подключиться к этому серверу позволено с подмогой сетевого клиента, скажем командой: telnet 192.168.1.53 10000 (параметры: ваш адрес и используемый порт). Все, что будет посылаться на сервер, будет на нем выводиться и возвращаться эхом клиенту. Для прекращения сеанса связи введите 'quit'.

<?php
error reporting (E_ALL);
/* Разрешает сценарию бесконечно
удерживать связь. */ setjnmejimit (0):
Saddress = '192.168.1 53';
/* установите свои значения
*/ Sport = 10000:
if (($sock = socket
(AFJNET. SOCK_STREAM. 0)) < 0)
{ echo " Оплошность в socketO: "
. strerror (Ssock) . "\n": }
if (($ret = bind (Ssock. Saddress. Sport))
< 0) { echo "Оплошность в bind()
. " strerror ($ret) "\n"; )
if ((Sret = listen (Ssock. 5)) < 0)
{ echo "Оплошность в listen(): "
. strerror (Sret) . "\n"; }
do ( if ((Smsgsock = accept_connect
($sock)) < 0) { echo
"Оплошность в accept_connect().
". strerror (Smsgsock)."\n" break;
} do { $buf = " ;
Sret = read (Smsgsock. Sbuf. 2048):
if (Sret < 0) {
echo "Оплошность в read(): " strerror (Sret) .
"\n": break 2; }
if (Sret == 0) { break 2. }
Sbuf = trim (Sbuf):
if ($buf == 'quit') {
close (Smsgsock);
break 2: } Stalkback = "Вы ввели
'Sbuf'.W: write (Smsgsock. Stalkback,
strlen (Stalkback)); echo "Sbuf\n": }
while (TRUE): close (Smsgsock). }
while (TRUE). close (Ssock); ?>

Пример 2. Легкой TCP/IP клиент

Данный сценарий получает страницу через HTTP, отправляет запрос HEAD, выводит итог и завершается.

<?php
error_reporting (E_ALL);
echo "<h2>TCP/IP Connection</h2>\n";
/* Получить порт службы WWW
(обычно: 80). */ $service__port =
getservbyrame ('www'. 'tcp'):
'* Попучить IP адрес хоста */
Saddress = gethostbyname
Cwww.php.net'):
/* Сделать TCP/IP socket. */
Ssocket - socket (AFJNET. SOCK_SlRtAM. 0):
if (Ssocket < 0) {
echo "Оплошность в socketO:
" strerror (Ssocket) . "\n": }
else { "socket сделан " strerror (Ssocket) .
"\n", }
echo "Попытка подключиться
к '$address' (порт 'Sservice_port')
..."; Sresult = connect
(Ssocket. Saddress. $servKe_port);
if (Sresjit 0) { echo "Оплошность в
connect;): ($result) " strerror(Sresult)
."\n"; } else { echo "OK \r". }
$111 = "HFAD / HTTP/1.0\r\rur\n";
// посылаемые данные $out = '':
// буфер для приема данных
echo "Sending HTTP HEAD request...":
// послать запрос заголовка HTTP
write (Ssocket. $in, strlen ($in)). echo "GKAn":
echo "Reading response:\n\n":

// принять ОТВEТ (заголовок) while
(read (Ssocket. Sout. 2048))
{ echo Sout: } echo "closing
socket..."; close (Ssocket):
echo "OK.\n\n": ?>

socket

Создание сокета

int socket (int domain, int type, int protocol)

Сделает финальную точку сетевой коммуникации (сокет) и возвращает его дескриптор. При ошибке возвращает отрицательное значение кода ошибки, которое позже этого может быть передано в функцию strerror() для получения текстового объяснения причины ошибки.

Аргументом domain указывается тин сети, в которой создастся сокет; %. допустимые значения: AF JNET и AF_UNIX.

Аргумент type указывает тип создаваемого сокета; он может быть одним из следующих: SOCK_STREAM, SOCKJDGRAM, SOCKJEQPACKET, SOCK_RAW, SOCK RDM либо SOCK PACKET.

Аргумент protocol определяет используемый протокол передачи данных.

Огромнее подробная информация содержится в системной документации.

См. также: accept_connect(), bind(), connect(), listen(), strerror() и socket_get_status().

close

Закрытие сокета

bool close (int socket)

Закрывает сокет, указанный дескриптором, и возвращает TRUE либо FALSE (при ошибке либо при недопустимом дескрипторе).

Заметьте: функция не может использоваться с файловыми дескрипторами РНР, сделанными fopen(), popen(), fsockopen(), psockopen(); она работает только с теми, которые сделаны функциями socket() либо accept_connect().

См. также: bind(), listen(), socket(), socket_get_status() и strerror().

connect

Подключение к сокету

int connect (int socket, string address [, int port])

Инициирует подключение, применяя дескриптор socket (тот, что должен быть ранее успешно сделан функцией socket()). Возвращает О либо, при ошибке, отрицательное значение кода ошибки, которое позже этого может быть передано в функцию strerror() для получения текстового объяснения причины ошибки.

Аргумент address должен содержать либо адрес IP, в формате с разделением точками (скажем: 127.0.0.1), если socket принадлежит семейству AF_INET; либо строку пути к соксту в домене Unix, если он из семейства AFJJNIX.

Аргумент port используется только для AF_INET сокет и определяет порт удаленной машины, к которому производится подключение.

См. также: bind(), listen(), socket(), socket_get_status() и strerror().

bind

Привязка сокета к адресу

int bind (int socket, string address [. int port])

Назначает socket (тот, что должен быть ранее удачно сделан функ-дней socket()) IP-адресу address. Возвращает 0 либо, при ошибке, от-рнцатсльное значение кода ошибки, которое позже этого может быть передано в функцию strerror() для получения текстового объяснения причины ошибки.

Аргумент должен содержать либо адрес IP, в формате с разделением точками (скажем: 127.0.0.1), если сокет принадлежит семейству AF_INET; либо строку пути к,сокету и домене Unix, если он из семейства AFJJNIX.

Аргумент port используется только для AF_INET сокет и определяет порт удаленной машины, к которому производится подключение.

Заметьте: для подключения (в качестве клиента) используется функция connect(), эта же функция разрешает выступать в роли сервера (для этого дополнительно используются функции accept_connect() и listen()).

См. также: accept_connect(), connect(), listen(), socket(), socket_get_ status() и strerror().

listen

Разрешение приема данных из сокета

int listen (int socket, int backlog)

Позднее того как функцией socket() сделан сокет и он назначен адресу (его порту) функцией bind(), эта функция разрешает системе ожидать получения внешних данных и перенаправлять их в socket. Аргумент backlog указывает максимальное число входящих и воспринимаемых подключений.

Функция применима только к типам сокетов: SOCK_STREAM либо SOCK SEQPACKET.

Возвращает 0 либо, при ошибке, отрицательное значение кода ошибки, которое позже этого может быть передано в функцию strerror() для получения текстового объяснения причины ошибки.

См. также: accept_connect(), bind(), connect(), socket(), socket_get_status() и strerror().

accept_ connect

Прием данных от сокета

int accept connect (int socket)

Позднее того как функцией socket() сделан сокет, и он был назначен адресу (его порту) функцией bind(), и функцией listen() было разрешено принимать входящие подключения; эта функция указывает системе принимать внешние данные из socket.

Возвращает новый сокет-дескриптдр либо, при ошибке, отрицательное значение кода ошибки, которое позже этого может быть передано в функцию strerror() для получения текстового объяснения причины ошибки. Возвращаемый дескриптор используется исключительно для обмена данными с клиентами подключений. Исходный дескриптор тем не менее остается действительным и может использоваться.

При происхождении нескольких входящих подключений используется первое; при их отсутствии функция будет ожидать их происхождения. Если socket был разблокирован функцией socket_set_blocking() (либо set_ nonblockO), при отсутствии входящих данных функция завершается с соответствующим кодом ошибки.

См. также: bind(), connect(), listen(), socket(), socket_get_status() и strerror().

read

Получение данных от сокета

int read (int socket_des, string Sbuffer, int length)

Функция читает данные из socketjies (сокет-дсскриптор, «воссозданный» функцией accept_connect()) в буфер Sbuffer, в объеме байтов, указанном length. Чтение завершается ранее, если встречается символ <<\n», <<\t» либо «\0». Возвращает число прочитанных байтов.

См. также: accept_connect(), bind(), connect(), listen(), strerror(), socket_get status() и write().

write

Запись данных в сокет

int write (int socket_des, string Sbuffer, int length)

Записывает в сокет socketjjes содержимое буфера Sbuffer в объеме length байтов.

См. также: accept_connect(), bind(), connect(), listen(), read(), strerror() и socket_get_status().

strerror

Получение изложения ошибки сокета

string strerror (int errno)

Принимаемый аргумент errno является значением, возвращаемым одной из сокет-функций. Возвращается строка текста, объясняющая код ошибки. Это делает огромнее удобным разбор причин неработоспособности.

<?php
if (($socket = socket (AFJNET,
SOCK_STREAM. 0)) < 0) {
echo "Причина ошибки в socket():
" . strerror (Ssocket) . "\n": }
if (($ret = bind ($socket. '127.0.0.1'. 80)) < 0)
{ echo "Причина ошибки в bind():
" . strerror ($ret) . "\n": } ?>

Если указанный сценарий будет исполняться не с административными привилегиями (root), то скорее всякого он выведет: «Причина ошибки в bind(): Permission denied».

См. также: accept_connect(), bind(), connect(), listen(), socket() и socket_ get_status().

Библиотека CURL (Client URL Library)

PHP поддерживает библиотеку libcurl, сделанную Даниелем Стенбер-гом (Daniel Stenberg), которая позволяет осуществлять подключение и взаимодействие с разными типами серверов, применяя различные протоколы. В настоящее время libcurl поддерживает протоколы: http, https, ftp, gopher, telnet, diet, file, Idap. Также библиотека поддерживает сертификаты HTTPS, методы HTTP POST и PUT, загрузку с FTP и HTTP, прокси, cookies и аутентификацию пользователя с паролем.

Для того чтобы использовать функции CURL, необходимо установить пакет (package) CURL (его позволено загрузить с http://curl.haxx.se/). РНР необходима версия CURL 7.0.2-beta либо выше. Позже этого нужно перекомпилировать РНР с параметром — with-curl[=DIR], где DIR указывает на месторасположение каталога, содержащего каталоги lib и include. В каталоге include должна находиться папка curl, содержащая файлы easy.h n curl.h, а в каталоге lib должен находиться файл libcurl.a.

Схема использования функций проста: сначала инициализируется сессия CURL, применяя функцию cur'MnitO, при этом устанавливаются параметры передачи, с которыми она будет выполнена функцией curl_exec(); позднее чего сессия может быть завершена с помощью curl_ close(). Дальше приводится пример, возвращающий домашнюю страницу РНР и сберегающий ее в файле.

<?php
$ch = curl_imt ("http://www.php.net/"):
$fp = fopen ("php_homepage.txt". "w"):
curl_setopt ($ch. CURLOPTJILE. $fp):
curl_setopt ($ch. CURLOPT_HEADER. 0).
curl_exec ($ch): curl_close ($ch):
fclose ($fp;. ?>

curl_ init

Открытие сеанса CURL

int cur!_init ([string url])

Инициализирует новую сессию и возвращает дескриптор CURL, дальше используемый функциями curl_setopt(), curl_exec() и curl_close(). В функции позволено указать добровольный аргумент url, в грядущем используемый как параметр CURLOPT_URL, тот, что также позволено установить функцией curl_setopt().

<?php
$ch = curljmt()
cjrl_setopt
($ch. CURLOPT_URL. "http://www.zend.com/"):
curl_setopt ($ch. CURLOPTJHEADER. 0):
curl_exec ($ch). curl_close ($ch);?>

См. также: curl_close(), curl_setopt().

curl_setopt

Установка параметров передачи CURL

boo! curl_setopt (int ch, string option, mixed value)

Функция устанавливает параметр, имеющий имя option сессии CURL с именем ch, в значение value.

Для следующих возможных значений аргумента option соответствующее значение value должно указываться в виде целого числа (тип long):

  • CURLOPT_INFILESIZE: установить ожидаемый размер получаемого файла при его загрузке на удаленный сервер;
  • CURLOPTJ/ERBOSE: при ненулевом значении будет сообщаться все, что происходит в ходе сессии;
  • CURLOPT_HEADER: при ненулевом значении заголовок будет включаться в содержимое результата;
  • CURLOPT_NOPROGRESS: при ненулевом значении блокирует отображение индикатора хода выполнения (progress meter) операций передачи (CURL transfers). (По умолчанию данный параметр установлен, и его следует изменять только в целях отладки);
  • CURLOPT_NOBODY: при ненулевом значении содержимое «BODY» не будет включаться в результат;
  • CURLOPT_FAILONERROR: при ненулевом значении будет происходить безмолвное завершение сценария РНР, в случае получения кода возврата HTTP со значением, большим чем 300. По умолчанию же происходит нормальный возврат в сценарий, с игнорированием кода, вызвавшего ошибку;
  • CURLOPTJJPLOAD: при ненулевом значении подготавливает РНР для загрузки;
  • CURLOPT_POST: при ненулевом значении указывает РНР выполнить обычный метод HTTP POST. Тип POST будет иметь классический для HTML-форм вид application/x-www-from-urlencoded;
  • CURLOPT_FTPLISTONLY: при ненулевом значении РНР будет выводить только имена файлов в FTP;
  • CURLOPT_FTPAPPEND: при ненулевом значении РНР будет осуществлять добавление в конец присутствующего удаленного FTP-файла вместо его перезаписи;
  • CURLOPT_NETRC: при ненулевом значении РНР будет просматривать ваш файл -./netrc в поисках вашего имени пользователя (username) и пароля (password) для осуществления доступа к удаленному сайту;
  • CURLOPT_FOLLOWLOCATION: при ненулевом значении перемещается согласно получаемым переадресациям, указанным в HTTP заголовках "Location: " (так как это будет происходить рекурсивно, рсдирект будет выполняться столько раз, сколько будет получено заголовков "Location: ");
  • CURLOPT_PUT: при ненулевом значении отсылает файл методом HTTP PUT. Параметры файла CURLOPTJNFILE и CURLOPTJNFILESIZE также обязаны быть указаны;
  • CURLOPT_MUTE: при ненулевом значении РНР будет исполнять функции CURL не выдавая сообщений;
  • CURLOPT_TIMEOUT: передает целочисленный (long) параметр, определяющий максимально допустимое время исполнения функций CURL в секундах;
  • CURLOPT_LOW_SPEED_LIMIT: передает целочисленный (long) параметр, определяющий скорость передачи данных в байтах в секунду, которая будет использоваться для проверки того, стоит ли прервать выполнение сеанса передачи при превышении им максимально потенциального времени CURLOPT_LOW_SPEED_TIME;
  • CURLOPT_LOW_SPEED_TIME: передает целочисленный (long) параметр, определяющий максимальное время передачи данных в секундах при скорости CURLOPT_LOW_SPEED_LIMIT, при превышении которого РНР будет прерывать выполнение операции, рассматривая ее как недопустимо неспешную;
  • CURLOPT_RESUME_FROM: передает целочисленный (long) параметр, определяющий смещение в байтах, от которого должна начинаться передача;
  • CURLOPT_SSLVERSION: передает целочисленный параметр, определяющий используемую версию SSL (2 либо 3). По умолчанию РНР будет пытаться само­стоятельно определить ее, правда в некоторых случаях ее следует устанавливать вручную;
  • CURLOPT_TIMECONDITION: передает константный параметр, определяющий толк параметра CURLOPT_TIMEVALUE. Возможные значения: TIMECONDJFMODSINCE (но умолчанию) либо TIMECONDJSUNMODSINCE. Это применимо только к HTTP; ,
  • CURLOPT_TIMEVALUE: передает целочисленный (long) параметр, содержащий значение времени в формате «Unix-timestamp» (число секунд с 1 января, 1970). Использование этого значения зависит от установки CURLOPTJTIMEVALUE.

Для следующих возможных значений аргумента option соответствующее значение value должно указываться в строковых значениях (тип string):

  • CURLOPTJJRL: адрес URL, к которому отправляется запрос. Данный параметр также позволено установить при вызове функции cur1_init();
  • CURLOPTJJSERPWD: передает строку в формате «[username]: [password]* при подключении;
  • CURLOPT_PROXYUSERPWD: при подключении к HTTP прокси передает строку в формате «[username] : [password]»;
  • CURLOPT RANGE: передаст диапазон в формате «X-Y», где значение X либо Y может быть не указано. При HTTP-передаче возможна одновременная передача нескольких интервалов, поделенных за-пятыми: «X-Y.N-M»;
  • CURLOPT_POSTFIELDS: передает полную строку данных, посылаемых методом HTTP POST;
  • CURLOPT_REFERER: передает строку, содержащую заголовок "referer", используемый в запросах HTTP;
  • CURLOPTJJSERAGENT: передает строку, содержащую заголовок "user-agent", используемый в запросах HTTP:
  • CURLOPT_FTPPORT: передает строку, содержащую значение IP-адреса, используемого инструкцией ftp "POST" для подключения к удаленному серверу FTP Эта строка может содержать простой IP-адрес, имя хоста либо имя сетевого интерфейса (под UNIX), и даже символ '-', указывающий системный адрес IP, используемый по умолчанию;
  • CURLOPT_COOKIE: передает строку с содержимым cookie, тот, что будет отправлен в заголовке HTTP;
  • CURLOPT_SSLCERT: передает строку с именем файла, содержащего SSL сертификат формата РЕМ;
  • CURLOPT SSLCERTPASSWD: передает строку с содержимым пароля, надобным для использования сертификата, указанного параметром CURLOPT_SSLCERT;
  • CURLOPT_COOKIEFILE: передает строку с именем файла, содержащего данные cookie. Данный файл должен быть в формате Netscape либо виде простого текста заголовков HTTP, сохраненного в файле;
  • CURLOPT _CUSTOMREQUEST: передает строку, которая будет использоваться вместо HTTP-запроса GET либо HEAD. Это имеет толк при выполнении устаревшего запроса HTTP, скажем DELETE.

Не пытайтесь осуществить это, не выяснив заранее, поддерживает ли сервер указанную команду.

Для следующих возможных значений аргумента option соответствующее значение value должно указываться дескриптором, полученным от функции fopen():

  • CURLOPT_FILE: файл, в котором следует сберегать полученные данные. По умолчанию типовой поток вывода: stdout;
  • CURLOPT_INFILE: файл, из которого следует получать данные для передачи;
  • CURLOPT_WRITEHEADER: файл для записи содержимого заголовков;
  • CURLOPT_STDERR: файл для сохранения результатов ошибок, вместо stderr.

curl_exec

Выполнение CURL сессии

bool curt_exec (int ch)

Исполняет подготовленную сессию. Эта функция должна вызываться позднее инициализации сессии CURL session и позднее того, как все параметры сессии будут установлены.

curl_ close

Закрытие сеанса

void curl_close (int ch)

Закрытие сессии с освобождением всех источников (также удаляется и дескриптор сессии CURL ch).

curl_ version

Получение версии

string curl_version (void):

Возвращает текущую версию CURL.

Отправка почты

mail

Отправление почтового сообщения

bool mail (string to, string subject, string message [. string additional_headers])

Механически отсылает сообщение электронной почты (применяя системную функцию) с «темой» subject и содержимым message адресату to. Для указания нескольких адресатов в строке to разделяйте их запятой.

. "Моя тема". "Здорово \пмне \nот пеня"),

При указании четвертого строкового аргумента эта строка будет добавляться в конец заголовка, указывая дополнительные заголовки (если их несколько, их следует разделять символом перехода на новую строку «\n»).

mail("nobodyPaol com",
"the subject". Smessage,
"From: webmaster0SSERVER_NAME\n" .
"Reply-To webmaste
r@SSERVER_NAME\nX-Mailer PHP/"
.phpversion()):

Достаточно просто конструировать комплексные сообщения.

/* получатели */
Srecipient = "Магу
<mary@urnvpr edu>" . ". " :
// заметьте запятую
Srecipient .= "adminPphp.net"
/* тема сообщения */
Ssubject = "Здорово Всякому! С
праздничком.". /* само
сообщение */ Imessage .=
"The following email includes a
formatted ASCII table\n".
Smessage = "Day \t\tMonth \t\tYear\n";
Smessage .= "3rd \t\tAug \t\tl970\n";
Smessage = "17rd\t\tAug \t\U973\n".
/* позволено добавить подпись
(signature41 */
Smessage .= "--\r\n":
Smessage . =
"* Aienr почтовой рассылки *",
/* Дополнительные заголовки */
Sheaders .-- "From: Birthday Reminde
r <birthday@php.net>\n"; Sheaders =
"X-Sender- <birthday(?php.net>\n".
Sheaders .= "X-Mailer: PHP\n";
// Почтовый агент Sheaders .
= "X-Pnonty. l\n".
// Срочное сообщение! Sheaders .
= "Return-Path: <birthday@php.net>\n":
// Путь для возвращения сообщений
об ошибках
/* Если надобно послать ней
в виде текста html mail.
раскомментируйте следующую строку
(указывающую тип Mime ) */
// Sheaders .= "Content-Type,
text/html; charset=iso-8859-l\n":
Sheaders .- "cc:birthdayarchive
@php.net\n"; // CC to Sheaders
= "bcc:birthd.aycheck@php.
net, birthdaygifts(3php.net\n";
// BCCs to /* and nou maiI it */
maiKJrec'Dient. Ssubject,
Jmessage. Jheaders);

ezmlm_ hash

Вычисление хеша EZMLM

int ezralra_hash (string addr)

Вычисляет хеш, надобный для сохранения списков рассылки в базе данных MySQL.

$usег = "knsPkoehntopp de";
$ hash = ezm)m_hash '($user):
$query - sprmtf ("INSERT INTO
sample VALUFS (*s. '2s')", Shash. 5user);
$db->query($query), '/ используем
интерфейс PHPLIB db

IMAP, РОРЗ и NNTP

Для того чтобы использовать следующие функции, надобно перекомпилировать РНР с параметром --with-imap (для этого клиентские библиотеки С обязаны быть установлены). Последнюю версию для компиляции позволено загрузить с ftp://ttp.cac.washington.edu/imap/. Позволено также подключить модуль динамически.

Несмотря на имя модуля, имеющиеся в нем функции разрешают исполнять также много других пригодных операций, выходящих за рамки простого использования протокола IMAP. Лежащая в основе библиотека С-клиента также поддерживает NNTP, РОРЗ и методы доступа к локальным почтовым ящикам.

Чтобы разобраться в том, что разрешают делать функции, полезно ознакомиться (. перечисленными ниже документами RFC.

  • RFC821: Simple Mail Transfer Protocol (SMTP).
  • RFC822: Стандарт текстовых сообщений Интернет ARPA.
  • RFC2060: Internet Message Access Protocol (IMAP) Version 4 revl.
  • RFC1939: Post Office Protocol Vei.sion 3 (РОРЗ).
  • RFC977: Network News Transfer Protocol (NNTP).
  • RFC2076: Common Internet Message Headers.
  • RFC2045, RFC2046, RFC2047, RFC2048 и RFC2049: Multipurpose Internet Mail Extensions (MIME).

Детальное рассмотрение функционирования систем работы с электронной почтой позволено найти в книгах: «Programming Internet Email» (David Wood) и «Managing IMAP» (Dianna Mullet и Kevin Mullet).

Дальше под ящиками подразумеваются как папки верхнего уровня, так и вложенные.

imap_open

Подключение к серверу (открытие почтового ящика)

int imap_open (string mailbox, string username, string password [, int flags])

Возвращает дескриптор открытого почтового ящика IMAP (дескриптор подключения к серверу IMAP) либо значение FALSE при ошибке. Эту функцию позволено также использовать для подключения к серверам РОРЗ и NNTP, но некоторые функции будут недоступны.

В аргументе mailbox указывается имя сервера и путь к почтовому ящику. Имя сервера заключается в фигурные скобки «{» и «}», и состоит из: имени сервера (либо его IP-адреса), возможного указания протокола (начинающегося со слеша '/') и необязательного значения номера порта подключения (начинающегося с двоеточия «:»). Имя сервера необходимо указывать непоколебимо; бывает пригодно указывать имя сервера в переменной, но следует рассматривать, что фигурные скобки имеют специальное значение для переменных в строках в двойных кавычках, следовательно открывающую скобку следует предварять слешем, скажем: "\{$SERVER/pop3:110}INBOX".

Специальное значение — имя INBOX, обозначающее стержневой ящик пользователя (папка Входящие). Если имя ящика включает какие-либо символы помимо английских печатных ASCII, то их нужно закодировать функцией imap_utf7_encode(). Разделителем иерархии почтовых ящиков обычно является слеш, но для некоторых серверов им также может быть точка, скажем: «INBOX. Current. Important. Work».

Аргументами username и password указываются имя и пароль пользователя.

В аргументе flags указываются параметры открытия в виде битовой маски):

  • OP_READONLY — открыть только для чтения;
  • OP_ANONYMOUS — не использовать (обновлять) разделы новостей .newsrc (только для NNTP);
  • OP_HALFOPEN — для IMAP- и NNTP-имен: только подключение без открытия ящика;
  • CL_EXPUNGE — механически удалить ящик при его закрытии.

(См. также: imap_delete() и imap_expunge()).

Для подключения к серверу ШАР, использующему порт 143 на локальной машине, используйте:

$mbox = imap_open ("{localhost:143}INBOX".
"user_id". "password");

Для подключения к серверу РОРЗ, использующему порт 110 на локальной машине, используйте:

$mbox = imap_open
("{localhost/pop3:110}INBOX". "user_id".
"password").

Для подключения к серверу NNTP, использующему порт 119 на локальной машине, используйте:

$nntp = imap_open ("{localhost/nntp:119}
comp test". "". "");

Последующий пример показывает подключение к серверу ШАР «your.imap.host» и вывод имеющихся ящиков и сообщений для пользователя «username».

$mbox = imap_open ("{your imap.host:143}",
"username". "password").
echo "<р><h1>Ящики Mailboxes</hl>\n".
Sfolders = imap_ilstmailbox (Smbox.
"{your.imap.host:143}". "*"):
if (Sfolders == FALSE) echo
"Оплошность- ящиков не обнаружено
<br>\n": else while (list ($key. Sval)
= each (Sfolders)) echo "\t Sval <br>\n".
echo "<р><h1>Сообщения в INBOX</hl>\n"
. Sheaders = imapjieaders (Smbox);
if (Sheaders == FALSE) { echo
"Оплошность - сообщений нет <br>\n";
} else while (list (Skey.Sval) =
each (Sheaders)) echo "\t Sval <br>\n";
imap_close(Smbox):

В общем случае должно быть выведено нечто как бы последующего:

Ящики Mailboxes
{localhost:143} l innn/i gf<br>
{loca lhost;143} linnn<br>
{local host:143}INBOX<br>
Сообщения в INBOX
ШЗ-Мау-2001 Имя Отправителя
Заголовок (1621 chars)<br>

imap_reopen

Переподключение (выбор другого ящика)

int imap_reopen (int imap_stream, string mailbox [, string flags])

Функция подобна imap_open() с тем отличием, что она не создает новый дескриптор подключения, а использует уже присутствующий imap_ stream (имя пользователя и его пароль не изменяются). Аргументы mailbox и flags аналогичны.

Возвращает TRUE либо FALSE — при ошибке.

imap_close

Отключение от сервера

int imap_close (int imap_stream [, int flags])

Функция закрывает поток подключения, связанный с дескриптором imap_stream. Если в аргументе flags указывается значение CL_EXPUNGE, то при закрытии ящика из него механически удаляются все сообщения, помеченные к удалению.

imap_ping

Проверка активности подключения

int imap_ping (int imap_stream)

Возвращает TRUE, если подключение вправду, либо FALSE, если оно разорвано.

Вызов функции может использоваться для обнаружения свежих сообщений и для поддержания активности связи с серверами, разрывающими связь через определенный промежуток времени бездействия соединения. Но так как время исполнения сценария ограниченно (обычно полминуты), а время обрыва связи наступает через касательно длинный период (нередко 30 минут), то едва ли эта функция будет пригодна в web-сценариях.

imap_listmailbox

Получение списка почтовых ящиков

array imapjistmailbox (int imap_stream, string ref, string pattern)

Возвращает массив имен почтовых ящиков. Изложение аргументов см. в imap_getmailboxes().

$mbox = imap_open("{your imap host}".
"username"."password",OP_HALFOPEN)
dieC'can't connect- ".tmap_last_error()):
Slist " imap_listmailbox($mbox,
"{your.imap host}"."*"):
ifOs_array($list)) { reset ($"hst):
while (list($key. $val) = each(Slist))
print imap_utf7_decode($val).
"<br>\n". } else
print "imap_listmailbox failed "
imap_last_error(). "\n".
imap_close($mbox):

imap_getmailboxes

Получение изложения почтовых ящиков

array imap_getmail boxes (int imap_stream, string ref, string pattern)

Возвращает массив объектов, содержащих изложения каждого ящика. Каждый объект имеет 3 знака: полное имя ящика папе, символ-разграничитель иерархии ящиков delimiter и битовое поле attributes, которое может состоять из следующих компонентов:

  • LATT_NOINFERIORS (1) — ящик не имеет вложенных;
  • LATT_NOSELECT (2) — ото контейнер (а не ящик) и его немыслимо открыть;
  • LATT_MARKED (4) — ящик маркирован. Используется только с UW-IMAPD;
  • LATTJJNMARKED (8) — ящик маркирован. Используется только с UW-IMAPD.

Имена ящиков могут содержать символы национальных алфавитов (из комплекта ASCII), которые могут быть закодированы и позже этого декодированы функцией imap_utf7jJecode().

Аргумент ref должен содержать обычную спецификацию сервера (его адреса), как в функции imap_open(), а аргумент pattern — указывать, с какого ящика начинать и пример для возвращаемых ящиков.

В аргументе pattern могут быть указаны два специальных значения: «*» обозначает, что следует возвращать всю иерархию ящиков, а <<%>> -только текущий иерархический уровень (без вложенных ящиков).

$mbox = imap_open("{your шар.host}",
"user-name", "password".OP_HALFOPEN)
|| dieC'can't connect: ".imap_last_error()).
$list = imap_getmailboxes($mbox.
"{your.imap.host}"."*"):
ifds_array($list))
{ pnnt_r (Slist): } else
print "imap_getmailboxes failed
".imap_last_error()."\n":
imap_close($mbox).

См. также imap_getsubscribed().

imap_createmailbox

Создание почтового ящика

int imap_createmailbox (int imap_stream, string mbox)

Имя создаваемого ящика указывается в аргументе mbox. Имена, содержащие национальные символы, обязаны кодироваться функцией imap_utf() encode().

Возвращает TRUE либо FALSE — при ошибке.

См гакжс: imapj-enamemailbox(), imap_deletemanbox() и imapj>pen().

$mbox = imap_openf"(your imap.host}"
."username"."password",OP_HALFOPEN)
|| chet"can't connect. "
.imap_last_error()).
$namei = "newhox:
$name2 = imap_utf7_encode
("MOй личный ящик");
if(&imap_createmai1box(Smbox.
1map_utt7_encode("{your.imap.host}
INBOX/$namer))) { Sstatus =
@imap_status($mbox."{your.imap
host}:NBOX/$naoiel".SA_ALL);
if($btat'js) { echo "Статус нового
ящика 'Snamel': <br\n".
"Messages: ". $status->messages
."<br>\n". "Recent: ". $status->
recent "<br-\n". "Unseen:
". $status->unseen "<br>\n".
"UIDnext ". $status->uidne/.t .
"<Dr>»n". "UIDvalnaity ".
Sstatus->uldval1d1ty.".<br>\n"; if
(imap_renamemailbox($mbox "{your,
irnao host)INBOX/Snamel".
"{your.-imap host}lNBOX/$name2'l)
{ echo "Ящик Sramel' переименован
в '$raine2'<br>\n": } else {
print "imap_renamemailbox failed:
" imap_last_error() "<br>\n": i
} else { pnnt "i:nap_s"'atus tailed.
" inap_labt_error() "<br>'n"-}
if(?imap_deletemailbox(Smbox.
"{your imap.host}INBOX/$naire2")i
{ print "new mailbox removed <br>\n":
} else { print "lmap_deletemailbox
failed: ". implode("<br>\n".
lroap_errors()3 "<br>\n", i }
ebe { print "could not
create new mailbox- ".
implodeC"<br>\n".imap_errors()).
"<br>\n":
imap_clcse($iTibox);

imap_ renamemailbox

Переименование ящика

int imap_renamemailbox (int imap_stream, string oldjnbox, string new_rabox)

Имя ящика задается аргументом oldjnbox, а его новое имя — new_ mbox Формат этих аргументов см. в изложении функции imap_open(). Пример использования см. в функции imap_createmailbox().

Возвращает TRUE либо FALSE — при ошибке.

См. также: imap_createmailbox(), imap_deletemailbox(), imap_open().

imap_ deletemaiibox

Удаление почтового ящика

int imap_deletemailbox (int imap_stream, string mbox)

Имя ящика задается аргументом mbox, его формат см. в изложении функции imap_open(). Пример использования см. в функции imap_ createmailbox().

Возвращает TRUE либо FALSE — при ошибке.

См. также: imap_createmai1box(), imap_renamemailbox() и imap_open().

imap_ check

Проверка текущего ящика

object imap_check (int imap_stream)

Возвращает объект, содержащий информацию о текущем почтовом ящике, либо FALSE при ошибке. В объекте имеются следующие свойства:

  • Date — время последней модификации содержимого ящика (доступа);
  • Driver — протокол доступа к ящику: POPS, IMAP, NNTP;
  • Mailbox — полное имя почтового ящика;
  • Nmsgs — число сообщений в ящике;
  • Recent — число новых сообщений в ящике.

$mbox - imap_open('{localhost}°."igor"."lgx324879".
OP_HALFOPEN) || dle("can't connect:
".imap_last_error()):
pnnt_r(imap_check ($mbox));
imap_close($mbo/).

Выводит что-то подобное последующему:

$tdClass Object
[Date] => Sun. 13 May 2008
14-31:38 +0400 (Московское время
(лето))
[Driver] -> imap
[Mailbox] => {igor 143/imap/user="igor"}
<no_mailbox>
[Nmsgs] => 0
[Recent] 0

imap_status

Получение статуса указанного ящика

object imap_status (int imap_stream, string mailbox, int options)

Возвращает объект, содержащий информацию о почтовом ящике с именем mailbox, пли FALSE при ошибке. В объекте возвращаются свойства, в зависимости от указанного значения аргумента options:

  • SA_MESSAGES — возвратить в status ->messages общее число сообщений в ящике;
  • SA_RECENT — возвратить в status->recent число новых сообщений;
  • SAJJNSEEN — возвратить в status->unseen число непрочитанных сообщений;
  • SAJJIDNEXT — возвратить в status->uidnext номер uid для последующего нового сообщения;
  • SAJJIDVALIDITY - возвратить в status->uidvalidity константу действительности uid ящика;
  • SA_ALL — возвратить все вышеперечисленное.

Объект также содержит качество status-^flags, отражающее (в объединенном битовом поле), с какими параметрами он сделан.

$mbox = шар_ореп("{your.imap host}".
"ucename"."password".OP HALFOPEN)
|| dieC'can't connect: " nmap_last_error!));
$status = imap_status(Smbox."{your
imap host}INBOX".SA_ALL).
if($status) { print_r($status); }
else print "imap_status failed "
imap_lasterror()."\n":
imap_clcse($mbox)

imap_ mailboxmsginfo

Получение информации о текущем ящике

object imapjnailboxmsginfo (int imap_stream)

функция сходна с imap_status(), но дополнительно она вычисляет 0С,-рем всех сообщений, находящихся в ящике. Свойства возвращаемого объекта:

  • Date — время последней модификации;
  • Driver — драйвер (протокол доступа);
  • Mailbox — имя почтового ящика;
  • Nmsgs — число сообщений;
  • Recent — число новых полученных сообщений;
  • Unread — число непрочитанных сообщений;
  • Deleted — число удаленных сообщений;
  • Size — размер почтового ящика.

<?рhp
$mbox = imap_open
("{your imap.host}INBOX".
"user-name",
"password") || diet"can't connect:
".imap_last_error()):
rebeck = imapinallboxmsginfo
($fnbox);
lf($6heck) {
print "Date; " . $check->Date .
"<br^\n" print "Driver:
" . $check->Driver ."<br>\n"
print "Mailbox: "
. $check->Mailbox ."<br>\n" :
print "Messages- "
. $check->Nmsgs ."<br>\n"
print "Recent: " .
$check->Recent ."<br>\n"
print "Unread: " . $check->Unread
"<br>\n" print "Deleted: "
. $check->Deleted ,"<br>\n" :
print "Size: " $check->Size ."<br>\n"
} ele ( print "imap_check()
failed- ".imap_last_error().
"<br>\n": } linap^close
($mbox). >

imap_num_msg

Получение числа сообщений в текущем ящике • nt imap_num_msg (int imap_stream)

imap_num_recent

Получение числа новых сообщений в текущем ящике

int imap_num_recent (nnt imap_stream)

imap_listsubscribed

Получение списка активных ящиков

array imap_listsubscribed (Int imap_stream, string ref, string pattern)

У пользователя может быть сложная конструкция папок почтовой учетной записи, но, как водится, для синхронизации и отображения в программе почтового клиента выбираются только несколько (а к остальным обращения не происходит).

Функция возвращает в массиве перечисление имен папок, выбранных для синхронизации. Она аналогична функции iraap_listmailbox().

imap_getsubscribed

Получение изложения активных ящиков

array imap_getsubscribed (int imap_stream, string ref, string pattern)

Функция подобна imap_getmai"lboxes(), но она возвращает только имена тех ящиков, которые были выбраны для синхронизации.

imap_ subscribe

Активизация ящика

int imap_subscribe (int imap_stream, string mbox)

В грядущем ящик будет использоваться для синхронизации. Возвращает TRUE иди FALSE — при ошибке.

imap_ unsubscribe

Дезактивизация ящика

int imap_unsubscribe (int imap_stream, string mbox)

imap_ search

Поиск в текущем ящике

array imap_search (int imap_stream, string criteria, int flags)

Функция возвращает список почтовых ящиков (поиск проходит рекурсивно в текущем ящике), в которых было обнаружено соответствие критерию, указанному в аргументе criteria. В строке критерия указываются желанные слова, поделенные пробелами; если надобно искать фразу, се следует заключать в двойные кавычки; перед комплектом слов указывается имя поля (позволено также указать флаги просматриваемых сообщений), в котором следует производить поиск. Возможно указывать следующие ключевые слова:

  • ALL— все соoбщения, содержащие перечисленные слова;
  • ANSWERED — только сообщения, на которые был выслан итог;
  • ВСС "string" — «екать "string" в поле Вcс;
  • Before "date — сообщения, датированные ранее "date";
  • Body "string" — сообщения, содержащие в своем теле "string";
  • СС "string" — искать "string" в поле Сс;
  • Deleted — удаленные сообщения;
  • Flagged — сообщения со статусом «Важное»;
  • FROM "string " — искать "string" в поле From;
  • KEYWORD "strinп" — искать сообщения, содержащие слово "string";
  • NEW — просматРивать только новые сообщения;
  • Old — проСматривать только старые сообщения;
  • On date — просматривать сообщения, датированные "date";
  • RFCFNT — просматривать свежие сообщения (с флагом \\RECENT); ссси „посматривать прочитанные сообщения ;
  • Since "date" — просматривать сообщения, датированные позже "date";
  • Subject "string" — искать "string" в поле темы Subject:;
  • TFXT "string" — искать сообщения, содержащие текст "string";
  • To string — искать сообщения, содержащие "string" в поле адреса;
  • UNANSWERED — пРoсматРивать сообщения, на которые не был написан итог;
  • UNDFI FTED — просматривать неудаленные сообщения;
  • UNFI АГ6ЕО — пРосматРивать сообщения без флагов;
  • UNKEYWORD "sttring" — искать сообщения, не содержащие слово "string";
  • UNSEEN — просматривать непросмотренные сообщения.

Скажем, чтобы найти все сообщения от отправителя Peter, на которые не был выслан итог, указывается: UNANSWERED FROM Peter.

imap_scanmailbox

Поиск текста в сообщениях

array imap_scanmailbox (int imap_stream, string ref,

string pattern, string content)

функция подобна imapJistmailbox(), но она возвращает имена только тех ящиков, которые содержат в себе строку content.

imap_fetch_overview

Получение изложения сообщений

array imap_fetch_overview (int imap_stream, string sequence [, int flags])

Возвращает в массиве объекты, содержащие информацию о сообщениях, номера которых перечислены в строке sequence. Эта строка должна содержать номер либо номера через запятую без пробелов; позволено указать диапазон разделителем «двоеточие» (:). Если в значении аргумента указана константа FTJJID, это указывает на то, что номера являются уникальными идентификаторами UID.

Каждый объект массива может иметь следующие свойства:

  • subject — тема сообщения;
  • from — отправитель;
  • date — дата отправки;
  • message_id — Message-ID;
  • references — ссылки на message_id;
  • size — размер в байтах;
  • uid — уникальный идентификатор сообщения UID в ящике;
  • msgno — порядковый номер сообщения в ящике;
  • recent — присутствие флага «новое»;
  • flagged — присутствие флага «важное»;
  • answered — присутствие флага «итог написан»;
  • deleted — пометка сообщения к удалению;
  • seen — прочитанное сообщение;
  • draft — присутствие флага «черновик».

Smbox = imap_open("{your л map host:143}".
"username","password") cheC'can't connect:
" .imap_last_error()):
$overview = imap_fetch_overview($mbox."2,4 6",0).
if(is_array($overview)) { pnnt_r($overview): }
imap close($mbox):

Выводится информация последующего вида:

Array
[0] => stdClass Objecl
[subject] -> ПроРавление
[from] => IG <ig<^or>
[date] > Sun 10 May 2001
01-41^°0 +»400 [message_id] ->
^(100801c0db2c$3c46a2cO
$0100007f(aigor>
[S1ze] => 1621
[uid] -> 2897036J
[msgno] => 1
[recent] => 0
[flagged] => 0
[answered] ==> 0
[deleted] => 0
[seen] => 1
[draft] -> 0
)

imap_ headers

Получение списка сообщений текущего ящика

array iroapjieaders (int imap_Streara)

Возвращает массив, соДержащий заголовки имеющихся сообщений. Сообщения вложенных папок не просматриваются.

См. пример в функции imap_open().

imap_header

Синоним функции imap_headerinfo

object imapjieader (int stream, int msgjiumber , int fromlength subjectlength , string defaulthost]]])

imap_headerinfo

Просмотр заголовка сообщенИя

object imap headerinfo (imap_stream, int msg_number)

int fromlength [, int Subjectlength [. string defaulthost]]])

Возвращает объект, содержащии различные элементы информации о сообщении.

$mbox = imap_open
'\{$SERVEf/p°P3- HOJINBOX". "lgor7".
Г1дх32Г);
pnnt_r(imap_header($mbox.l)'

Будет выведено примери" следующее:

stdClass Object (
[date] => Sun. 13 May
2005 01:41:00 +0400 [Date] >
Sun. 13 May 2005 01-41:00 +0400 [subject]
=> Послание [Subject] => Послание
[messagejd] =>
<000801cOdb2c$3c46a2c
O$0100007f@igor> [toaddress] ->
igor@loca]host [to] => Array (
[0] => swClass Object (
[mailbox] -> igor [host] =>
local host ) ) [fromaddress] =>
IG <ig@igor.^ [from] => Array (
[0] -> stddass Object (
[personal] => IG [mailbox] => ig [host] =>
Igor. ) )
[reply_toaddress] =>
IG <тд1?тдог.> [reply_to] => Array (
[0] -> stddass Object (
[personal] => IG [mailbox] =>
ig [host] => igor. )
[senderaddress] ->
IG <ig(?igor.> [sender] -> Array (
[0] -> stddass Ob.iect i
[personal] => IG
[mailbox] => ig [hnbt] -> igor ) )
[Recent] > N [Unseen] =>
[Flagged] => [Answered] =>
[Deleted] => [Draft] => [Msgno] => 1
[MailDate] =>
13 May-2005 01:41:00
+0400 [Size] => 1581 [udate] =>
9S9703660 )

В объекте, как вы можете видеть, возвращаются следующие значения:

  • Идентификационная информация: date, Date, subject, Subject, message^ I id, Msgno, Mai IDate, Size, udate.
  • Адресная информация: toaddre^s, to (mailbox, host), fromaddress, from (personal, mailbox, host), replyjtoaddress, reply_to (personal, mailbox, host), senderaddress, sender (personal, mailbox, host).
  • Значения флагов: Recent. Unseen, Flagged, Answered, Deleted, Draft.

Конструкция и формат записей определяются реализацией серверного интерфейса и могут прочно различаться для разных систем (исключительный способ узнать это — проверить на практике). В большинстве случаев для сообщений протоколов ШАР, РОРЗ и NNTP форматы информационных полей идентичны.

Для news-сообщений дополнительно возвращается качество newsgroup.

Пары полей date, Date и subject, Subject обычно совпадают. В message_ id хранится уникальный хеш сообщения (идентификатор UID), а в Msgno - относительный порядковый. В записях Size и udate возвращается соответственно размер сообщения в байтах и время в формате UNIX Timestamp.

Адресная информация возвращается как в целостном, так и поделенном па составляющие виде. В большинстве случаев адреса fromaddress, reply_toaddress и senderaddress совпадают. Если у сообщения имеется поле Сс: (отправить копии вторичным получателям), то также возвращается адрес ccaddress.

Флат сообщения соответственно обозначают: только что пришедшее сообщение, непрочитанное сообщение, помеченное как «Важное», сообщение на которое был написан итог, сообщение, маркированное к удалению, и черновик сообщения.

Три дополнительных аргумента используются редко.

imap_sort

Сортировка заголовков

array imap_sort (int stream, int criteria, int reverse, int options) Возвращает массив номеров сообщений, сортированных по критерию.

Если в аргументе reverse указывается значение, то происходит обратная сортировка.

В аргументе criteria позволено указывать одно из следующих значений:

  • SORTDATE — по дате сообщения;
  • SORTARRIVAL — по дате получения;
  • SORTFROM — по первому адресу в поле From;
  • SORTSUBJECT — по строке темы в поле Subject:;
  • SORTTO — по первому адресу в поле То;
  • SORTCC — по первому адресу в поле получателей копии Сс;
  • SORTSIZE - но размеру сообщения в октетах.

Флаги options аргумента могут (побитово) включать следующие значения:

  • SEJJID — возвращать уникальный идентификатор сообщения UID вместо сто порядкового номера;
  • SE NOPREFETCH — не исполнять с сообщением заблаговременные манипуляции.

imap_fetchstructure

Получение полной информации о сообщении

object. imap_fetchstructure (int iraap_streara, int msgjiumber [, int flags])

Информация возвращается в объекте, она описывает формат и конструкцию сообщения в текущем ящике, указанном порядковым номером msgjiumber. Если в аргументе flags указывается значение FTJJID. это свидетельствует о том, что в аргументе msgjiumber указан не номер сообщения, а его идентификатор UID.

В объекте присутствуют следующие объекты (его конструкция прочно варьируется):

  • type — тип основного тела сообщения;
  • encoding — кодировка тела сообщения;
  • if subtype — True, если имеется вложенный тип;
  • subtype — вложенный тин MIME;
  • ifdescription — True, если имеется строка изложения;
  • description — строка изложения;
  • if id — True, если имеется строка идентификации;
  • id — строка идентификации;
  • lines — размер в строках;
  • bytes — размер в байтах;
  • ifdisposition — True, если имеется строка размещения;
  • disposition - строка размещения;
  • ifdparameters — True, если имеется массив dparameters;
  • dparameters — массив d-параметров (объектов, где любой вложен-I ный объект состоит из пар «атрибут», «значение»);
  • ifparameters — True, если существует массив параметров;
  • parameters — массив параметров MIME (объектов, где каждый вложенный объект состоит из пар «атрибут*, «значение»);
  • parts — массив объектов, описывающий любую часть сообщения (аналогичен по структуре объекту верхнего уровня, но не может иметь вложенные части).

Тип type основного тела может определяться следующими значениями:

  • 0 — простейший текст;
  • 1 — составное сообщение (multipart);
  • 2 — простое сообщение;
  • 3 — приложение;
  • 4 — аудио;
  • 5 — картинка;
  • 6 — видео;
  • 7 — другое.

Типы кодировки encoding:

  • 0 — 7BIT;
  • 1 — 8BIT;
  • 2 — BINARY;
  • 3 — BASE64;
  • 4 — QUOTED-PRINTABLE;
  • 5 — OTHER.

Для простого сообщения возвращает объект такого вида:

stdClass Object
[ifsubtype] => 1
[subtype] => PLAIN [ifdescnption]
=> 0 [ifid] => 0 [lines] => 2 [bytes] =>
41 [ifdisposition] => 0 [ifdparameters]
=> 0 [ifparameters] => 0 [parameters]
=> stdClass Object '>

Для сложного сообщения1 возвращает объект последующего вида:

stdClass Object
[type] => 1 [ifsubtype] => 1
[subtype]
=> ALTERNATIVE [ifdescription] =>
0 [ifid] => 0 [Ifdisposition] =>
0 [ifdparameters] => 0
[ifparameters] =>
1 [parameters] => Array (
[0] => stdClass Object (
[attribute] => boundary
[value] => -=_NextPart_000_0005_
01CODB4D.C33837AO
[parts] => Array ( [0] => stdClass
Object ( [encoding] => 4
[ifsubtype] => 1 [subtype] =>
PLAIN
[ifdescription] => 0 [ifid] => 0
[lines] => 5 [bytes] => 59
[ifdisposition] => 0
[ifdparameters] =>
0 [ifparameters] =>
1 [parameters] => Array (
[0] => stddass Object \ (
} [attribute] => charset
[value] => koi8-r )
[1] "> stddass Object
[encoding] => 4 [ifsubtype] =>
1 [subtype] => HTML [ifdescription]
=> 0 [ifid] => 0 [lines] => 14
[bytes] => 547 [ifdisposition] =>
0 [ifdparameters] =>
0 [ifparameters] =>
1 [parameters] => Array (
[0] => stddass Object (
[attribute] => charset [value] =>
koi8-r ) ) ) ) )

imap_fetchheader

Получение заголовка сообщения

string imap_fetchheader (int imap_stream, int msgno, int flags)

Возиращается полный, нефильтрованный заголовок (формата RFC822) сообщения с номером msgno в текущем ящике.

В аргументе flags могут быть указаны следующие значения (их позволено бинарно комбинировать):

  • FTJJID — в аргументе msgno указан уникальный идентификатор UID;
  • FT_INTERNAL — возвращать текст как есть, а не в формате CRLF1;
  • FT_PREFETCHTEXT — (RFC822) одновременно получается текст сообщения, что сокращает общую длительность (RTT) подключений ШАР (полученный текст сохраняется в локальном буфере на время подключения).

imap_body

Получение сообщения

string imap_body (int imap_stream, int msg_number [, int flags])

Возвращает тело сообщения с номером msgjiumber в текущем ящике. В аргументе fI ags могут быть указаны следующие значения (их позволено бинарно комбинировать):

  • FTJJID — в аргументе msgno указан уникальный идентификатор UID;
  • FT_PEEK — не устанавливать флаг сообщения \Seen (если он еще не установлен);
  • FT_INTERNAL — возвращать текст как есть, а не в формате CRLF1.

Функция возвращает полную точную копию сообщения (как есть). С ее подмогой позволено прочитать простые сообщения. Для сложных (составных) сообщений функция может воротить просто строку: «This is a multi-part message in MIME format» («Это сообщение в формате MIME состоит из нескольких частей»). Чтобы извлечь отдельные его части и обработать соответственно MIME-кодировке, пользуйтесь функциями imap_fetch_structure() и imap_fetch_body().

imap_fetchbody

Получение части сообщения

string imap_fetchbody (int imap_stream, int msgjiumber.

string partjiumber [, flags flags])

Возвращает часть тела сообщения с номером msgjiumber в текущем ящике. Спецификация указания перечисления номеров секций в аргументе partjiumber определяется IMAP 4 (в тривиальном случае это может быть простейший номер части, где 0 — основная часть, 1 и дальше — вложенные).

В аргументе flags могут быть указаны следующие значения (их позволено бинарно комбинировать):

  • FTJJID — в аргументе msgno указан уникальный идентификатор UID;
  • FT_PEEK — не устанавливать флаг сообщения Seen (если он еще не установлен);
  • FT_INTERNAL — возвращать текст как есть, а не в формате CRLF.

Скажем, для сложного сообщения, конструкция которого приведена в примере функции imap_fetchstructure(), содержание частей может быть последующим.

Это основная часть сообщения (при вызове imap_fetchbody($m,l,0);):

X-F: <ig@igor > Sun May 13 01:41:00
2003 Received: from igor [127 0 0.1] by igor
(SMTPD32-6 06 EVAL) id ADEC10316 Sun.
13 May 2001 01:41-00 +0400 Message-ID:
<000801cOdb2c$3c46a2cO$01000D7№igor>
From: "IG" <ig@igor.> To <igor@localhost>
Subject Приветствие Date: Sun. 13 May 2001
01.41-00 +0400 MIME-Version: 1.0
Content-Type: multipart/alternative:
boundary"-- --=_NextPart_000_0005_
01CODB4D.C33837AO" X-Pnonty:
3 X-MSMail Priority Normal
X-Mailer: Microsoft Outlook Express
5.00 2919 6700 X-MimeOLE: Produced
By Microsoft MimeOLE V5.00.2919.6700
X-RCPT-TO- <igor@localhost> X-UIDL:
289703661 Status: U

Это первая вложенная часть (при вызове imap_fetchbody($m,l,l);):

Привет.
У нас все изумительно
Пока.

Это вторая вложенная часть (при вызове imap_fetchbody($m,l,2);):

<!DOCTYPE HTML PUBLIC "
-//W3C//DTD HTML 4 0
Transitional//EN"> ^HTML>
<HEAD> <META content=
3D"text/html. charset=3Dkoi8-r"
http-equiv=3DContent-Type>
<META content«3D"MSHTML 5.00.2920.0"
name=3DGENERATOR>
<STYLE>
</STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT face=3D"Arial Cyr"
size=3D2> Здорово </FONT>
</DIV>
<DIV><FONT face=3D"Anal CYR"
size=3D2> У нас все изумительно.</FONT>
</DIV> <DIV><FONT face=3D"Anal CYR"
size=3D2> Пока. </FONT></DIV>
</BODY>
</HTML>

bnap_uid

Получение DID сообщения из порядкового номера

int imap_uid (int imap_stream, int msgno)

Возвращается уникальный идентификатор сообщения UID. Он отличается от номера неизменностью, так как номера псревычисляются при удалении сообщений. Действие функции обратно imapjnsgno().

echo imap_uid($mbox.l);
// выводит скажем: 289703561

imap_msgno

Получение порядкового номера сообщения из UID

int imapjnsgno (int imap_stream, int uid)

Действие функции обратно imap_uid().

imap_setflag_full

Установка флагов сообщения

string imap_setflag_fu"n (int stream, string sequence, string flag, string options)

В аргументе sequence указывается перечисление номеров сообщений, для которых надобно установить флаги, указанные в аргументе flag. Флат (согласно RFC2060) обозначаются: "\\Sccn", "\\Answered", "\\Flagged", "\\Deleted", "\\Draft", и "\\Rccent".

В аргументе options может быть указано значение STJJID, указывающее на то, что в аргументе sequence указан уникальный идентификатор UID.

$mbox =- imap_open("{your.I map.host:143}".
"userrame"."password") || dieC'can't connect: "
.imap_last_error()):
if (imap_sPtflag_full($mbox."2A15:
19.23"."\\Seen \\Flagged")) print
"Флаги установлены";
imap_clobe($mbox).

imap_clearflag_ full

Сброс флагов сообщения

string imap_clearf!ag_fun (int stream, string sequence, string flag, string options)

Действие функции противоположно imap_setflag_fuTI().

См. изложение в imap_setf1ag_fun().

imap_delete

Маркировка сообщения как удаленного

int imapjJelete tint imap_stream, int msg_number [, int flags])

Возвращает TRUE.

В аргументе msg_number указывается номер сообщения, а в flags (при значении FTJJID) - является ли номер идентификатором. Сообщения, помеченные к удалению, остаются в ящике, пока не будет вызвана функция imap_expunge() либо подключение (с установленным флагом CL_EXPUNGE) не будет закрыто функцией imap_close().

\ Smbox - imap_open ("{your miap.hostJINBOX".
"username". "password") || die
("can't cornect: " imap_last_error()):
/ Scheck = imapjnailboxmsginfo
(Smbox): print "Сообщений до удаления
" Scheck->Nmsgs . "<br>\n" ;
imapjJelete (Smbox. 1);
$check = imipjnailboxmsginfo
(imbox): print "Сообщений позднее удаления
".$check->Nmsgs."<br>\n" : imap_expunge
(Smbox): $check = imap_mailboxmsginfo
(Smbox).
print " Сообщений позднее expunge()
: ",$chPck->Nmsgs "^br>\n" ; imap_close
(Smbox);

imap_undelete

Восстановление удаленного сообщения

int imap_undelete (int imap_stream, int msg_number)

Функция удаляет флаг удаления с сообщения с номером msgjiumber. Данный флаг ранее можег быть установлен функциями imap_delete(), imapjnail_move() либо imap_setflag_full().

Возвращает TRUE либо FALSE — при ошибке.

imap_ expunge

Удаление «удаленных» сообщений

int imap_expunge (int imap_stream)

Всецело удаляет из ящика сообщения, имеющие флаг "\\Dcleted", тот, что может быть установлен функциями imap_delete(), imap_mail_ move() либо imap_setflag_full().

Возвращает TRUE.

imap_mail_copy

Копирование сообщения в ящик

int -imapjnail_copy (int imap_stream, string msglist, string mbox [. int flags])

Возвращает TRUE либо FALSE — при ошибке.

Перечисление номеров копируемых сообщений указывается в стро-I ковом аргументе msglist. Их следует перечислять через запятую, без пробелов, диапазоны указываются знаком двоеточия.

См. также документ RFC2060.

Ящик назначения, указываемый в аргументе mbox, указывается без имени сервера.

В аргументе flags позволено указывать битовую маску из следующих констант:

  • CPJJID - номера являются уникальными идентификаторами UID;
  • СР MOVE — удалять сообщения позднее копирования.

imap_mail_copy($m. "1.3 5"."INBOX/Текущие"):

imap_mail_move

Перемещение сообщения в ящик

int imapjnailjnove (int imap_stream, string msglist, string robox [. int flags])

Функция аналогична вызову:

imap_mail_copy(imap_stream, msglist, mbox, flags | CP_MOVE );

imap_alerts

Получение сообщения IMAP

array imap_alerts (void)

Возвращается массив, содержащий все извещения, посланные сервером от начала подключения либо позднее прошлого вызова данной функции.

imap_mime_header_decode

Декодирование элементов MIME заголовков

array imap_header_decode (string text)

Функция декодирует расширенные заголовки, посланные не в тексте ASCII (см. RFC2047). Декодированные элементы возвращаются в массиве объектов, каждый из которых содержит пару "charset" и "text" (кодировка и содержимое текста). Если заголовки не были закодированы (то есть они передавались в кодировке US-ASCII), значение элемента "charset" будет равно "default".

$teAt="*?ISO-8859-l?Q?Keld_>
r8rn_Simoisen?= <kpldG>dkuug.dk>";
print._r( тлар irnme_heacier_decode
($text 0

Выводит следующее:

Arrayt
[0] -> stdClass Object (
[charset] => ISO-8859-1
[text] => Keld Juirn Slmonsen )
[1] -> stdClass Object (
[charset] => default [text] «>
<keld@dkuug.dk> ) )

imap_mail_compose

Создание сообщения MIME по примеру

string imapjrtan_compose (array envelope, array body)

<?php
$envelope["from"]="musore
@afterfive com". $envelope["to"]="
musone@darkstar"; $envelope["cc"]
="musone@edgeglobal.com".
$partlC"type">TYP0WLTIPART;
$partl["siibtype"]="mixed";
$flleneroe-'/tmp/lroap c.gz";
$fp=fopen($filename."r").
$contents=fread<$fp.filesize($filename)):
fc!ose($fp):
$part2["type']=TYPEAPPLICATION.
$part2["encoding"]=ENCBIMARY:
$part?["subtype">"octet-stream".
$part?["descnption"]=basename
($filename); $part2["contents.data"]=
$contents;
$part3["type">TYP£TEXT.
$part3["subtype"]="plain".
$part3[ "descn pt i on" ]="descri pt i on3";
$part3["contents.data ']="contents
.data3\n\n\n\t";
$body[l]=$partl: $body
[2]=$part2. $body[3]=$part3:
echo nl2br(imap_mail_compose
($envelope.$body)): ?>

imap_append

Создание сообщения в ящике

int imap_append (Int imap_stream, string mbox, string message [, string flags])

Возвращает TRUE либо FALSE — при ошибке.

В аргументе message содержится текст сообщения, включая текст заголовка. Для многих серверов надобно обозначать конец строк парой символов «\r\n».

В аргументе flags позволено указать флаги, присваиваемые сообщению. ,

$stream = imap_open("(
your imap.host}INBOX.Drafts"."username".
"password"): /
[ $check = imap_check($stream);
print "Сообщений было: " $check->
Nmsgs "\n";
imap_append($stream."
{your.imap.host}INBOX.Drafts" .
"From- me@my.host\r\n"
"To: you@your.host\r\n"
Subject: test\r\n" "\r\n"
."this TS a test message, please
ignore\r\n". "\\Flagged \\Draft"):
$check = imap_check($stream): ' print
"Сообщений стало: ". $check->
Nmsgs "\n"; imap_close
($stream).

imap_ mail

Посылка email

string imapjnail (string to, string subject, string message [, string additionaljieaders [, string cc [, string bcc [, string rpath>)

Функция пока доступна только в PHP 3.

Вспомогательные функции

imap_last_error

Получение изложения последней ошибки

string imap_last_error (void)

Возвращается строка, содержащая полное изложение ошибки ШАР (если она имелась), произошедшей в ходе исполнения сценария. Стек сообщений не изменяется, и повторный вызов функции возвратит то же значение (если других ошибок не случилось).

imap_errors

Получение всех возникших ошибок array imap_errors (void)

В массиве возвращаются строки изложения ошибок ШАР, произоше/ тих от начала подключения либо с момента последнего вызова дан ной функции. Вызов функции всецело очищает стек ошибок.

imap_qprint

Конвертация строки quoted-printable в 8-bit string imap_qprint (string string.j Способ конвертации описан в RFC2045, раздел 6.7. / Возвращает двоичную, 8-битную строку.

См. также imap_8bit().

imap_8bit

Конвертация строки 8bit в quoted-printable

string imap_8bit (string string)

Способ конвертации описан в RFC2045.

Возвращает строку, «цитированную для печати».

print imap_8bit("The Привет"),
// напечатает. The <F=FO=E8=E2=E5=F2

См. также imap_qprint().

imap_ binary

Конвертация строки 8bit в base64

string imapjjinary (string string)

Процедура конвертации описана в RFC2045.

Возвращает строку в формате base64.

print imap_tnnary("The Привет");
// напечатает: VGhlIM/w60L18g==

См. также imap_base64().

imap_base64

Декодирование BASE64

string imap_base64 (string text)

Процедура конвертирования описана в RFC2045.

См. также imap_binary().

imap_rfc822_write_address

Форматирование строки адреса

string imap_rfc822_write_address (string mailbox, string host, string personal)

Возвращает строку адреса электронной почты, сформированную из заданных значений согласно правилам, указанным в RFC822.

print imap_rfc822_write_address
("ig"."php net"."Igor Ghgin");
// выведет. Igor Grigin <ig@php.net>

imap_rfc822_parse_adrlist

Интерпретация адреса

array imap_rfc822_parse_adrlist (string address, string default_host)

Исходная строка с перечислением почтовых адресов, записанных в формате RFC822, указывается в аргументе address. Аргумент содержит имя хоста, добавляемое к адресу, если в нем таковое отсутствует.

Возвращается массив объектов, каждый из которых может иметь следующие свойства:

  • mailbox — имя ящика (usernamc);
  • host — имя хоста;
  • personal — личное имя;
  • adl — доменный разграничитель.

$address_stnng = "Igor Grigin
<ig@my.domain.net>,postmaster
@somedomain net. root";
$address_array = imap_rfc822_parse_ac!rlist
($address_string."our net").
if(! is_array($address_array))
dieC'somethings wrong\n"):
print_r($address_array);

Будет выведено следующее:

Arrayt [0] => stdClass Object
( [mailbox] => ig [host] =>
my domann.net [personal] =>
Igor Origin ) [1] => stdClass Object
( [mailbox] => postmaster [host]
=> somedomain.net )
[2] => stdClass Object ( [mailbox]
=> root [host] => our net ) )
imap_rfc822 parse headers
Интерпретация заголовков
из строки object
imap_rfc822_parse_headers
(string headers [, string defaulthost])

Функция сходна с imap_header(), но информацию она получает не с сервера ШАР, а из строки headers.imap_utf7_decode

Декодирование строки UTF-7

string imap_utf7_decode (string text)

Возвращает достоверную строку либо FALSE — в случае ошибки. Эта кодировка нередко используется для адресов почтовых ящиков, содержа-! щих национальные символы (скажем, символы кириллицы). Функ-/ ция использует модифицированный алгоритм, описанный в RFC2060, раздел 5.1.3 (устаревший алгоритм» был описан в RFC1642).

imap_utf7_encode

Кодирование строки 8bit в UTF-7

string imap_utf7_encode (string data)

imap_utf8

Конвертация текста в UTF8

string imap_utf8 (string text) Конвертация описана в RFC2044.