php.iniでallow_url_fopenを有効にした場合、
ファイル名をパラメータとする関数の多くで HTTP
および FTP のURL
を使用することができます。加えて、include(), include_once(), require(), require_once() 命令でURLを使用することができます。
PHPがサポートしているプロトコルに関する詳細は 付録Oを参照してください。
注意: PHP 4.0.3以前のバージョンにおいては、URLラッパーを使用するために、
configureオプション --enable-url-fopen-wrapper
を使用してPHPをconfigureを行なう必要があります。
例えば、リモートWebサーバーにファイルをオープンし、データを出力、デー
タベースクエリーに使用するか、単にWebサイトのスタイルに合わせて出力 を行うことが可能です。
例 39-1. リモートページのタイトルを得る
<?php
$file =
fopen("http://www.php.net/",
"r");
if (!$file)
{
echo "<p>Unable to open remote
file.\n";
exit;
}
while (!feof($file))
{
$line = fgets($file, 1024);
/*
タイトルとタグが同じ行にある場合のみ動作します。 */
if
(eregi("<title>(.*)</title>",
$line, $out))
{
$title = $out[1];
break;
}
} fclose($file); ?>
|
|
(正しいアクセス権限を有するユーザとして接続した場合には) FTPサーバにファイルを書き込むこともできます。
この方法では、新規ファイルを作成することのみができます。 既存のファイルを上書きしようとした場合には、 fopen()の処理は失敗します。
'anonymous'以外のユーザーで接続を行う場合、URLの中で
'ftp://user:password@ftp.example.com/path/to/file' のように
ユーザー名(そして多分パスワードも)指定する必要があります。
(Basic認証を要求された際にHTTP経由でファイルをアクセスする場合と 同じ種類の構文を使用することができます。)
例 39-2. リモートサーバーにデータを保存する
<?php
$file =
fopen ("ftp://ftp.example.com/incoming/outputfile",
"w");
if (!$file)
{
echo "<p>Unable to open remote file
for writing.\n";
exit;
} /*
データをここに書きます。 */ fputs ($file, $_SERVER['HTTP_USER_AGENT'] . "\n"); fclose ($file); ?>
|
|
注意: 上の例からリモートログに書きこむためにこの手法を使用することを考えるかも しれません。
しかし残念ながら、リモート上のファイルが既に存在する状態では fopen()をコールすることができないため、 それはできません。
分散ロギングのようなことを行うには、 syslog() の使用を考えてみてください。