所以我有两台 CentOS 服务器。
在 server1 上,我在目录中有一个日志/home/something/logs/latest.log
在server2上我有我的apache服务器,我希望它读取server1上的日志。
我需要这样做是因为我想制作一个实时控制台,显示来自 server1 上的日志的数据
我将从一个 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 的众多连接方法之一(具体哪一种取决于您上面选择的服务)
然后创建一个脚本,使用步骤 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 获取文件。