ホームページ  >  記事  >  バックエンド開発  >  PHP FTP学習(1) [Osoより転載]_PHPチュートリアル

PHP FTP学習(1) [Osoより転載]_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 16:10:11681ブラウズ


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」から始めましょう:
-------------------------------------- ---------- -------------------------------------- ----------
















サーバー


;
<入力タイプ=パスワード名=パスワード>

--------------------- ------------------------ -------------------------------------- ------------------------ -----
これは、サーバー名、ユーザー名、パスワード、入力ボックスを備えたログイン フォームです。入力した変数は $server、$username、$password 変数に保存されます。フォームが送信されると、actions.php が呼び出され、FTP 接続が初期化されます。

「hidden」は、値 CWD を持つ変数 $action として action.php に渡されることに注意してください。


これは action.php ファイルのソース コードです:
---------------------------------- ------ -------------------------------------------- ------

< ;head>







//フォームから送信されたデータを確認してください。不完全な場合はエラーが報告されます。プログラムを改善したい場合は、より完全な入力が必要です。検出機能はこちら
if (!$server
!$username
!$password)
{
echo "不完全なデータを送信してください!";
}
else
{
// 読み続けてください
}

?>

< ;/body>

-------------------------- ------------- -------------------------------------- ------------------------ -----


次は変数「actions」です。このプログラムでは次のアクションが可能です:

"action=CWD"

作業ディレクトリを変更します

"action =Delete"

指定されたファイルを削除します

"action=Download"

指定されたファイルをダウンロードします

"action=Upload"

指定されたファイルをアップロードします

ファイル include.php を注意深く確認すると、HTML インターフェースが含まれています。多くのフォームがあり、それぞれが特定の関数を指しています。各フォームにはフィールド (通常は非表示) が含まれており、フォームが送信されると、対応する関数が実行されます。

例:「削除」を押すと、「actions.php」に「action=Delete」が送信されます

これら4つの機能を動作させるために、actions.php内のコードは次のようになります:
---- ----- -------------------------------------- ----- ---------------------
// アクション: ディレクトリを変更
if ($action == "CWD")
{
// 特定のコード
}

// アクション: ファイルを削除
else if ($action == "削除")
{
// 特定のコード
}
// アクション: ファイルをダウンロード
else if ($action = = "ダウンロード")
{
// 特定のコード
}
// アクション: ファイルをアップロード
else if ($action == "アップロード")
{
// 特定のコード
}

?>
-- ---------------------------------------------------- ---- -----------------------
上記の特定のコードは、指定された関数を実装し、ループを終了します。これらにはすべて、次の手順が含まれます。
--- ---------------------------------------------- ---- -----------------------------
カスタマイズされた関数
connect() を使用して FTP サーバーに接続し、ログインします。 ;

適切なディレクトリへの指示

選択した関数を実行します

リストを更新して変更の結果を確認します

include("include.php") を通じてファイルリストとコントロールボタンを表示します

接続を閉じます
------------------------ ------------------------ -------------------------- ------------------
注意:
以下関数は複数ファイル操作、つまり FOR ループを使用して実装される「action=Delete」と「action=Download」をサポートします。
変数 $cdir と $here は各段階でリアルタイムに更新されます。


http://www.bkjia.com/PHPjc/314331.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/314331.html技術記事 By Vikram Vaswani Melonfire 2000 年 11 月 7 日 私たちは PHP の忠実なファンのグループです。Web サイトの開発、描画、データベース接続など、さまざまな目的で PHP を使用しています。...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。