ホームページ  >  記事  >  バックエンド開発  >  PHP はリモート HTTP ファイルおよび FTP ファイル操作を使用します

PHP はリモート HTTP ファイルおよび FTP ファイル操作を使用します

伊谢尔伦
伊谢尔伦オリジナル
2016-11-22 10:25:441616ブラウズ

allow_url_fopen オプションが php.ini ファイルで有効になっている限り、パラメータとしてファイル名を必要とするほとんどの関数で、ファイル名の代わりに HTTP および FTP URL を使用できます。同時に、URL は include、include_once、require、require_once ステートメントでも使用できます。 PHP でサポートされるプロトコルの詳細については、「サポートされるプロトコルとカプセル化されたプロトコル」を参照してください。

注:

PHP 4.0.3 以前のバージョンで URL ラッピング プロトコルを使用するには、コンパイル時に --enable-url-fopen-wrapper パラメーターを使用して PHP を設定する必要があります。

バージョン 4.3 より前の Windows バージョンの PHP は、次の関数のリモート アクセスをサポートしていません: include、include_once、require、require_once、および GD および Image 関数の imagecreatefromXXX 関数。

たとえば、次の例を使用して、リモート Web サーバー上のファイルを開き、必要な出力データを解析して、このデータをデータベースの取得に使用したり、単にそのコンテンツを Web サーバー上の他のページと同じスタイルで出力したりすることができます。自分のウェブサイト。

例 #1 リモート ファイルのタイトルを取得する

<?php
    $file = fopen ("/", "r");
    if (!$file) {
        echo "<p>Unable to open remote file.\n";
        exit;
    }
    while (!feof ($file)) {
        $line = fgets ($file, 1024);
        /* This only works if the title and its tags are on one line */
        if (eregi ("<title>(.*)</title>", $line, $out)) {
            $title = $out[1];
            break;
        }
    }
    fclose($file);
?>

法的なアクセス権があり、ユーザーとして FTP サーバーとのリンクを確立している場合は、FTP サーバー上のファイルに書き込むこともできます。このメソッドは、新しいファイルを作成する場合にのみ使用できます。既存のファイルを上書きしようとすると、fopen() 関数の呼び出しは失敗します。

「anonymous」以外のユーザー名でサーバーに接続するには、「ftp://user:password@ftp.example.com/path/to/file」のようにユーザー名 (および場合によってはパスワード) を指定する必要があります。 (基本認証を必要とする HTTP プロトコル経由でリモート ファイルにアクセスするときにも同じ構文を使用できます)。

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

<?php
    $file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
    if (!$file) {
        echo "<p>Unable to open remote file for writing.\n";
        exit;
    }
    /* Write the data here. */
    fwrite ($file, $_SERVER[&#39;HTTP_USER_AGENT&#39;] . "\n");
    fclose ($file);
?>

注:

上記の例からインスピレーションを得て、このテクノロジーを使用してリモート ログ ファイルを保存することもできます。ただし、上で述べたように、fopen() で開かれた URL では、新しいファイルのみを書き込むことができます。リモート ファイルがすでに存在する場合、fopen() 関数の操作は失敗します。分散ログと同様のことを行うには、syslog() 関数を参照できます。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。