
つまり、CentOS サーバーが 2 台あります。
server1のディレクトリにログがあります/home/something/logs/latest.log
server2 に Apache サーバーがあり、server1 のログを読み取るようにしたいと考えています。
これを実行する必要があるのは、サーバー1のログからデータを表示するリアルタイムコンソールを作成したいからです。
1 つの PHP ファイルでログからデータを取得し、別のファイルで Ajax を実行して、リアルタイム ログを取得します。
私の質問:
PHP を使用してリモート サーバーからファイルを読み取るにはどうすればよいですか?
もっと良い解決策を知っている人はいますか?
答え1
PHP のドキュメントをちょっと見れば、それが信じられないほど簡単であることがわかります :-)
しかし、要約すると、必要なのは次のことだけです。
$myfile = file_get_contents("http://server1/blah/blah/file.log");
注: ただし、これが機能するには、そのファイルが静的ファイルであるため、server1 で実行されている Web サーバー経由でアクセス可能である必要があります。その後、NginX などをインストールし、ドキュメントをデフォルトのルートに配置する (またはデフォルトのルートをホーム フォルダーにポイントする) だけで、PHP のファイル コンテンツの取得呼び出しを使用できるようになります。
server1 に Web サーバーを配置できない場合は、基本的に次の手順に従う必要があります。
SSH/Telnet などのツールやリモート コピー ユーティリティを使用して server1 に接続するか、FTP サーバーをセットアップしてホーム フォルダーを指定します。
PHP の多くの接続方法の 1 つを使用します (どれを使用するかは、上記で選択したサービスによって異なります)
次に、手順 2 で選択した接続方法を使用して接続し、必要なパラメータを自動化して接続するスクリプトを作成します。
接続したら、(使用する接続方法に応じて)必要なコマンドを発行して、ファイルとその内容を取得します。
サーバーから切断してファイルを処理します。
SSH を使用する場合は、PHP に組み込まれている SSH2 関数を使用する必要があります (繰り返しますが、ドキュメントは php.net にあります)。そこにドキュメント化されたクラスがあり、それを使用できます。
Telnet の場合も同様の違いがありますが、A) お勧めしません。また、B) 生のソケットを介して Telnet プロトコルをサポートするには、大量のコードを実行する必要があります。
FTP については、PHP には (かなり前から) FTP サポートが組み込まれていますが、Web サーバーと同様に、FTP をインストールしてセットアップし、セキュリティ保護するなどといった作業が必要になります。この作業を行う場合は、Web サーバーで動作させる方が簡単です。
それ以外にも、多くの小さなツールの *nix 哲学を採用し、exec およびシステム コールを使用して、Linux ディストリビューションから 'rcopy'、'sftp' などのプログラムを実行することもできますが、何をどこでどのように自動化するかを知るのは非常に困難な作業です。
また、ソケットをリッスンし、接続が確立されたときにログを送信する独自のアドホック サーバーを作成することもできます。
最後に、NFS または Samba を使用してフォルダーを共有し、ファイルがローカルであるかのように通常のファイルのオープン/読み取り/クローズ呼び出しを使用することもできますが、その場合はユーザー、共有、認証、その他多くのものを設定する必要があります。
どちらのルートを選択するかは、どの程度の作業を行う意思があるか、また、ここで概説した方法のいずれかを使用することを妨げる制限があるかどうかによって決まります。
ただし、私のアドバイスとしては、Web サーバー方式を採用し、NginX を使用し、最小限の構成で、ログ ファイル サーバーを密室に隔離し、PHP に得意なことを実行させて、http 経由でファイルを取得することです。