我們的 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) else
phpversion() 在沒有引數的情況下和 php_version 常量的效果是一樣的,返回的是當前執行的 php 的版本號,但是,phpversion() 可以給乙個擴充套件元件名的引數,這樣,它就可以返回這個擴充套件元件的版本號。就像例子中,我們獲取了當前環境下 swoole 的版本號。zend_version() 就是很簡單的返回了當前執行環境中的 zend引擎 版本號。
version_compare() 可以幫助我們方便地進行版本號的對比。它是以逗號進行分隔進行的版本對比,也就是說,我們自己定義的字串版本號都可以使用它來進行對比。具體的對比規則可以參考官方文件。
// nginx環境下
set_time_limit(84600);
// while(1)
getlastmod() 非常簡單,就是返回當前執行的這個 php 檔案最後被修改的時間。而 set_time_limit() 相信大家就不陌生了。在預設情況下,web請求都不會持續很長時間就會主動斷開。比如在 php.ini 檔案中,我們預設定義的 max_execution_time 是30秒,當乙個請求消耗的時候超過這個時間後,請求就會斷開。不過,總會有一些請求是確實需要我們消耗更長的時間來執行的,比如說生成 excel 之類的文件往往就需要更長的時間。這個時候,我們就可以使用 set_time_limit() 來設定指令碼最大執行時間來延長web請求的執行超時時間。
測試**:
PHP指令碼執行時間
php設定指令碼最大執行時間的三種方法 php.ini 中預設的最長執行時間是 30 秒,這是由 php.ini 中的 max execution time 變數指定,如果指令碼需要跑很長時間,例如要大量傳送電子郵件,或者分析統計大量資料,伺服器會在 30 秒後強行中止正在執行的程式,這種情況就要更...
PHP執行時配置
在php啟動時會讀取php的配置檔案php.ini,對於伺服器模組版本的php僅在web伺服器啟動時讀取一次,而cgi和cli版本的php每次呼叫都會讀取。在php.ini檔案中可以使用環境變數,php5.1以後還可以在ini檔案中引用ini中已存在的變數。讀取php.ini檔案時,按如下順序查詢p...
php程式執行時間 php計算程式的執行時間
首先我們分析一下原理,要想得到程式執行時間,那麼可以在程式最開始執行的時候定義乙個變數記下當前時間,然後等我們程式執行完之後再記錄一下當前的時間,兩者相差就是該程式執行花費的時間了。這裡介紹一下 microtime 這個函式,microtime 用的不多,但是不能不知道這個函式,它是返回當前 uni...