dポイントプレゼントキャンペーン実施中!

下記のようなスクリプトでFTPダウンロードを試みています。
ダウンロード元はホスティング会社のサーバで、
ダウンロード先は私のWindowsPCになります。

接続から読み込みまで万事うまく行き、エラー表示もなく、
Successfully written to C:\test\backup.zip
というメッセージが表示されるところまでいくのですが、
C:\test\を開けてみると肝心のファイルが見当たりません。

サーバやPCの設定等もあるかもしれませんが、
どのような原因が考えられますでしょうか?

よろしくお願いいたします。


<スクリプト>

$local_file = "C:\\test\\backup.zip";
$server_file = "/tmp/backup.zip";

$conn_id = ftp_connect($ftpserver);

$login_result = ftp_login($conn_id, $usr, $pass);

ftp_pasv($conn_id, true);

if(ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)){
echo "Successfully written to {$local_file}";
} else {
echo "There was a problem";
}

ftp_close($conn_id);

A 回答 (2件)

>要するにローカルPCにサーバ上のファイルを保存するためには、


>ftp_getをローカルPCで実行しなくてはならないという理解でよろしいでしょうか?

そうですね。サーバ側のスクリプトを動かしたらローカルに勝手に(何の警告もなしに)ファイルが出来上がるようだと怖くて使えません。セキュリティ的にどう考えても無理だし、ましてサーバ側ではローカルPCのpathなんてわかりませんから、httpでダウンロードするにしても「ファイル名」しか指定出来ません(しかも「参考」程度の扱いですよね)。

ローカルPCにApacheとphpをインストールして、http://localhost/xxxxx.php にアクセスしてそのphpスクリプトがftp_getを実行することになりますが、そこまでしてftpクライアントを使わずにダウンロードする意味はないでしょう。
    • good
    • 0
この回答へのお礼

なるほど良く理解しました。
FTP関連の関数はなかなか個人では使う場面が限られそうな感じですね。

私が別にローカルにファイルサーバを持っているような場合に、
CRONなどで勝手に回しておくと便利な気がします。

ご丁寧なご回答ありがとうございました。
とりあえずは怠惰せずにHTTPでやっていきたいと思います。

お礼日時:2014/03/08 13:48

質問者さんのローカルPCで動いているFTPサーバは、外部から接続直後のカレントをどう設定されているんでしょうか?

この回答への補足

ちょっと私の書き方が悪かったかもしれません。
再度お伝えですが、LinuxサーバにあるデータをローカルPCに保存したいという内容です。

元々HTTPでZipをヘッダー出力してダウンロードしていたのですが、
FTPの方が軽いだろうと思って、FTP関数を使ってみようと思い立ちました。

ところが自分でいろいろ試してみて
ちょっとftp_getというものを勘違いしていたようです。

私はftp_getを使ったサーバ上のphpをブラウザで実行すれば、
サーバ上のファイルがローカルにDLされるような、
HTTPによるヘッダー出力のような動作を想定していましたが、
どうやらftp_getはphpを実行する場所にDLするものだと理解しました。

質問時のスクリプトを動かしてみた結果の$local_fileは
サーバ上のphpファイルのあるディレクトリに
C:\test\backup.zipという名前のファイルでできていました。

要するにローカルPCにサーバ上のファイルを保存するためには、
ftp_getをローカルPCで実行しなくてはならないという理解でよろしいでしょうか?

もしそうであれば、HTTPでDLした方が良いですね。。。

補足日時:2014/03/08 01:30
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!