FTP

При использовании модуля FTP им определяются две константы: FTP_ASCII и FTP_BINARY.
Функции используют дескриптор сеанса подключения (это первый аргумент, обозначенный как 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

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г. Яндекс.Метрика