第 20 章 リモートファイルの使用

PHPを設定する際に "URL fopen wrapper" に関するサポートを 有効にした場合(つまり、--disable-url-fopen-wrapper フラグを configure に明示的に渡した場合(4.0.3までのバージョン)、ま たは、php.ini で allow_url_fopen を off に設 定した場合(より新しいバージョン)を除いて)、 require() および include() 文を 含むファイル名をパラメータとして受ける多くの関数 においてHTTPおよびFTP URLを使用することができます。

注意 Windows上では、リモートファイルに include() および require() 文を使用することはできません。

例えば、リモートWebサーバーにファイルをオープンし、データを出力、デー タベースクエリーに使用するか、単にWebサイトのスタイルに合わせて出力 を行うことが可能です。

例 20-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でファイルを書きこむことも可能です。 'anonymous'以外のユーザーで接続を行う場合、URLの中で 'ftp://user:password@ftp.example.com/path/to/file' のように ユーザー名(そして多分パスワードも)指定する必要があります。 (Basic認証を要求された際にHTTP経由でファイルをアクセスする場合と 同じ種類の構文を使用することができます。)

例 20-2リモートサーバーにデータを保存する

<?php
  $file = fopen("ftp://ftp.php.net/incoming/outputfile", "w");
  if (!$file) {
    echo "<p>Unable to open remote file for writing.\n";
    exit;
  }
  /* データをここに書きます。 */
  fputs($file, "$HTTP_USER_AGENT\n");
  fclose($file);
?>

注意 上の例からリモートログに書きこむためにこの手法を使用することを考えるかも しれません。 しかし、上に述べたように、URL fopen() ラッパーを使って書きこめるのは 新規のファイルのみです。 ログのようなことを行うには、 syslog() の使用を考えてみて下さい。