關於 PHP 的配置,我們大多數情況下都是去查看 php.ini 文件或者通過命令行來查詢某些信息,其實,PHP 的一些內置函數也可以幫助我們去查看或操作這些配置參數。比如之前我們學習過的 關於php的ini文件相關操作函數淺析 。修改方面的函數就只有 ini_set() ,其他大部分的函數其實都是幫助我們進行查詢的,今天,我們就來一一講解這些函數。
get_defined_constants()
返回所有常量的關聯數組,鍵是常量名,值是常量值。
define("MY_CONSTANT", 1);
print_r(get_defined_constants(true));
// array(
// ……
// [user] => array(
// [MY_CONSTANT] => 1
// )
// )
這個函數會輸出所有的常量,因爲返回的內容很多,所以用 ...... 表示有很多系統或擴展的定義常量,而我們在代碼中自己定義的常量則會全部進入到 [user] 這個鍵名下。
這個函數有一個參數,當它爲 true 時,讓此函數返回一個多維數組,分類爲第一維的鍵名,常量和它們的值位於第二維。而默認情況下是 false ,返回的是一個一維數組,就是常量名作爲鍵名,它們的值作爲鍵值。
get_extension_funcs()
這個函數返回的是擴展模塊所包含的所有方法名稱。
print_r(get_extension_funcs("swoole"));
// Array
// (
// [0] => swoole_version
// [1] => swoole_cpu_num
// [2] => swoole_last_error
// [3] => swoole_async_dns_lookup_coro
// [4] => swoole_async_set
// [5] => swoole_coroutine_create
// ……
// [35] => swoole_timer_clear
// [36] => swoole_timer_clear_all
// )
它的參數就是要查詢的擴展名稱,這裏我們直接查看本機安裝的 Swoole 裏面都包含那些方法。可以看到,Swoole4.4 中一共包含有37個方法函數。
get_loaded_extensions()
這個函數是返回所有已加載的擴展模塊列表。
print_r(get_loaded_extensions()); // php -m
// Array
// (
// [0] => Core
// [1] => phpdbg_webhelper
// [2] => date
// [3] => libxml
// [4] => openssl
// [5] => pcre
// [6] => sqlite3
// ……
// [65] => imagick
// [66] => swoole
// [67] => vld
// [68] => Zend OPcache
// )
這個函數的作用是不是和我們在命令行使用 -m 來查看當前系統已安裝的擴展一樣。沒錯,它們就是相同的功能,都是返回的這樣一個擴展安裝情況的列表。在一些開源 cms 系統中,需要檢查當前的安裝環境是否符合要求時,就可以用這個函數進行檢測。
get_include_path() 和 get_included_files()
這兩個函數一個是返回當前 include_path 的配置信息,一個是返回已經被 include 或 require 進來的文件列表。
echo get_include_path(), PHP_EOL; // .:/usr/local/Cellar/php/7.3.0/share/php/pear
echo ini_get('include_path'), PHP_EOL; // .:/usr/local/Cellar/php/7.3.0/share/php/pear
get_include_path() 很簡單,它的效果其實就和 echo ini_get('include_path') 是一樣的,都是去讀取 php.ini 文件中 include_path 的配置值。PHP 在 include 或 require 時,如果沒有給定路徑,那麼它就會先在當前目錄中查找,如果沒有找到,則會進入這個 include_path 中進行查找。如果依然沒有找到指定的文件,纔會報錯。這就是 include_path 目錄的作用,當然,我們在日常開發中基本不會用到它,所以這裏瞭解瞭解即可。
include "動態查看及加載PHP擴展.php";
print_r(get_included_files());
// Array
// (
// [0] => /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202005/source/一些PHP選項參數相關的函數(一).php
// [1] => /Users/zhangyue/MyDoc/博客文章/dev-blog/php/202005/source/動態查看及加載PHP擴展.php
// )
get_included_files() 也是非常簡潔直觀的一個函數,它就是返回我們當前加載了哪些文件。當前運行時的文件總會在第一條,也就是說,這個函數至少會返回一個自身的文件路徑。我們可以試試在 Laravel 或其他框架的入口文件或者控制器中使用這個函數打印一下它們的加載文件數量,這樣其實也能幫我們理解這個框架的加載執行情況。
get_resources()
var_dump(get_resources());
// array(3) {
// [1]=>
// resource(1) of type (stream)
// [2]=>
// resource(2) of type (stream)
// [3]=>
// resource(3) of type (stream)
// }
$fp = fopen('1.txt','r');
var_dump(get_resources());
// array(4) {
// [1]=>
// resource(1) of type (stream)
// [2]=>
// resource(2) of type (stream)
// [3]=>
// resource(3) of type (stream)
// [5]=>
// resource(5) of type (stream-context)
// }
這個函數返回的是活動資源的情況。比如上面例子中,我們先打印了這個函數的內容,只有3條數據,然後我們用 fopen() 加載了一個文件資源,獲得了一個資源句柄。這時候再打印這個函數的內容,就會發現多了一條,而且類型是 stream-context 類型的資源句柄。這個函數可以幫我們在調試的時候查看是否有沒有釋放的資源操作。
總結
今天先簡單的學習了幾個函數,其實他們並不是非常常用的函數,但是通過學習之後,竟然發現有不少函數還是能幫助我們對系統進行調優或者在遷移系統的時候能夠快速檢測運行環境的。學習致用纔是最成功的學習,讓我們繼續加油吧!
測試代碼:
===========
各自媒體平臺均可搜索【硬核項目經理】