I've been using the php ftp functions pretty extensively at work. We've recently discovered that some of the ftp servers we connect to, paticularly in Europe, are using extended passive mode. On a server using extended passive mode the php ftp functions will timeout. For those of you who encounter this, the solution is to send the command:
ftp_exec (conn_id, 'epsv4 off' );
Do this immediately after ftp_login and you should be fine.
ftp_exec
(PHP 4 >= 4.0.3, PHP 5)
ftp_exec — FTP サーバ上でのコマンドの実行をリクエストする
説明
bool ftp_exec
( resource $ftp_stream
, string $command
)
FTP サーバに SITE EXEC command リクエストを 送信します。
パラメータ
- ftp_stream
-
FTP 接続のリンク ID 。
- command
-
実行したいコマンド。
返り値
コマンドが成功した(サーバの応答コードが 200) 場合に TRUE を、それ以外の場合に FALSE を返します。
例
Example#1 ftp_exec() の例
<?php
// 変数を初期化します。
$command = 'ls -al >files.txt';
// 接続を確立します。
$conn_id = ftp_connect($ftp_server);
// ユーザ名とパスワードを指定してログインします。
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// コマンドを実行します。
if (ftp_exec($conn_id, $command)) {
echo "$command の実行に成功しました\n";
} else {
echo "$command の実行に失敗しました\n";
}
// 接続を閉じます。
ftp_close($conn_id);
?>
ftp_exec
chris dot pittman at sonopress dot com
15-Sep-2005 10:34
15-Sep-2005 10:34
sam at totallydigital dot co dot nz
16-Dec-2003 06:34
16-Dec-2003 06:34
A word of caution, execution via FTP isn't very widely supported. Check that it works on the servers that you intend to connect to before you start coding something that requires this.