その他サービスネットワーク関数
- fsockopen〔インターネットまたはUNIXドメインのソケット接続をオープン〕
- gethostbyaddr〔指定したIPアドレスに対応するホスト名を取得する〕
- gethostbyname〔指定したホスト名に対応するIPアドレスを取得する〕
- gethostbynamel〔指定したホスト名に対応するIPアドレスの一覧を取得する〕
- getprotobyname〔プロトコル名が指すプロトコル番号を取得する〕
- getprotobynumber〔プロトコル番号が指すプロトコル名を取得する〕
- getservbyname〔インターネットサービスおよびプロトコルが関連するポート番号を取得する〕
- getservbyport〔ポート番号およびプロトコルに対応するサービスを取得する〕
- header〔HTTPヘッダを送信する〕
- header_list
〔送信済み(または送信予定)のレスポンスヘッダの一覧を返す〕
- headers_sent〔HTTPヘッダが既に送信されているか調べる〕
- pfsockopen〔持続的なInternetまたはUnixドメインソケット接続をオープン〕
- setcookie〔クッキーを送信する〕
- setrawcookie
〔値をURLエンコードせずにクッキーを送信する〕
- stream_get_meta_data〔ヘッダあるいはメタデータをストリームまたはファイルポインタから取得〕
- stream_get_transports
〔登録されたソケットのトランスポートの一覧を取得〕
- stream_set_bloking〔ストリームのブロックモードを有効化/解除〕
- stream_set_timeout〔ストリームにタイムアウトを設定〕
fsockopen
インターネットまたはUNIXドメインのソケット接続をオープン
unknown
ターゲットに指定されたリソース(インターネットまたはUNIXドメイン)へのソケット接続を初期化します。 サポートされるトランスポートのリストは、stream_get_transports()関数を使用して取得できます。
ソケットはデフォルトで、ブロックモードで開かれますが、stream_set_bloking()関数を使用して非ブロックモードに切り替えることもできます。
失敗した場合はFALSEを返します。 オプション引数エラー番号とエラーメセージが指定されている場合は、 システムコールconnect()で生じた実際のシステムレベルのエラーを表示します。 エラー番号とエラーメッセージは参照渡しになります。
エラー番号が0なのに関数がFALSEを返す場合は、connect()をコールする前にエラーが発生したことを意味します。 この場合は、ソケットの初期化に原因があります。
この関数で返されるファイルポインタは、他の関数(fgets()関数、 fgetss()関数、 fputs()関数、 fclose()関数、 feof()関数など)で使用することができます。
オプションの第5引数タイムアウトは、ソケットに接続する間だけに適用されます。 ソケット経由でデータを読み書きする際にタイムアウトを設定する場合は、stream_set_timeout()関数を使用する必要があります。
<?
$fp=fsockopen("www.sample.co.jp", 80, $errno, $errstr, 30);
if(!$fp){
echo "$errstr ($errno)<br>\n";
}else{
$out="GET / HTTP/1.1\r\n";
$out.="Host: www.example.com\r\n";
$out.="Connection: Close\r\n\r\n";
fwrite($fp, $out);
while(!feof($fp)){
echo fgets($fp, 128);
}
fclose($fp);
}
?>
gethostbyaddr
指定したIPアドレスに対応するホスト名を取得する
unknown
指定したIPアドレスに対応するのホスト名を返します。 失敗した場合は、指定したIPアドレスを文字列で返します。
<?
$hostname=gethostbyaddr($_SERVER['REMOTE_ADDR']);
echo $hostname; // localhost
?>
gethostbyname
指定したホスト名に対応するIPアドレスを取得する
unknown
指定したホスト名に対応するのIPアドレスを返します。 失敗した場合は、指定したホスト名を文字列で返します。
<?
$ip=gethostbyname('www.yahoo.co.jp');
echo $ip; // 203.216.235.201
?>
gethostbynamel
指定したホスト名に対応するIPアドレスの一覧を取得する
unknown
指定したホスト名に対応するのIPアドレスの配列で返します。 失敗した場合は、FALSEを返します。
<?
$hosts=gethostbynamel('www.yahoo.co.jp');
print_r($hosts);
/*
Array
(
[0] => 124.83.147.203
[1] => 124.83.147.204
[2] => 124.83.147.205
[3] => 124.83.167.212
[4] => 203.216.227.176
[5] => 203.216.235.154
[6] => 203.216.235.201
[7] => 203.216.243.218
[8] => 203.216.247.225
[9] => 203.216.247.249
[10] => 124.83.139.191
[11] => 124.83.139.192
[12] => 124.83.147.202
)
*/
?>
getprotobyname
プロトコル名が指すプロトコル番号を取得する
unknown
プロトコル名に指定したプロトコル番号を/etc/protocolsから取得して返します。 プロトコルが見つからない場合は、FALSEを返します。
<?
$protocol='tcp';
$get_prot=getprotobyname($protocol);
if(!$get_prot){
echo '無効なプロトコル';
}else{
echo 'プロトコル番号: '.$get_prot; // 6
}
?>
getprotobynumber
プロトコル番号が指すプロトコル名を取得する
unknown
/etc/protocolsに基づいて、指定したプロトコル番号が指すプロトコル名を文字列として返します。 プロトコルが見つからない場合は、FALSEを返します。
<?
$get_prot=getprotobynumber(6);
if(!$get_prot){
echo '無効なプロトコル';
}else{
echo 'プロトコル名: '.$get_prot; // tcp
}
?>
getservbyname
インターネットサービスおよびプロトコルが関連するポート番号を取得する
unknown
/etc/servicesに基づいて、指定したプロトコルに関してサービスに対応するポート番号を返します。 サービスあるいはプロトコルが見つからない場合は、FALSEを返します。
第1引数サービスには、インターネットサービス名を表す文字列を指定します。
第2引数プロトコルには、「tcp」あるいは「udp」(小文字)のいずれかを指定します。
<?
$services=array('http', 'ftp', 'ssh', 'telnet', 'imap',
'smtp', 'nicname', 'gopher', 'finger', 'pop3', 'www');
foreach ($services as $service) {
$port=getservbyname($service, 'tcp');
echo $service . ": " . $port . "<br>\n";
}
/*
http: 80
ftp: 21
ssh:
telnet: 23
imap: 143
smtp: 25
nicname: 43
gopher: 70
finger: 79
pop3: 110
www: 80
*/
?>
getservbyport
ポート番号およびプロトコルに対応するサービスを取得する
unknown
/etc/servicesに基づいて、指定したプロトコルに関してポート番号に関連するインターネットサービス名を文字列でを返します。
第2引数プロトコルには、「tcp」あるいは「udp」(小文字)のいずれかを指定します。
<?
echo getservbyport(23, "tcp"); // telnet
?>
header
HTTPヘッダを送信する
unknown
HTMLファイルの送信に先立って、任意のヘッダ文字列を送信するために使用します。
オプションの第2引数置換は、ヘッダが前に送信された類似のヘッダと置換するか、 または同形式の2番目のヘッダを追加するかどうかを指定します。デフォルトはTRUE(置換する)。 FALSEを指定した場合は、同じ型の複数のヘッダを強制的に生成します。
オプションの第3引数HTTPレスポンスコード(PHP4.3.0~)は、HTTPレスポンスコードを強制的に指定の値にします。
この関数は、HTMLタグやPHPスクリプトによる出力よりも前に記述する必要があります。 それ以外の場所に記述した場合は、エラーが発生します。
イメージを扱う場合は、ヘッダ文字列に、Content-Typeを用いて、利用するMIMEタイプを送出します。 リダイレクトを指定する場合は、それ以外のスクリプトが実行されないよう exit() でスクリプトを終了します。
<?
#"HTTP/"から始まるヘッダ(大文字・小文字の区別なし)
#HTTPステータスヘッダ行はクライアントに対して常に最初に送信される。
#HTTPヘッダが送信済み出ない限り、header()関数をコールする事でステータスは常に上書きされる。
header("HTTP/1.0 404 Not Found");
#指定したURLにリダイレクト(必ずexitする)
header("Location:http://www.yahoo.co.jp");
exit;
#文字コードの設定
header("Content-type: text/html;charset=utf-8");
#キャッシュしない
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 過去の日付
?>
header_list 
送信済み(または送信予定)のレスポンスヘッダの一覧を返す
unknown
ブラウザもしくはクライアントに送信されるヘッダの数値配列を返します。
これらのヘッダが送信されたか確認する場合は、headers_sent()関数を使用してください。
headers_sent
HTTPヘッダが既に送信されているか調べる
unknown
HTTPヘッダが送信済みの場合にTRUE、そうでない場合はFALSEを返します。
オプション引数のfileとline(PHP4.3.0~)が指定されている場合、 PHPのソースファイル名と出力開始行番号がそれぞれ変数に格納されます。
オプション引数のfileとlineは参照渡しのため、あらかじめ値を与えてはいけません。
ヘッダブロックが一旦送信されてしまった後でheader()関数を使って、新たなヘッダ行を送信することはできません。 この関数を使うには、少なくともHTTPヘッダ関連のエラーを予防、あるいは出力バッファリングをする必要があります。
<?php
#ヘッダがまだ何も送信されていない場合送信する
if (!headers_sent()) {
header('Location: http://phpjavascriptroom.com/');
exit;
}else{
echo "ヘッダは送信済みです";
exit;
}
# オプションのfileとlineパラメータの使用例(PHP4.3.0以降)
# $filename と $linenum が後で使用されていることに注目。
# これらの変数に事前に値を与えたりしてはいけません。
if (!headers_sent($filename, $linenum)) {
//ヘッダが送信済みの場合
header('Location: http://phpjavascriptroom.com/');
exit;
} else {
//ヘッダが送信されない場合
echo "$filename の line $linenum で、ヘッダは送信済みです。\n" .
"リダイレクトできない場合は、" .
"<a href=http://phpjavascriptroom.com/'>こちら</a>のリンクを" .
"クリックしてください。\n";
exit;
}
?>
pfsockopen
持続的なInternetまたはUnixドメインソケット接続をオープン
unknown
fsockopen()関数の持続的接続版。 この関数は、この関数による接続はリクエストが終了した後でも閉じられないことを除いて、fsockopen()関数と全く同じ動作です。
<?
$fp=pfsockopen("www.example.com", 80, $errno, $errstr, 30);
if(!$fp){
echo "$errstr ($errno)<br>\n";
} else {
$out="GET / HTTP/1.1\r\n";
$out.="Host: www.example.com\r\n";
$out.="Connection: Close\r\n\r\n";
fwrite($fp, $out);
while(!feof($fp)){
echo fgets($fp, 128);
}
fclose($fp);
}
?>
stream_get_transports 
登録されたソケットのトランスポートの一覧を取得
unknown
スクリプト実行中のシステムにおいて、利用可能なソケットのトランスポートの一覧を配列として返します。 PHPのバージョンによって、トランスポートの数が増減することがあります。
<?
$xport_list=stream_get_transports();
print_r($xportlist);
/* PHP のバージョンによって、トランスポート数の増減あり
Array (
[0] => tcp
[1] => udp
[2] => unix
[3] => udg
)
*/
?>
stream_set_bloking
ストリームのブロックモードを有効化/解除
unknown
bool socket_set_blocking ( resource ストリーム, int $mode ) ※廃止
modeが0の時ストリームは非ブロックモードに切り替えられます。 modeが1の時ストリームはブロックモードに切り替えられます。
このモードの違いは、fgets()関数やfread()関数といったストリームからデータを読む関数に影響します。 成功した場合にTRUEを返し、失敗した場合にFALSEを返します。
非ブロックモードでfgets()関数を呼び出すと、どんな場合でも直ちに呼び出し元に戻りますが、ブロックモードの場合は、ストリームがデータを読み出せる状態になるまで待ち続けます。
- PHP4.3未満では、ソケットベースのストリームにしか機能しませんでしたが、PHP4.3 から非ブロックモードをサポートする全てのストリームにおいて利用できるようになりました(但し、現在サポートされているのは通常のファイルストリームとソケットストリームのみ)。
- socket_set_blocking()関数は、この関数のエイリアスですが、現在は廃止されました。
stream_set_timeout
ストリームにタイムアウトを設定
unknown
ストリームに、秒とマイクロ秒を足した値をタイムアウトの値を設定します。 成功した場合にTRUE、失敗した場合にFALSEを返します。
ストリームがタイムアウトとなった場合は、エラーや警告が発生していなくても、 stream_get_meta_data()関数が返す配列のキー「timed_out」の値がTRUEに設定されます。
<?
$fp=fsockopen("www.sample.co.jp", 80);
if(!$fp){
echo "開けません\n";
}else{
fwrite($fp, "GET / HTTP/1.0\r\n\r\n");
stream_set_timeout($fp, 2);
$res=fread($fp, 2000);
$info = stream_get_meta_data($fp);
fclose($fp);
if($info['timed_out']){
echo 'Connection timed out!';
}else{
echo $res;
}
}
?>