Проверка кодов состояния FTP с помощью PHP-скрипта
У меня есть скрипт, который проверяет ответы с HTTP-серверов, используя HTTP-классы PEAR. Однако недавно я обнаружил, что сценарий не работает на FTP-серверах (и, возможно, на всех, кроме HTTP или HTTPS). Я попробовал Google, но не увидел никаких сценариев или кода, которые возвращали код состояния сервера с серверов, отличных от HTTP-серверов.
Как я могу узнать статус группы новостей или FTP-сервера с помощью PHP?
РЕДАКТИРОВАТЬ: Я должен уточнить, что меня интересует только способность для чтения с FTP-сервера и каталога, который я указываю. Мне нужно знать, если сервер мертв/исчез, я не авторизован для чтения и т.д.
Пожалуйста, обратите внимание, что, хотя большую часть времени я не знаю языка, весь веб-сайт управляется PHP, поэтому решение PHP было бы лучшим для удобства обслуживания и расширения в будущем.
3 answers
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.