Проверка кодов состояния FTP с помощью PHP-скрипта

У меня есть скрипт, который проверяет ответы от HTTP-серверов, используя классы PEAR HTTP. Однако недавно я обнаружил, что скрипт не работает на FTP-серверах (и, вероятно, на всех, что не HTTP или HTTPS). Я попробовал Google, но не увидел ни одного скрипта или кода, которые бы возвращали код состояния сервера с серверов, отличных от HTTP-серверов.

Как узнать статус группы новостей или FTP-сервера, использующего PHP?

РЕДАКТИРОВАТЬ: я должен уточнить, что меня интересует только возможность чтения с FTP-сервера и директории, которую я указываю. Мне нужно знать, не работает ли сервер / нет, я не авторизован для чтения и т. Д.

Обратите внимание, что, хотя в большинстве случаев я не зависим от языка, весь веб-сайт работает на PHP, поэтому решение PHP будет лучшим для удобства сопровождения и расширения в будущем.

12.08.2008 12:07:15
3 ОТВЕТА
РЕШЕНИЕ

HTTP работает немного иначе, чем FTP, хотя, к сожалению. Хотя оба могут выглядеть одинаково в вашем браузере, HTTP работает на основе URI (то есть для доступа к ресурсу A у вас есть идентификатор, который говорит вам, как получить к нему доступ).

FTP очень старый школьный сервер. Даже анонимный FTP - это что-то вроде взлома, так как вы по-прежнему предоставляете имя пользователя и пароль, он просто определяется как «анонимный» и ваш адрес электронной почты.

Проверка работоспособности FTP-сервера означает проверку

  1. Что вы можете подключиться к FTP-серверу

    if (!($ftpfd = ftp_connect($hostname))) { ... }

  2. Чтобы вы могли войти на сервер:

    if (!ftp_login($ftpfd, $username, $password)) { ... }

  3. Затем, если есть дополнительные базовые ресурсы, к которым вам нужно получить доступ для проверки работоспособности определенного сайта, используйте соответствующую операцию для них. например, для файла, возможно, используйте ftp_mdtm()для получения последнего измененного времени или для каталога, посмотрите, ftp_nlist()работает ли .

3
8.05.2012 09:17:01
Следует отметить, что по умолчанию эти функции FTP не включены при компиляции PHP, по крайней мере, в системах, которые я использовал.
Thomas Owens 3.10.2008 22:16:06

Не проще ли использовать встроенную функцию PHP FTP *, чем пытаться накатить свою собственную? Если URI исходит из источника, находящегося вне вашего контроля, вам необходимо проверить определение протокола (http: // или ftp: // и т. Д.), Чтобы определить, какую функциональность использовать, но это довольно тривиально. Если сейчас указан протокол (он действительно должен быть!), То вы можете попробовать использовать http по умолчанию.

0
12.08.2008 12:19:34

Если вы хотите прочитать конкретные ответы, вам придется открыть сокет и читать / записывать данные вручную.

<?php
$sock = fsockopen($hostname, $port);
?>

Тогда вам придется fput / fread данных взад и вперед.
Это потребует от вас чтения протокола FTP.

0
12.08.2008 17:56:54