Verificando códigos de status de FTP com um script PHP
-
08-06-2019 - |
Pergunta
Eu tenho um script que verifica as respostas dos servidores HTTP usando as classes HTTP PEAR.No entanto, descobri recentemente que o script falha em servidores FTP (e provavelmente em qualquer coisa que não seja HTTP ou HTTPS).Tentei o Google, mas não vi nenhum script ou código que retornasse o código de status do servidor de servidores diferentes de servidores HTTP.
Como posso descobrir o status de um grupo de notícias ou servidor FTP usando PHP?
EDITAR:Devo esclarecer que estou interessado apenas na capacidade de ler de um servidor FTP e do diretório que eu especificar.Preciso saber se o servidor está morto/desaparecido, não estou autorizado a ler, etc.
Observe que, embora na maioria das vezes eu seja agnóstico quanto ao idioma, todo o site é baseado em PHP, portanto, uma solução PHP seria a melhor para facilitar a manutenção e a extensibilidade no futuro.
Solução
Infelizmente, o HTTP funciona de maneira um pouco diferente do FTP.Embora ambos possam parecer iguais no seu navegador, o HTTP funciona com base no URI (ou seja,para acessar o recurso A, você tem um identificador que informa como acessá-lo).
FTP é um servidor muito antigo.Mesmo o FTP anônimo é um pouco hackeado, já que você ainda fornece um nome de usuário e uma senha, é apenas definido como “anônimo” e seu endereço de e-mail.
Verificar se um servidor FTP está ativo significa verificar
Que você pode se conectar ao servidor FTP
if (!($ftpfd = ftp_connect($hostname))) { ... }
Que você pode fazer login no servidor:
if (!ftp_login($ftpfd, $username, $password)) { ... }
Então, se houver outros recursos subjacentes que você precisa acessar para testar se um site específico está ativo, use uma operação apropriada neles.por exemplo.em um arquivo, talvez use
ftp_mdtm()
para obter a hora da última modificação ou em um diretório, veja seftp_nlist()
funciona.
Outras dicas
Não seria mais simples usar a funcionalidade PHP FTP* integrada do que tentar criar a sua própria?Se o URI vier de uma fonte fora do seu controle, você precisará verificar a definição do protocolo (http:// ou ftp://, etc) para determinar qual funcionalidade usar, mas isso é bastante trivial.Se agora houver um protocolo especificado (realmente deveria haver!), você poderá tentar o padrão http.
- ver aqui
Se você quiser ler respostas específicas, terá que abrir um soquete e ler/gravar dados manualmente.
<?php
$sock = fsockopen($hostname, $port);
?>
Então você terá que transferir/fread os dados para frente e para trás.
Isso exigirá que você leia sobre o protocolo FTP.