Проверить FTP-соединение с PHP

Я использую 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, и все они, похоже, выходят из строя. Тем не менее, он работает со всеми другими доменами, которые я пробовал. Их серверы блокируют запрос?

Просто выполните проверку, если ftp_nlist() является массивом.

Подобно:

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

Рекомендации:

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

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

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

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

Хотя я согласен с логикой в ​​принятом ответе от @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, если вы не можете запрограммировать повторное подключение снова 🙂

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

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

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

Привет, я пробовал это. Работать правильно.

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