2008-08-12 8 views
5

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

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

EDIT: Я должен уточнить, что меня интересует только возможность чтения с FTP-сервера и каталога, который я указываю. Мне нужно знать, мертв или нет сервер, я не уполномочен читать и т. Д.

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

ответ

2

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().

+0

Следует отметить, что по умолчанию эти функции FTP не включены при компиляции PHP, по крайней мере, в системах, которые я использовал. – 2008-10-03 22:16:06

0

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

0

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

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

Затем вам нужно будет fput/fread данные взад и вперед.
Для этого вам потребуется прочитать протокол FTP.