1

Итак, у меня есть два сервера CentOS.

На сервере server1 у меня есть лог в каталоге /home/something/logs/latest.log

На сервере 2 у меня есть сервер apache, и я хочу, чтобы он читал журнал на сервере server1.

Мне нужно сделать это, потому что я хочу сделать консоль в реальном времени, отображая данные из журнала на сервере1

Я получу данные из журнала в одном файле PHP, а затем сделаю несколько ajax в другом файле, а затем у меня будет журнал в реальном времени.

Мои вопросы:

Как я могу прочитать файл с удаленного сервера с помощью php?

Кто-нибудь знает лучшее решение?

1 ответ1

4

Краткое посещение документации по PHP скажет вам, что это невероятно легко сделать :-)

Но в заключение, все, что вам нужно сделать, это:

$myfile = file_get_contents("http://server1/blah/blah/file.log");

Примечание: хотя ... чтобы это работало, вам понадобится доступ к этому файлу через веб-сервер, работающий на сервере server1, поскольку это статический файл, затем устанавливается что-то вроде NginX и просто помещается документ в корневой каталог по умолчанию (или указание корневого каталога по умолчанию на домашнюю папку) будет достаточно, чтобы вы могли использовать вызов PHP для получения содержимого файла.

Если размещение веб-сервера на сервере server1 НЕ является опцией, то по сути вы должны будете выполнить следующие шаги.

  • Подключитесь к server1, используя что-то вроде SSH/Telnet или одну из утилит удаленного копирования, или настройте FTP-сервер и укажите его в своей домашней папке.

  • Используйте один из многих методов подключения PHP (какой из них зависит от службы, которую вы выбрали выше)

  • Затем создайте сценарий, который подключается с использованием выбранного метода подключения на шаге 2, автоматизирует все необходимые параметры и выполняет подключение.

  • После подключения выполните все необходимые команды (в зависимости от используемого метода подключения), чтобы получить файл и его содержимое.

  • Отключите от сервера и обработайте файл.

При использовании SSH вам нужно будет использовать функции SSH2, встроенные в PHP (опять же, документы находятся на php.net), там есть документированный класс, который вы можете использовать.

Для Telnet аналогичная разница, но A) я бы не рекомендовал это и B) вам нужно было бы сделать много кода для поддержки протокола telnet через необработанные сокеты.

Что касается FTP, то в PHP (и в течение долгого времени) была включена поддержка FTP, но, как и в случае с веб-сервером, вам нужно будет установить и настроить FTP, затем защитить его и все такое прочее, если вы собираетесь сделайте это, тогда проще будет заставить его работать с веб-сервером.

Помимо этого, вы могли бы принять философию * nix для многих небольших инструментов и использовать exec и системные вызовы для запуска программ из вашего дистрибутива Linux, таких как 'rcopy', 'sftp' и многих других, но опять же, это довольно сложная задача, знать, что нужно автоматизировать, где и как.

У вас также есть возможность написать собственный сервер ad-hoc, который прослушивает сокет и отправляет журнал при установлении соединения.

Наконец, вы могли бы также предоставить общий доступ к папке, используя NFS или Samba, а затем просто использовать обычные вызовы открытия / чтения / закрытия файла, как если бы файл был локальным, но затем вам нужно настроить пользователей, общие ресурсы, аутентификацию и загрузить другие вещи.

Какой маршрут вы выберете, зависит от того, сколько работы вы готовы сделать, и какие ограничения вы делаете / не имеете, не позволяющие вам использовать любой из методов, описанных здесь.

Однако мой совет: зайдите на метод веб-сервера, используйте NginX, минимальный конфиг, закройте сервер файлов журнала за закрытыми дверями и позвольте php делать то, что у него хорошо получается, и захватите файл через http.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .