php代码执行相关函数,关于当前PHP脚本运行时系统信息相关函数
關于當前PHP腳本運行時系統信息相關函數
我們的 PHP 在執行的時候,其實可以獲取到非常多的當前系統相關的信息。就像很多開源的 CMS 一般會在安裝的時候來檢測一些環境信息一樣,這些信息都是可以方便地動態獲取的。
腳本文件運行時的系統用戶相關信息
首先,我們來看看獲取當前系統相關的一些用戶信息。這個用戶信息就是我們系統運行 php 腳本時所使用的系統用戶。
echo?'當前腳本擁有者:'?.?get_current_user(),?PHP_EOL;
//?當前腳本擁有者:zhangyue
echo?'當前腳本屬組:'?.?getmygid(),?PHP_EOL;
//?當前腳本屬組:20
echo?'當前腳本的用戶屬主:'?.?getmyuid(),?PHP_EOL;
//?當前腳本的用戶屬主:501
看出來了嘛?其實這三個函數就是對應的 Linux 中的文件擁有者、所屬組,get_current_user() 返回的是用戶名,getmyuid() 返回的是用戶的 UID ,它們兩個是對應的同一個用戶。getmygid() 則返回的是當前用戶所屬的用戶組。
獲取當前運行腳本的系統相關信息
這一組函數可以讓我們獲得系統的 innode 信息、當前腳本運行時的 進程ID 、服務接口類型、運行 PHP 的操作系統信息以及資源使用情況。
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
//?)
從注釋中,我們可以看出,getmypid() 在使用命令行時返回的是當前執行的 進程ID ,在網頁中訪問的時候返回的是 PHP-FPM 的 進程ID 。同理,php_sapi_name() 也會根據當前運行的環境返回不同的內容。
php_uname() 默認參數是就 'a' ,意思是返回完整的操作系統信息。它還有其它的參數可以返回單獨的不同的信息,或者我們只需要知道當前操作是什么系統時,就直接使用 PHP_OS 常量會更加的方便。
getrusage() 能夠返回系統資源的情況,比如 ru_nswap 就是系統當前的 swap 交換區的使用情況,但是這些參數并沒有很詳細的說明,畢竟這個函數還是使用的比較少的。
獲取 PHP 及相關擴展組件的版本信息
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";
}
phpversion() 在沒有參數的情況下和 PHP_VERSION 常量的效果是一樣的,返回的是當前運行的 PHP 的版本號,但是,phpversion() 可以給一個擴展組件名的參數,這樣,它就可以返回這個擴展組件的版本號。就像例子中,我們獲取了當前環境下 Swoole 的版本號。zend_version() 就是很簡單的返回了當前運行環境中的 Zend引擎 版本號。
version_compare() 可以幫助我們方便地進行版本號的對比。它是以逗號進行分隔進行的版本對比,也就是說,我們自己定義的字符串版本號都可以使用它來進行對比。具體的對比規則可以參考官方文檔。
當前腳本文件的修改時間及腳本運行時間
echo?"當前腳本文件的最后修改時間:?"?.?date("Y-m-d?H:i:s.",?getlastmod()),?PHP_EOL;
//?當前腳本文件的最后修改時間:2020-06-01 08:55:49.
//?nginx環境下
set_time_limit(84600);
//?while(1){
//?}
getlastmod() 非常簡單,就是返回當前運行的這個 PHP 文件最后被修改的時間。而 set_time_limit() 相信大家就不陌生了。在默認情況下,web請求都不會持續很長時間就會主動斷開。比如在 php.ini 文件中,我們默認定義的 max_execution_time 是30秒,當一個請求消耗的時候超過這個時間后,請求就會斷開。不過,總會有一些請求是確實需要我們消耗更長的時間來執行的,比如說生成 Excel 之類的文檔往往就需要更長的時間。這個時候,我們就可以使用 set_time_limit() 來設置腳本最大執行時間來延長web請求的執行超時時間。
測試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%85%B3%E4%BA%8E%E5%BD%93%E5%89%8DPHP%E8%84%9A%E6%9C%AC%E8%BF%90%E8%A1%8C%E6%97%B6%E7%B3%BB%E7%BB%9F%E4%BF%A1%E6%81%AF%E7%9B%B8%E5%85%B3%E5%87%BD%E6%95%B0.php
參考文檔:
https://www.php.net/manual/zh/function.get-current-user.php
https://www.php.net/manual/zh/function.getmyuid.php
https://www.php.net/manual/zh/function.getmygid.php
https://www.php.net/manual/zh/function.getmyinode.php
https://www.php.net/manual/zh/function.getmypid.php
https://www.php.net/manual/zh/function.getrusage.php
https://www.php.net/manual/zh/function.php-sapi-name.php
https://www.php.net/manual/zh/function.php-uname.php
https://www.php.net/manual/zh/function.phpversion.php
https://www.php.net/manual/zh/function.set-time-limit.php
https://www.php.net/manual/zh/function.zend-version.php
https://www.php.net/manual/zh/function.getlastmod.php
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的php代码执行相关函数,关于当前PHP脚本运行时系统信息相关函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李斌:蔚来手机将在今年第三季度发布并交付
- 下一篇: ecshop flow.php?step