PHP スクリプトを使用して FTP ステータス コードを確認する
-
08-06-2019 - |
質問
PEAR HTTP クラスを使用して HTTP サーバーからの応答をチェックするスクリプトがあります。ただし、最近、FTP サーバー (おそらく HTTP または HTTPS 以外のサーバー) でスクリプトが失敗することがわかりました。Google で調べてみましたが、HTTP サーバー以外のサーバーからサーバー ステータス コードを返すスクリプトやコードは見つかりませんでした。
PHP を使用してニュースグループまたは FTP サーバーのステータスを確認するにはどうすればよいですか?
編集:私が興味があるのは、FTP サーバーと指定したディレクトリから読み取る機能だけであることを明確にしておきます。サーバーが停止しているかどうか、読み取り権限がないかどうかなどを知る必要があります。
ほとんどの場合、私は言語に依存しませんが、Web サイト全体は PHP 駆動であるため、将来の保守性と拡張性を容易にするためには PHP ソリューションが最適であることに注意してください。
解決
ただし、残念ながら HTTP の動作は FTP とは若干異なります。ブラウザではどちらも同じように見えますが、HTTP は URI に基づいて機能します (つまり、リソース A にアクセスするには、そのアクセス方法を示す識別子が必要です)。
FTP は非常に古い学校のサーバー駆動です。匿名 FTP であっても、ユーザー名とパスワードを指定するのはちょっとしたハックであり、単に「匿名」と電子メール アドレスとして定義されるだけです。
FTP サーバーが起動しているかどうかを確認するということは、
FTPサーバーに接続できること
if (!($ftpfd = ftp_connect($hostname))) { ... }
サーバーにログインできること:
if (!ftp_login($ftpfd, $username, $password)) { ... }
次に、特定のサイトが稼働しているかどうかをテストするためにアクセスする必要があるさらに基盤となるリソースがある場合は、それらに対して適切な操作を使用します。例えばファイル上で、おそらく使用します
ftp_mdtm()
最終変更時刻またはディレクトリを取得するには、次のことを確認してください。ftp_nlist()
動作します。
他のヒント
独自の機能を開発するよりも、組み込みの PHP FTP* 機能を使用する方が簡単ではないでしょうか?URI が制御外のソースからのものである場合、どの機能を使用するかを決定するためにプロトコル定義 (http:// または ftp:// など) を確認する必要がありますが、それは非常に簡単です。プロトコルが指定されている場合 (実際に指定されているはずです!)、デフォルトで http を試してみることができます。
- 見る ここ
特定の応答を読みたい場合は、ソケットを開いてデータを手動で読み書きする必要があります。
<?php
$sock = fsockopen($hostname, $port);
?>
次に、データを前後に fput/fread する必要があります。
これには、FTP プロトコルについてよく読む必要があります。