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


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

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

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

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

Author: Stu Thompson, 2008-08-12

3 answers

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
Author: Philip Reynolds, 2012-05-08 09:17:01

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

 0
Author: ZombieSheep, 2008-08-12 12:19:34

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

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

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

 0
Author: UnkwnTech, 2008-08-12 17:56:54