Проверьте FTP-соединение с PHP - PullRequest
18 голосов
/ 16 сентября 2010

Я использую скрипт PHP ниже для проверки FTP-соединений. В настоящее время он печатает массив файлов, если он успешно подключается.

Как я могу заставить его также отображать сообщение, если он может подключиться? Как «Соединение установлено».

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

EDIT

У меня это работает сейчас, но я проверил это на нескольких доменах, которые у меня есть на сервере MediaTemple, и они, похоже, истекают. Тем не менее, он работает со всеми другими доменами, которые я пробовал. Их серверы блокируют запрос?

Ответы [ 6 ]

25 голосов
/ 16 сентября 2010

Оба 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();
}
14 голосов
/ 16 сентября 2010

Просто проверьте, является ли ftp_nlist() массивом.

Как:

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

Ссылки:

6 голосов
/ 22 ноября 2010

Эй.Я новичок здесь, поэтому, возможно, публикация этого позднего ответа нежелательна, но может помочь людям в будущем.

Причина, по которой он не работает с MediaTemple, заключается в том, что они принимают только пассивные соединения.

После входа в систему с помощью ftp_login() просто позвоните ftp_pasv($ftp, TRUE); и все будет настроено.

3 голосов
/ 23 июня 2016

Хотя я согласен с логикой в ​​принятом ответе от @Jakub вызова ftp_nlist() и проверки типа данных с помощью is_array(), это может быть очень медленным и громоздким с особенно большими, раздутыми каталогами ftp, такими как те, которыми я сейчас являюсь работа над. И мне не нравится идея создания пустой директории только для тестирования, которую позже можно переименовать / удалить, поскольку она считается ненужной, возможно, другим разработчиком или потому, что вы забыли, для чего она там была размещена.

Я использую пассивное ftp-соединение, поэтому для моих целей в сценариях cron, выполнение которых может занять много времени и потенциально может потребоваться переподключение, я обнаруживаю это:

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

Повторный вызов ftp_pasv() не изменит состояния соединения ftp, но он ответит true, если соединение активно, и вошел в систему / false, если нет, вы можете запрограммировать повторное соединение:)

3 голосов
/ 30 января 2016

Здравствуйте, я пробовал это .. Работать правильно.

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);
2 голосов
/ 16 сентября 2010

Обратите внимание, что вы уже die когда вы не можете подключиться, поэтому вы можете предположить, что вы подключены Однако вы также можете проверить состояние соединения, используя:

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

ftp_connect: возвращает поток FTP в случае успеха или FALSE в случае ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...