Controllo dei codici di stato FTP con uno script PHP
-
08-06-2019 - |
Domanda
Ho uno script che controlla le risposte dai server HTTP utilizzando le classi HTTP PEAR.Tuttavia, di recente ho scoperto che lo script fallisce sui server FTP (e probabilmente su tutto ciò che non è HTTP o HTTPS).Ho provato Google, ma non ho visto script o codici che restituissero il codice di stato del server da server diversi dai server HTTP.
Come posso scoprire lo stato di un newsgroup o di un server FTP utilizzando PHP?
MODIFICARE:Vorrei chiarire che mi interessa solo la possibilità di leggere da un server FTP e dalla directory che specifico.Ho bisogno di sapere se il server è morto/andato, non sono autorizzato a leggere, ecc.
Tieni presente che, sebbene la maggior parte delle volte sia indipendente dalla lingua, l'intero sito Web è basato su PHP, quindi una soluzione PHP sarebbe la migliore per una facile manutenibilità ed estensibilità in futuro.
Soluzione
Sfortunatamente, HTTP funziona in modo leggermente diverso rispetto a FTP.Sebbene entrambi possano apparire uguali nel tuo browser, HTTP funziona sulla base dell'URI (ad es.per accedere alla risorsa A, hai un identificatore che ti dice come accedervi).
FTP è gestito da server molto vecchia scuola.Anche l'FTP anonimo è un po' un trucco, dal momento che fornisci comunque un nome utente e una password, viene semplicemente definito come "anonimo" e il tuo indirizzo email.
Controllare se un server FTP è attivo significa controllare
Che puoi connetterti al server FTP
if (!($ftpfd = ftp_connect($hostname))) { ... }
Che puoi accedere al server:
if (!ftp_login($ftpfd, $username, $password)) { ... }
Quindi, se sono presenti ulteriori risorse sottostanti a cui è necessario accedere per verificare se un particolare sito è attivo, utilizzare un'operazione appropriata su di esse.per esempio.su un file, magari usare
ftp_mdtm()
per ottenere l'ora dell'ultima modifica o su una directory, vedere seftp_nlist()
lavori.
Altri suggerimenti
Non sarebbe più semplice utilizzare la funzionalità PHP FTP* integrata piuttosto che provare a crearne una propria?Se l'URI proviene da una fonte fuori dal tuo controllo, dovresti controllare la definizione del protocollo (http:// o ftp://, ecc.) per determinare quale funzionalità utilizzare, ma questo è abbastanza banale.Se ora è specificato il protocollo (dovrebbe davvero esserci!), allora potresti provare a impostare come predefinito http.
- Vedere Qui
Se vuoi leggere risposte specifiche dovrai aprire un socket e leggere/scrivere i dati manualmente.
<?php
$sock = fsockopen($hostname, $port);
?>
Quindi dovrai caricare/scaricare i dati avanti e indietro.
Ciò richiederà di leggere il protocollo FTP.