この記事では、現在の PHP スクリプト実行時のシステム情報に関連する機能について詳しく説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。
PHP を実行すると、実際に現在のシステムに関連する多くの情報を取得できます。多くのオープンソース CMS と同様に、通常、インストール中に環境情報が検出され、この情報は簡単かつ動的に取得できます。
まず、現在のシステムに関連するユーザー情報を取得する方法を見てみましょう。このユーザー情報は、php スクリプトを実行するときにシステムによって使用されるシステム ユーザーです。
rreeee見ましたか?実際、これら 3 つの関数は、Linux のファイル所有者とグループに対応します。get_current_user() はユーザー名を返し、getmyuid() はユーザーの UID を返します。これら 2 つは同じユーザーに対応します。 getmygid() は、現在のユーザーが属するユーザー グループを返します。
この一連の関数を使用すると、システムの innode 情報、現在のスクリプトのプロセス ID を取得できます。実行時、サービス インターフェイスの種類、オペレーティング システム情報、および PHP が実行されているリソースの使用状況。
echo '当前脚本拥有者:' . get_current_user(), PHP_EOL; // 当前脚本拥有者:zhangyue echo '当前脚本属组:' . getmygid(), PHP_EOL; // 当前脚本属组:20 echo '当前脚本的用户属主:' . getmyuid(), PHP_EOL; // 当前脚本的用户属主:501
コメントから、getmypid() はコマンド ラインを使用する場合は現在の実行のプロセス ID を返し、Web ページでアクセスする場合は PHP-FPM のプロセス ID を返すことがわかります。同様に、php_sapi_name() も、現在の実行環境に応じて異なるコンテンツを返します。
php_uname() デフォルトのパラメータは「a」で、完全なオペレーティング システム情報を返すことを意味します。また、別個の異なる情報を返すことができる他のパラメーターもあります。または、現在どのシステムで動作しているかを知りたいだけの場合は、PHP_OS 定数を直接使用する方が便利です。
getrusage() はシステム リソースのステータスを返すことができます。たとえば、ru_nswap はシステムの現在のスワップ領域の使用状況を示しますが、これらのパラメータについては詳しく説明されていません。結局のところ、この関数はまだ比較的まれに使用されます。
echo '当前脚本的索引节点:' . getmyinode(), PHP_EOL; // 当前脚本的索引节点:8691989143 echo '当前脚本的进程ID:' . getmypid(), PHP_EOL; // 当前脚本的进程ID:1854 // Nginx:当前脚本的进程ID:711(php-fpm的进程ID) echo "web服务器和PHP之间的接口类型:" . php_sapi_name(), PHP_EOL; // web服务器和PHP之间的接口类型:cli // Nginx:web服务器和PHP之间的接口类型:fpm-fcgi echo "运行 PHP 的系统:" . php_uname("a"), PHP_EOL; // 运行 PHP 的系统:Darwin zhangyuedeMBP 19.4.0 Darwin Kernel Version 19.4.0: Wed Mar 4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64 x86_64 // echo "运行PHP的系统:" . PHP_OS, PHP_EOL; // 运行 PHP 的系统:Darwin // 当前脚本的资源使用情况 print_r(getrusage()); // Array // ( // [ru_oublock] => 0 // [ru_inblock] => 0 // [ru_msgsnd] => 0 // [ru_msgrcv] => 0 // [ru_maxrss] => 16809984 // [ru_ixrss] => 0 // [ru_idrss] => 0 // [ru_minflt] => 4410 // [ru_majflt] => 1 // [ru_nsignals] => 0 // [ru_nvcsw] => 0 // [ru_nivcsw] => 86 // [ru_nswap] => 0 // [ru_utime.tv_usec] => 41586 // [ru_utime.tv_sec] => 0 // [ru_stime.tv_usec] => 41276 // [ru_stime.tv_sec] => 0 // )
phpversion() はパラメーターなしの PHP_VERSION 定数と同じ効果があり、現在のバージョン番号を返します。ただし、phpversion() にはパラメータとして拡張機能名を指定して、拡張機能のバージョン番号を返すことができます。例と同様に、現在の環境における Swoole のバージョン番号を取得します。 zend_version() は、単に現在の実行環境における Zend エンジンのバージョン番号を返します。
version_compare() を使用すると、バージョン番号を簡単に比較できます。これはカンマ区切りのバージョン比較であり、定義した任意の文字列バージョン番号をそれを使用して比較できることを意味します。特定の比較ルールについては、公式ドキュメントを参照してください。
echo "当前的PHP版本:" . phpversion(), PHP_EOL; // 当前的PHP版本:7.3.0 echo "当前的PHP版本:" . PHP_VERSION, PHP_EOL; // 当前的PHP版本:7.3.0 echo "当前某个扩展的版本(Swoole):" . phpversion('swoole'), PHP_EOL; // 当前某个扩展的版本(Swoole):4.4.12 echo "当前的PHP的zend引擎版本:" . zend_version(), PHP_EOL; // 当前的PHP的zend引擎版本:3.3.0-dev if (version_compare(PHP_VERSION, '7.0.0') >= 0) { echo '我的版本大于7.0.0,当前版本是:' . PHP_VERSION . "\n"; } else { echo '我的版本还在5,要赶紧升级了,当前版本是:' . PHP_VERSION . "\n"; }
getlastmod() は非常に単純で、現在実行中の PHP ファイルの最終変更時間を返します。 。そして set_time_limit() は誰もがよく知っていると思います。デフォルトでは、Web リクエストはアクティブに切断されるまで長時間持続しません。
たとえば、php.ini ファイルでは、デフォルトで定義されている max_execution_time は 30 秒ですが、リクエストがこの時間を超えると、リクエストは切断されます。ただし、実際には実行に時間がかかるリクエストも常にあり、たとえば、Excel などのドキュメントの生成には時間がかかることがよくあります。
現時点では、set_time_limit() を使用してスクリプトの最大実行時間を設定し、Web リクエストの実行タイムアウトを延長できます。
テスト コード:
echo "当前脚本文件的最后修改时间: " . date("Y-m-d H:i:s.", getlastmod()), PHP_EOL; // 当前脚本文件的最后修改时间: 2020-06-01 08:55:49. // nginx环境下 set_time_limit(84600); // while(1){ // }
推奨学習: php ビデオ チュートリアル
以上がPHPスクリプト実行時のシステム情報に関する関連機能の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。