
Portanto, tenho dois servidores CentOS.
No server1 eu tenho um log no diretório/home/something/logs/latest.log
No server2 eu tenho meu servidor apache e quero que ele leia o log no server1.
Preciso fazer isso porque quero fazer um console em tempo real, exibindo dados do log no server1
Vou pegar os dados do log em um arquivo PHP e depois fazer um pouco de ajax em outro arquivo e então terei um log em tempo real.
Minhas perguntas:
Como posso ler um arquivo de um servidor remoto com php?
Alguém conhece uma solução melhor?
Responder1
Uma rápida visita à documentação do PHP lhe dirá que é incrivelmente fácil de fazer :-)
Mas, em resumo, tudo que você precisa fazer é:
$myfile = file_get_contents("http://server1/blah/blah/file.log");
Nota: porém... para que isso funcione, você precisará que esse arquivo esteja acessível, através de um servidor web rodando no server1, já que é um arquivo estático, então instale algo como NginX e apenas coloque o documento na raiz padrão (ou apontar a raiz padrão para a pasta inicial) será suficiente para permitir que você use a chamada get file content do PHP.
Se colocar um servidor web no server1 NÃO for uma opção, então essencialmente você terá que seguir estas etapas.
Conecte-se ao servidor1 usando algo como SSH/Telnet ou um dos utilitários de cópia remota ou configure um servidor FTP e aponte-o para sua pasta pessoal.
Use um dos vários métodos de conexão do PHP (qual deles depende do serviço que você escolheu acima)
Em seguida, crie um script que se conecte usando o método de conexão selecionado na etapa 2, automatize todos os parâmetros necessários e conecte-se.
Uma vez conectado, emita todos os comandos necessários (dependendo do método de conexão usado) para capturar o arquivo e seu conteúdo.
Desconecte-se do servidor e processe o arquivo.
Com o SSH, você precisará usar as funções SSH2 incorporadas ao PHP (novamente, os documentos estão no php.net), há uma classe documentada lá que você pode usar.
Para Telnet, diferença semelhante, mas A) eu não recomendaria e B) você precisaria fazer muito código para suportar o protocolo telnet em soquetes brutos.
Para FTP, bem, o PHP tem (e tem há muito tempo) suporte FTP integrado, mas como acontece com um servidor web, você precisará instalar e configurar o FTP, depois protegê-lo e todo esse jazz, se você for faça isso, será mais fácil fazê-lo funcionar com um servidor web.
Além disso, você poderia adotar a filosofia *nix de muitas ferramentas pequenas e usar chamadas exec e de sistema para executar programas da sua distribuição Linux, como 'rcopy', 'sftp' e muitos outros, mas, novamente, isso é uma tarefa e tanto, saber o que automatizar, onde e como.
Você também tem a opção de escrever seu próprio servidor ad-hoc, que escuta em um soquete e envia o log quando uma conexão é feita.
Por último, você também pode compartilhar uma pasta usando NFS ou Samba e, em seguida, usar chamadas normais de abertura/leitura/fechamento de arquivo como se o arquivo fosse local, mas então você precisa configurar usuários, compartilhamentos, autenticação e uma carga de outras coisas.
O caminho que você segue depende de quanto trabalho você está disposto a fazer e quais restrições você tem/não o impedem de usar qualquer um dos métodos descritos aqui.
Meu conselho, porém, é usar o método do servidor web, usar NginX, configuração mínima, selar o servidor de arquivos de log a portas fechadas e deixar o php fazer o que é bom e pegar o arquivo por http.