- 2009年5月20日 7:11 PM
- PHP
PHP から簡単に FTP を利用できるようにするパッケージ「Net_FTP 」をインストールして、ちょっと使ってみたメモ。
インストールしたのは VMware fusion 上の Ubuntu Server 8.10。
最初に、さっきインストールしたばかりのホヤホヤの PEAR パッケージマネージャを使って Net_FTP をインストール。
$ sudo pear install –alldeps Net_FTP
downloading Net_FTP-1.3.7.tgz …
Starting to download Net_FTP-1.3.7.tgz (31,749 bytes)
………done: 31,749 bytes
install ok: channel://pear.php.net/Net_FTP-1.3.7
Ubuntu のどこに入ったのか調べてみると
/usr/share/php/data 配下だった。これも一応メモ。
現在のディレクトリと存在するファイル一覧を表示するスクリプト
(とくに php.ini のインクルードパスを編集しなくてもパッケージは読み込めた)
connect($host, $port);
$ret = $ftp->login($id, $pass);
if (!$ret) {
echo "ログインに失敗しました。";
exit;
}
// 現在のディレクトリを取得
$dir = $ftp->pwd();
echo "現在のディレクトリ:".$dir."
";
// ファイル一覧を取得
$files = $ftp->ls($dir);
echo "ファイル一覧";
print_r($files);
// 接続の切断
$ftp->disconnect();
?>
ディレクトリを作成してファイルをアップロードするサンプルコード
(FTP接続先にディレクトリを作成してファイルをアップロードする)
先述のコードの「現在のディレクトリを取得」と「接続の切断」の間に以下のコードを追加する。
mkdir("phpsamples");
if (!$ret) {
echo "ディレクトリの作成に失敗しました。";
} else {
echo "ディレクトリを作成しました。";
}
// ファイルのアップロード
$ret = $ftp->put("sample_file.txt", "phpsamples/sample_file.txt", false, FTP_ASCII);
// 第3引数は上書きするかどうか(true:する, false:しない)
// 第4引数は転送モード(テキスト転送:FTP_ASCII, バイナリ転送:FTP_BINARY)
// $ftp->putRecursive メソッドを使うことでディレクトリごとアップロードも可能
// $ftp->putRecursive("ローカルディレクトリのパス", "アップロード先のパス", 上書き設定, 転送モード);
if (!$ret) {
echo "ファイルのアップロードに失敗しました。";
} else {
echo "ファイルをアップロードしました。";
}
?>
ローカルの同じディレクトリ(この PHP コードと同じディレクトリ)にアップロードする sample_file.txt を用意してから、この PHP ファイルにブラウザでアクセス。
FTP 接続先のディレクトリに、phpsamples ディレクトリが作成され、その中に sample_file.txt がアップロードされているのを確認。
接続先のディレクトリを移動してからファイルをダウンロードする
最初のサンプルコードの「現在のディレクトリを取得」と「接続の切断」の間に以下のコードを追加する。
cd("phpsamples");
if (!$ret) {
echo "ディレクトリの移動に失敗しました。";
} else {
echo "ディレクトリを移動しました。";
}
// ファイルのダウンロード
$ret = $ftp->get("sample_file.txt", "sample_file2.txt", false, FTP_ASCII);
// 第3引数は上書きするかどうか(true:する, false:しない)
// 第4引数は転送モード(テキスト転送:FTP_ASCII, バイナリ転送:FTP_BINARY)
// $ftp->getRecursive メソッドを使うことでディレクトリごとダウンロードも可能
// $ftp->getRecursive("取得したいディレクトリのパス", "ダウンロード先のローカルのパス", 上書き設定, 転送モード);
if (!$ret) {
echo "ファイルのダウンロードに失敗しました。";
} else {
echo "ファイルをダウンロードしました。";
}
?>
FTP接続先にある phpsamples ディレクトリに移動し、その中にある sample_file.txt を sample_file2.txt として、ローカル(前述のスクリプトがあるディレクトリ)に保存する。でも、このままの状態ではファイルをローカルに保存できないので、保存できるようにディレクトリのパーミッションを変更する。(書き込み可能に)
$ cd /var/www/
$ chmod -R 777 supersample
こうした上でスクリプトを実行(php のスクリプトファイルにブラウザでアクセス)すると、ローカルの supersample ディレクトリ内に sample_file2.txt が保存されていることが確認できる。
ファイルを削除する
FTP接続先にあるファイルを削除する。以下のコードを、これまた一番最初のコードの「現在のディレクトリを取得」と「接続の切断」の間に追加する。
rm("phpsamples/sample_file.txt");
if (!$ret) {
echo "ファイルの削除に失敗しました。";
} else {
echo "ファイルを削除しました。";
}
?>
サンプルコードはPHPによるWebアプリケーションスーパーサンプル活用編 第2版内で解説されていたものを参照。
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://showzine.info/blog/2009/05/pearnet_ftp%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab.html/trackback
- トラックバックの送信元リスト
- PEAR::Net_FTPをインストール - SHOWJIN*BLOG より