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

StackOverflow https://stackoverflow.com/questions/8726

Вопрос

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

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

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

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

Это было полезно?

Решение

Хотя, к сожалению, 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() работает.

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top