首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 隱藏寶藏函數:10 個鮮為人知卻極實用的原生函數

     編輯:PHP 相關知識

PHP 擁有超過 1000 個內置函數,許多強大功能藏在鮮少使用的函數中。本文精選 10 個「知道後相見恨晚」的函數,涵蓋字符串比較、調試、性能分析、壓縮、瀏覽器識別等實戰場景。

1. levenshtein() - 字符串相似度/編輯距離

echo levenshtein('carrot', 'carrrott'); // 2 (需插入 2 個 r)
echo levenshtein('kitten', 'sitting');  // 3

// 進階:自定義插入/替換/刪除代價
echo levenshtein('abc', 'ac', 1, 2, 1); // 替換代價 2,總距離 2

場景: 搜索建議「您是否想找...」、拼寫糾錯、模糊匹配去重、DNA 序列比對。

2. get_defined_vars() - 當前作用域所有變量快照

$a = 1; $b = 'test'; $c = [1,2];
$vars = get_defined_vars();
// 包含 $a, $b, $c 及所有超全局變量 ($_GET, $_POST, $GLOBALS 等)
// 調試神器:var_dump(array_keys(get_defined_vars()))

場景: 斷點調試、模板引擎變量提取、動態作用域分析。

3. ignore_user_abort() - 忽略客戶端斷開繼續執行

ignore_user_abort(true); // 即使用戶關閉瀏覽器,腳本繼續跑完
// 配合 set_time_limit(0) 實現長時間後台任務
// 如:視頻轉碼、大數據導出、郵件隊列發送

注意: 仍受 max_execution_time 限制,需配合 set_time_limit(0)。

4. highlight_string() / highlight_file() - 代碼語法高亮輸出

// 字符串高亮
highlight_string('');
// 返回高亮 HTML 字符串(第二參數 true)
$html = highlight_string('', true);

// 文件高亮
highlight_file(__FILE__); // 直接輸出
// 返回字符串
$html = highlight_file('config.php', true);

場景: 代碼分享平台、在線 IDE、文檔生成、錯誤頁面代碼片段展示。

5. php_strip_whitespace() - 移除註釋與空白(保留語義)

$clean = php_strip_whitespace('source.php');
// 刪除所有註釋、空格、換行、制表符
// 保留 PHP 標簽、字符串字面量內的空白
// 用於代碼混淆預處理、體積分析、授權文件生成

6. get_browser() - 瀏覽器能力識別

// 需 php.ini 配置 browscap 指向最新 browscap.ini
$browser = get_browser(null, true); // 返回關聯數組
echo $browser['browser'];        // Chrome
echo $browser['version'];        // 120.0.0
echo $browser['platform'];       // Windows 10
echo $browser['is_mobile'];      // false
echo $browser['css_version'];    // 3

場景: 兼容性降級、移動端適配、統計分析、功能開關。

7. memory_get_usage() / memory_get_peak_usage() - 內存分析

echo "初始: " . memory_get_usage() . " bytes\n";      // 356 KB
$data = str_repeat('x', 10*1024*1024); // 10MB 字符串
echo "峰值: " . memory_get_peak_usage() . " bytes\n"; // 10.4 MB
unset($data);
echo "釋放後: " . memory_get_usage() . " bytes\n";   // 356 KB

場景: 內存洩漏排查、大數據處理優化、性能基準測試。

8. getrusage() - CPU/系統資源使用統計

$ru = getrusage();
echo "用戶態 CPU: " . ($ru['ru_utime.tv_sec'] + $ru['ru_utime.tv_usec']/1e6) . "s\n";
echo "內核態 CPU: " . ($ru['ru_stime.tv_sec'] + $ru['ru_stime.tv_usec']/1e6) . "s\n";
echo "最大駐留集: " . $ru['ru_maxrss'] . " KB\n"; // Linux 為 KB

注意: Windows 不支持,僅 Unix/Linux/macOS 有效。

9. gzcompress() / gzuncompress() - 字符串壓縮解壓

$original = "Lorem ipsum dolor sit amet... (長文本)";
$compressed = gzcompress($original, 9); // 級別 0-9,默認 6
echo "壓縮率: " . round((1 - strlen($compressed)/strlen($original))*100, 1) . "%\n"; // ~70%
$decompressed = gzuncompress($compressed);
assert($decompressed === $original);

場景: 緩存大對象、數據庫存儲長文本、網絡傳輸壓縮、Session 數據壓縮。

相關: gzencode()/gzdecode() (gzip 格式含頭尾)、gzdeflate()/gzinflate() (原始 zlib)。

10. sys_getloadavg() - 系統負載平均值

$load = sys_getloadavg(); // [1min, 5min, 15min]
echo "1分鐘負載: $load[0], 5分鐘: $load[1], 15分鐘: $load[2]\n";
// 過載保護:負載 > CPU 核心數 * 2 時拒絕新任務或降級服務

場景: 自適應限流、佇列消費者動態擴縮容、健康檢查端點。

總結表

函數核心能力典型場景注意事項
levenshtein編輯距離模糊搜索、去重僅 ASCII,多字節需 mb_* 替代
get_defined_vars作用域快照調試、模板包含超全局,體積大
ignore_user_abort後台持久化長任務需配合 set_time_limit(0)
highlight_string/file語法高亮代碼展示輸出 HTML,需 CSS 配合
php_strip_whitespace代碼壓縮混淆、分析保留字符串內空白
get_browserUA 解析兼容性、統計需更新 browscap.ini
memory_get_usage內存統計性能優化實際分配 > 邏輯大小
getrusageCPU 統計性能分析Windows 不支持
gzcompress字符串壓縮緩存、傳輸級別 9 最慢但最小
sys_getloadavg系統負載自適應限流僅 Unix 系統

善用這些「冷門」函數,往往能用幾行代碼解決原本需引入庫或寫幾十行邏輯的問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved