PHPはnginxのログファイルを定期的に監視する機能を実装しています
この記事では、PHP による nginx サーバー ログの定期的な読み取りと、curl ベースのデータ送信関連の操作テクニックを含む、PHP による nginx ログ ファイルの定期的な監視の簡単な実装を主に紹介します。必要な方は、この記事を参照してください。
この例では、PHP が nginx ログ ファイルを定期的に監視する機能を簡単に実装する方法を説明します。参考までに皆さんと共有してください。詳細は次のとおりです。
この機能は、nginx によって生成されるログ データを定期的に監視し、新しいデータをインターフェイス (ビッグ データ インターフェイスなど) に送信することで、
define("MAX_SHOW", 8192*5); //新增数据提交阈值 define("LOG_NAME", ""); //读取的日志文件 define("LOG_SIZE", ""); //保留上次读取的位置 define("LOG_URL", ""); //日志提交地址 //运行时log文件原始大小 $log_size = get_filesize(); $file_size = filesize(LOG_NAME); if(empty($log_size)){//没有记录上次位置,则从当前位置开始 $file_size = $file_size; }else if($log_size > $file_size){ //说明是第二天的日志文件,指针放到文件头 $file_size = 0; }else{ //从上次记录的位置开始 $file_size = $log_size; } $file_size_new = 0; $add_size = 0; $ignore_size = 0; $fp = fopen(LOG_NAME, "r"); while(1){ clearstatcache(); $read_num = 0; $file_size_new = filesize(LOG_NAME); $add_size = $file_size_new - $file_size; $add_data = array(); $add_log = ''; if($add_size > 0){ //大于一个阈值提交数据 if($add_size > MAX_SHOW){ fseek($fp, $file_size); //当增加量超过8192,需要分页读取增加量 $page = ceil($add_size/8192); for($i=1; $i<=$page; $i++){ if($i == $page){//最后一页 $end_add = $add_size - ($page -1) * 8192; $add_log .= fread($fp, $end_add); }else{ $add_log .= fread($fp, 8192); $file_size_step = $file_size + $i * 8192; fseek($fp, $file_size_step); } } $add_data['add_log'] = $add_log; $add_data['add_log'] = base64_encode($add_data['add_log']); http_post(LOG_URL, $add_data); $file_size = $file_size_new; //记录当前位置 save_filesize($file_size); } }else if($add_size < 0){ //第二天从头部开始 $file_size = 0; } sleep(2); } fclose($fp); /** * 每次启动时获取上次打开文件位置 */ function get_filesize(){ $size = file_get_contents(LOG_SIZE); return $size; } /** * 每次提交后保存这次读取文件的位置 */ function save_filesize($size){ return file_put_contents(LOG_SIZE, $size); } /** * http请求 * @param array $data * @return boolean */ function http_post($url = '', $data = array()) { if(empty($url)){ return FALSE; } if($data){ $data = http_build_query($data); } $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_setopt ( $ch, CURLOPT_POST, 1 ); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch, CURLOPT_TIMEOUT, 5 ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); $return = curl_exec ( $ch ); curl_close ( $ch ); return $return; }
注: 早朝以降にログファイルがカットされるため、判断が必要です。翌日のログをログから取得する必要があります。ファイル ヘッダーの読み取り
最適化する必要があるロジック: 中間プロセスがハングし、一定期間停止し、その後再開されると、読み取りが行われます。送信されるデータは比較的大きいため、送信されるデータ サイズの制限を超える可能性があります。
以上がこの記事の全内容であり、皆様の学習に役立つことを願っています。その他の関連コンテンツについては、PHP 中国語 Web サイトにご注目ください。
関連する推奨事項:
PHP が zlib 拡張機能を使用して GZIP 圧縮出力を実装する方法の詳細な説明
PHP は分散型 memcache を実装します設定 Web クラスターのセッション同期方法の詳細説明
##PHP で実装された mongoDB データベース操作クラスの完全な例の説明
##
以上がPHPはnginxのログファイルを定期的に監視する機能を実装していますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています
