web-dev-qa-db-ja.com

PHP)でFTP接続をテストします

以下のPHPスクリプトを使用してFTP接続をテストしています。現在、接続に成功すると、ファイルの配列を出力しています。

接続できる場合、どうすればメッセージも表示できますか? 「接続成功」のように。

$con = ftp_connect($server) or die("Couldn't connect"); 
ftp_login($con,  $username,  $password);
print_r(ftp_nlist($con, "."));
ftp_close($con);

[〜#〜]編集[〜#〜]

現在は動作していますが、MediaTempleサーバーにあるいくつかのドメインでこれをテストしましたが、すべてタイムアウトしているようです。それでも、私が試した他のすべてのドメインで動作します。サーバーはリクエストをブロックしていますか?

19
Batfan

ftp_nlist()が配列であるかどうかを確認するだけです。

お気に入り:

echo is_array(ftp_nlist($con, ".")) ? 'Connected!' : 'not Connected! :(';

参照:

14
Jakub

Ftp_connect()とftp_login()はどちらも、成功を示すブール値を返します。したがって、私が適切に解釈している場合、このようなものはあなたが望むことをするはずです:

try {
    $con = ftp_connect($server);
    if (false === $con) {
        throw new Exception('Unable to connect');
    }

    $loggedIn = ftp_login($con,  $username,  $password);
    if (true === $loggedIn) {
        echo 'Success!';
    } else {
        throw new Exception('Unable to log in');
    }

    print_r(ftp_nlist($con, "."));
    ftp_close($con);
} catch (Exception $e) {
    echo "Failure: " . $e->getMessage();
}
25
mr. w

ねえ。私はここで新しいので、この遅い答えを投稿することは歓迎されないかもしれませんが、それは将来人々を助けるかもしれません。

MediaTempleで機能しない理由は、パッシブ接続のみを受け入れるためです。

ftp_login()でログインした後、ftp_pasv($ftp, TRUE);を呼び出すだけで、設定が完了します。

6
simshaun

ftp_nlist()を呼び出し、is_array()を使用してデータ型をテストするという、@ Jakubからの受け入れられた回答のロジックに同意しますが、これは非常に遅く、特に大きくて肥大化したftpディレクトリでは扱いにくい場合があります。私が現在取り組んでいるもの。また、テストのためだけに空白のディレクトリを作成するというアイデアは好きではありません。このディレクトリは、おそらく別の開発者によって、またはその配置場所を忘れたために、不要と見なされた後で名前を変更したり削除したりできます。

私はパッシブftp接続を使用しているので、実行に時間がかかり、再接続が必要になる可能性のあるcronスクリプトでの目的のために、これを使用して検出します。

_function check_connection_status($conn_id) {
    return ftp_pasv($conn_id, true);
}
_

ftp_pasv()を新たに呼び出しても、ftp接続の状態は変更されませんが、接続がアクティブな場合はtrueに応答し、アクティブでない場合はログイン/ falseと応答するため、再接続するようにプログラムできます:)

3
ajmedway

こんにちは私はこれを試しました..正しく動作しています。

set_time_limit(300);//for setting 
$path='/'.date('dmY').'';
$ftp_server='';
$ftp_server_port="";
$ftp_user_name='';
$ftp_user_pass="";

// set up a connection to ftp server
$conn_id = ftp_connect($ftp_server, $ftp_server_port); 
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// check connection and login result
if ((!$conn_id) || (!$login_result)) { 
    echo "Fail</br>";
} else {
    echo "Success</br>";
    // enabling passive mode
    ftp_pasv( $conn_id, true );
    // get contents of the current directory
    $contents = ftp_nlist($conn_id, $path);
    // output $contents
    var_dump($contents);
}

// close the FTP connection
ftp_close($conn_id);
3
Amar Jeet

接続に失敗したときはすでにdieingしているので、接続されていると見なすことができます。ただし、以下を使用して接続のステータスを確認することもできます。

echo $con !== FALSE ? 'Connected' : "Couldn't connect";

ftp_connect:成功した場合はFTPストリームを返し、エラーの場合はFALSEを返します。

2
Dolph