PHP - Чтение файла с удаленного сервера

PHP - Чтение файла с удаленного сервера

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

На сервере1 у меня есть журнал в каталоге/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, поскольку это статический файл, то установки чего-то вроде NginX и простого размещения документа в корневом каталоге по умолчанию (или указания корневого каталога по умолчанию на домашнюю папку) будет достаточно, чтобы вы могли использовать вызов PHP get file content.

Если размещение веб-сервера на сервере 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.

Связанный контент