Проверка кодов состояния FTP с помощью PHP-скрипта
-
08-06-2019 - |
Вопрос
У меня есть скрипт, который проверяет ответы от HTTP-серверов, используя PEAR HTTP-классы.Однако недавно я обнаружил, что скрипт завершается с ошибкой на FTP-серверах (и, вероятно, на всем, что не является HTTP или HTTPS).Я попробовал Google, но не увидел никаких скриптов или кода, которые возвращали код состояния сервера с серверов, отличных от HTTP-серверов.
Как я могу узнать статус группы новостей или FTP-сервера с помощью PHP?
Редактировать:Я должен уточнить, что меня интересует только возможность чтения с FTP-сервера и каталога, который я указываю.Мне нужно знать, не отключен ли сервер, у меня нет прав на чтение и т.д.
Пожалуйста, обратите внимание, что, хотя большую часть времени я не зависим от языка, весь веб-сайт управляется PHP, поэтому PHP-решение было бы лучшим для удобства обслуживания и расширяемости в будущем.
Решение
Хотя, к сожалению, HTTP работает немного иначе, чем FTP.Хотя оба могут выглядеть одинаково в вашем браузере, HTTP работает на основе URI (т.е.чтобы получить доступ к ресурсу A, у вас есть идентификатор, который сообщает вам, как получить к нему доступ).
FTP - это сервер очень старой школы, управляемый сервером.Даже анонимный FTP - это своего рода взлом, поскольку вы по-прежнему указываете имя пользователя и пароль, он просто определяется как "анонимный" и ваш адрес электронной почты.
Проверка работоспособности FTP-сервера означает проверку
Что вы можете подключиться к FTP-серверу
if (!($ftpfd = ftp_connect($hostname))) { ... }
Что вы можете войти на сервер:
if (!ftp_login($ftpfd, $username, $password)) { ... }
Затем, если есть дополнительные базовые ресурсы, к которым вам необходимо получить доступ, чтобы проверить, работает ли конкретный сайт, используйте соответствующую операцию над ними.например ,в файле, возможно, используйте
ftp_mdtm()
чтобы узнать время последнего изменения или в каталоге, посмотрите, есть лиftp_nlist()
работает.
Другие советы
Не проще ли было бы использовать встроенную функциональность PHP FTP *, чем пытаться создать свою собственную?Если URI поступает из источника, находящегося вне вашего контроля, вам нужно будет проверить определение протокола (http: // или ftp: // и т.д.), чтобы определить, какую функциональность использовать, но это довольно тривиально.Если теперь указан протокол (он действительно должен быть!), то вы могли бы попробовать установить по умолчанию http.
- видишь здесь
Если вы хотите прочитать конкретные ответы, вам придется открыть сокет и прочитать / записать данные вручную.
<?php
$sock = fsockopen($hostname, $port);
?>
Затем вам придется вводить / переносить данные туда и обратно.
Для этого вам потребуется ознакомиться с протоколом FTP.