使用PHP测试FTP连接

时间:2010-09-16 18:39:57

标签: 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服务器上的几个域上测试了它们,它们似乎都超时了。然而,它适用于我尝试过的所有其他领域。他们的服务器是否阻止了请求?

6 个答案:

答案 0 :(得分:25)

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();
}

答案 1 :(得分:14)

只需检查ftp_nlist()是否为数组。

像:

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

参考文献:

答案 2 :(得分:6)

嘿。我是新来的,所以也许发布这个迟到的答案是不受欢迎的,但它可能会帮助将来的人。

它不使用MediaTemple的原因是因为它们只接受被动连接。

使用ftp_login()登录后,只需致电ftp_pasv($ftp, TRUE);即可设置。

答案 3 :(得分:3)

你好我试过这个......工作正常。

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);

答案 4 :(得分:3)

虽然我同意@Jakub接受的回复调用ftp_nlist()并使用is_array()测试数据类型的逻辑,但这对于特别大的,膨胀的ftp目录来说可能非常缓慢和麻烦我正在研究的那些。我不喜欢创建一个空白目录只是为了测试,可以在以后重命名/删除,因为可能是另一个开发人员或者因为你忘了它放在那里的原因而被认为是不需要的。

我正在使用被动ftp连接,所以对于cron脚本的目的,可能需要很长时间才能执行并且可能需要重新连接,我使用这个来检测:

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

发出对ftp_pasv()的新调用将不会更改ftp连接的状态,但如果连接处于活动状态并且如果没有,则它将返回/ false,因此您可以编程重新连接: )

答案 5 :(得分:2)

请注意,当您无法连接时,您已经die,因此您可以假设您已连接。但是,您也可以使用以下方法检查连接状态:

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

ftp_connect:成功时返回FTP流,出错时返回FALSE。