By Vikram Vaswani
Melonfire
2000 年 11 月 07 日
私たちは PHP の忠実なファンのグループです。Web サイトの開発、描画、データベース接続など、さまざまな目的で PHP を使用しています。PHP が非常にフレンドリーで強力であることがわかります。そして使いやすい...
PHP が GIF や JPEG 画像の作成、データベースからの情報の動的取得などにどのように使用されるかを見たことがあるかもしれませんが、これは氷山の一角にすぎません。PHP の最新バージョンでは、強力なファイル転送機能。
このチュートリアルでは、FTP が HTTP および FTP 接続を介してファイルを転送する方法を説明します。また、いくつかの簡単なプログラム コードも紹介します。
まず、PHP は HTTP および FTP 接続を通じてファイルを転送することを知っておく必要があります。 HTTP を介したファイルのアップロードは PHP3 ですでに登場していますが、新しい FTP 機能が新しい PHP バージョンに登場しました。
始める前に、PHP が FTP をサポートしていることを確認する必要があります。次のコードで確認できます:
----------------------- --- --------------------------------------------------- --- ---
phpinfo();
?>
---------------------------- ------ -------------------------------------------- ------
出力結果を確認してください。「追加モジュール」領域に、PHP でサポートされているモジュールがリストされています。FTP モジュールが見つからない場合は、PHP を再インストールして FTP サポートを追加することをお勧めします。
まず、典型的な FTP タスクがどのように完了するかを見てみましょう。
------------------------------------------------- ----------------------------------
$ ftp ftp.server.com
ftp.server.com に接続しました
220 サーバー .com FTP サーバーの準備ができました。
名前 (サーバー:john): john
331 john にはパスワードが必要です。
パスワード:
230 ユーザー john がログインしました。
リモート システムの種類は UNIX です。
ファイル転送にバイナリ モードを使用しています。
ftp> ls
200 PORT コマンドが成功しました。
150 /bin/ls の ASCII モード データ接続を開きます。
drwxr-xr-x 5 john users 3072 Nov 2 11:03 .
drwxr-xr-x 88 root root 2048 Nov 1 23: 26..
drwxr--r-- 2 ジョン ユーザー 1024 10 月 5 13:26 bin
drwx--x--x 8 ジョン ユーザー 1024 11 月 2 10:59 public_html
drwxr--r-- 4 ジョンusers 1024 11 月 2 日 11:26 tmp
-rw-r--r-- 1 john users 2941465 10 月 9 日 17:21 data.zip
226 転送完了。
ftp>bin
200 Type set to I.
ftp>get data.zip
ローカル: data.zip リモート: data.zip
200 PORT コマンドが成功しました。
150 data.zip (2941465 バイト) の BINARY モード データ接続を開きます。
226 転送が完了しました。
ftp> bye
221 Goodbye。
--- --------------------------------------------------- --- --------------------------
プロセスが明らかにいくつかの段階に分かれていることがわかります。 FTP サーバー)、検証 (ユーザーにシステムに入る権限があるかどうかの判断)、送信 (これにはディレクトリの一覧表示、ファイルのアップロードまたはダウンロードが含まれます)、および接続のキャンセルが含まれます。
FTP に PHP を使用する手順
PHP FTP 接続を確立するには、次の基本手順に従う必要があります: 接続を開く - 認証情報を送信する - PHP 関数を使用してディレクトリを操作し、ファイルを転送する。
以下の具体的な実装:
------------------------------------------ ---------- ------------------------------------
/ / FTP サーバーに接続します
$conn = ftp_connect("ftp.server.com");
// ユーザー名とパスワードを使用してログインします
ftp_login($conn, "john", "doe");
//リモート システムのタイプを取得します
ftp_systype($conn );
// ファイルをリストします
$filelist = ftp_nlist($conn, ".");
// ファイルをダウンロードします
ftp_get($conn, "data.zip", "data.zip", FTP_BINARY);
//接続を閉じます
ftp_quit($conn);
?>
--------------------- ------------------------ -------------------------------------------- -------------
ステップバイステップで見てみましょう:
FTP 接続を初期化するために、PHP はホスト名とポートをパラメーターとして受け取る ftp_connect() 関数を提供します。上記の例では、ホスト名は「ftp.server.com」ですが、ポートが指定されていない場合、PHP は接続を確立するためにデフォルトのポートとして「21」を使用します。
接続が成功すると、ftp_connect() はハンドルを返します。このハンドルは、後で使用される FTP 関数によって使用されます。
------------------------------------------------- ----------------------------------
// FTPサーバーに接続します
$conn = ftp_connect(" ftp.server.com");
?>
--------------------------------- ---------------------------------------------------- ---------------
接続が確立されたら、ftp_login() を使用してユーザー名とユーザー パスワードを送信します。関数 ftp_login() は、ftp_connect() 関数によって渡されたハンドルを使用して、ユーザー名とパスワードを正しいサーバーに送信できるかどうかを判断していることがわかります。
------------------------------------------------- ----------------------------------
// ユーザー名とパスワードでログインします
ftp_login ($conn , "ジョン", "doe");
?>
----------------------------- --- --------------------------------------------------- ---
この時点で、やりたいことを実行できます。これについては次のパートで説明します:
やりたいことを完了したら、必ず ftp_quit() 関数を使用して FTP を閉じてください。つながり
------ -------------------------------------- ---------- -----------------------
// 接続を閉じる
ftp_quit($conn);
?>
---- -------------------------------------- ---------- ------------------------
FTP サーバーにログインすると、PHP では次のような機能が提供されます。システム、ファイル、ディレクトリに関する情報を取得します。
ftp_pwd()
現在いるディレクトリを知りたい場合は、この関数を使用する必要があります。
------------------------------------------------- ----------------------------------
// 現在位置を取得
$here = ftp_pwd ($conn );
?>
-------------------------------------- ----------------------------------------------------
サーバー側で何が実行されているかを知る必要がある場合、システムはどうなるのでしょうか?
ftp_systype() はまさにこの情報を提供します。
------------------------------------------------- ----------------------------------
// システムタイプを取得
$server_os = ftp_systype ($conn );
?>
-------------------------------------- ----------------------------------------------------
パッシブモード(PASV)スイッチに関しては、PHPでもPASVをオンまたはオフにできる関数を提供しています(1はオンを意味します)
----------------------- ----------------------------------------------------
< ;?
// PASV をオンにする
ftp_pasv($conn, 1);
?>
----------------------- -------------------------------------------------- - ----
これで、自分が「どこ」にいるのか、そして「誰」が一緒にいるのかがわかったので、ディレクトリ内を歩き回ってみましょう。この関数を実装する関数は、ディレクトリを受け入れる ftp_chdir() 関数です。パラメータとして名前を指定します。
------------------------------------------------- ----------------------------------
// ディレクトリを「public_html」に変更
ftp_chdir ($conn , "public_html");
?>
------------------------------------- ------ --------------------------------------
もし元のディレクトリ (親ディレクトリ) に戻りたい場合は、ftp_cdup() 関数を使用すると、前のディレクトリに戻ることができます。
------------------------------------------------- ----------------------------------
// ディレクトリ ツリーの 1 レベル上に移動します
ftp_cdup( $conn);
?>
------------------------------------- --- --------------------------------------
作成や移動もできますディレクトリ。これには ftp_mkdir() 関数と ftp_rmdir() 関数を使用する必要があります。 注: ftp_mkdir() が正常に作成されると、新しく作成されたディレクトリ名が返されます。
------------------------------------------------- ----------------------------------
// ディレクトリを「test」にする
ftp_mkdir ($conn , "test");
// ディレクトリ "test" を削除します
ftp_rmdir($conn, "test");
?>
-------------- --- --------------------------------------------------- --- -------------
FTP ディレクトリの作成は、通常、ファイルを転送するために行われます ---それでは、始めましょう!
最初にファイルをアップロードします。ftp_put() 関数はこのタスクに適しています。ローカル ファイル名、アップロードされたファイル名、転送の種類を指定する必要があります。例: ファイル「abc.txt」をアップロードし、アップロード後に「xyz.txt」という名前を付ける場合、コマンドは次のようになります:
---------------- -------------------------------------------------- -- -----------
// Upload
ftp_put($conn, "xyz.txt", "abc.txt", FTP_ASCII);
?>
- -------------------------------------------------- -- ------------------------
ファイルをダウンロード:
PHP によって提供される関数は ftp_get() であり、これにもファイル名が必要ですサーバー 、ダウンロードされたファイル名、および転送タイプをパラメータとして指定します。たとえば、サーバー側のファイルは his.zip であり、それをローカル マシンにダウンロードして hers.zip という名前を付けたい場合、コマンドは次のとおりです。
------------------------------------------------------ ---------- ----------
// download
ftp_get($conn, "hers.zip ", "his.zip", FTP_BINARY) ;
?>
--------------------------------- ---------------- ---------------------------------- ------
PHP は転送モード FTP_BINARY と FTP_ASCII として 2 つのモードを定義しています。これら 2 つのモードの使用方法については、上記の 2 つの例を参照してください。詳細な説明については、この記事では詳しく説明しません。詳細については書籍を参照してください。
ファイルをリストするにはどうすればよいですか? (DIR を使用しますか? :) )
PHP には 2 つの方法があります。1 つは単にファイル名とディレクトリをリストする方法、もう 1 つはファイルのサイズ、権限、作成時間、その他の情報を詳細にリストする方法です。
最初の関数は ftp_nlist() 関数を使用し、2 番目の関数は ftp_rawlist() を使用します。どちらの関数もパラメーターとしてディレクトリ名を必要とし、配列の各要素は行に相当します。リストの。
------------------------------------------------- ----------------------------------
// ファイルリストを取得
$filelist = ftp_nlist ($conn , ".");
?>
------------------------------------- ------ --------------------------------------
あなたファイルサイズを知りたいはずです。心配しないでください。ここにある非常に簡単な関数 ftp_size() は、BITES を単位として指定したファイルのサイズを返します。 「-1」が返された場合は、これがディレクトリであることを意味することに注意してください。次の例では、この機能の適用例が示されています。
------------------------------------------------- ----------------------------------
// ファイル「data.」のファイルサイズを取得します。 zip"
$filelist = ftp_size($conn, "data.zip");
?>
さて、FTP に関連する多数の PHP 関数に触れてきましたが、これらは単なる関数であり、これらの機能の真の力を発揮するには、WEB 経由でファイルをアップロードおよびダウンロードできるプログラムを構築する必要があります。これが私たちが行うことです。
コードに入る前に、この例は PHP のさまざまな FTP 関数の使用法を説明するためのものであるということです。エラー分析など、多くの点で完璧ではありません。独自のプログラムに適用したい場合は、いくつかの変更を加える必要があります。
プログラムには以下のファイルが含まれています:
index.html - ログインファイル
actions.php - プログラムに必要な FTP コード
include.php - ファイルリストとコントロールボタンを表示するプログラムのメインインターフェース。
「index.html」から始めましょう:
-------------------------------------- ---------- -------------------------------------- ----------