PHPアプリケーションを開発および展開するとき、PHP環境がDockerコンテナで実行されているかどうかを知ることで、ターゲットを絞った最適化と微調整を行うことができます。通常、コンテナ化された環境は孤立したランタイム環境を提供するため、場合によってはPHPがDockerコンテナで実行されているかどうかを確認する必要があります。
この記事では、PHPのPHP_UNAME()関数を使用して、PHPがDockerコンテナで実行されているかどうかを判断する方法を紹介します。
PHP_UNAME()はPHPの組み込み関数であり、UNIXシステムのUnameコマンドと同様に、主にシステム情報を返すために使用されます。現在のシステムのオペレーティングシステム名、ホスト名、バージョン、その他の情報を返します。
関数の基本的な使用法は次のとおりです。
php_uname();
これにより、次のような文字列が返されます(オペレーティングシステムに応じて):
Linux myhostname 4.15.0-45-generic #48-Ubuntu SMP Thu Jan 17 16:24:23 UTC 2019 x86_64
この文字列には、オペレーティングシステムの種類、ホスト名、カーネルバージョンなどの情報が含まれています。
Dockerコンテナは通常、特定のカーネルバージョンを使用し、コンテナ内の/proc/1/cgroupファイルにはDocker関連の情報が含まれます。したがって、phpがphp_uname()を使用してphpがdockerにあるかどうかを直接判断することは容易ではありません。ただし、システムファイルを組み合わせることで判断できます。
php_uname() outputを表示します
まず、 php_uname()を使用して、オペレーティングシステム情報を出力します。
echo php_uname();
次のような出力が得られます。
Linux myhostname 5.4.0-100-generic #113-Ubuntu SMP Wed Nov 25 13:02:28 UTC 2020 x86_64
これは、PHPがDockerで実行されているかどうかを直接伝えません。さらに検証するには、Dockerコンテナの特性を確認する必要があります。
/proc/1/cgroupファイルと組み合わせます
Dockerコンテナのファイルシステムには通常、/proc/1/cgroupファイルが含まれており、このファイルにはDockerコンテナに関連する情報を見つけることができます。ファイルのコンテンツを検出することにより、Docker環境で実行されているかどうかを推測できます。
次のコードを使用して確認できます。
function isRunningInDocker() {
// 存在するかどうかを確認してください /proc/1/cgroup 書類
if (is_readable('/proc/1/cgroup')) {
$cgroup = file_get_contents('/proc/1/cgroup');
// 含むかどうかを判断します docker ロゴ
if (strpos($cgroup, 'docker') !== false) {
return true; // 走っています Docker 真ん中
}
}
return false; // 未走っています Docker 真ん中
}
if (isRunningInDocker()) {
echo "PHP 進行中 Docker 容器真ん中运行!";
} else {
echo "PHP 没有走っています Docker 容器真ん中。";
}
コードは/proc/1/cgroupファイルをチェックし、 Docker関連のタグがあるかどうかを探します。
ファイルにDocker識別文字列が含まれている場合、PHPがDockerコンテナで実行されていることを確認できます。
<?php
// 使用 php_uname() オペレーティングシステム情報を取得します
echo 'オペレーティングシステム情報: ' . php_uname() . "\n";
// あるかどうかを確認してください Docker 容器真ん中运行
function isRunningInDocker() {
if (is_readable('/proc/1/cgroup')) {
$cgroup = file_get_contents('/proc/1/cgroup');
if (strpos($cgroup, 'docker') !== false) {
return true; // はい Docker 環境
}
}
return false; // 不はい Docker 環境
}
if (isRunningInDocker()) {
echo "PHP 進行中 Docker 容器真ん中运行!";
} else {
echo "PHP 没有走っています Docker 容器真ん中。";
}
?>
上記の方法を介して、 php_uname()を使用してオペレーティングシステム情報を取得し、それを/proc/1/cgroupファイルのDocker関連タグをチェックして、PHPがDockerコンテナで実行されているかどうかを判断できます。これは、コンテナ化された環境で特定のアクションまたは微調整を実行するのに役立つきちんとした効果的な方法です。
この記事があなたを助けることを願っています!質問がある場合は、当社のウェブサイトをご覧ください。