Проверка кодов состояния FTP с помощью PHP-скрипта - PullRequest
5 голосов
/ 12 августа 2008

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 12 августа 2008

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 голосов
/ 12 августа 2008

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

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

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

0 голосов
/ 12 августа 2008

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

...