Ответ 1
Просто выполните проверку, если ftp_nlist()
- массив.
Как
echo is_array(ftp_nlist($con, ".")) ? 'Connected!' : 'not Connected! :(';
Литература:
Я использую PHP script ниже для проверки 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
ing, когда вы не можете подключиться, поэтому вы можете предположить, что вы подключены. Однако вы также можете проверить статус соединения, используя:
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);