本篇文章給大家詳細介紹關於目前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 交換區的使用情況,但是這些參數並沒有很詳細的說明,畢竟這個函數還是使用的比較少的。
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
推薦學習:php影片教學
#以上是詳細介紹關於PHP腳本運行時系統資訊的相關函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!