PHP 擁有上千個內建函數,許多強大功能被開發者忽略。本文精選 10 個高實用性、低知名度的函數,附帶實戰場景與代碼範例。
<?php
$str1 = 'carrot';
$str2 = 'carrrott';
echo levenshtein($str1, $str2); // 2 (需插入 2 個字元)
// 實戰:拼錯字修正建議
function didYouMean($input, array $dictionary) {
$shortest = -1;
$closest = '';
foreach ($dictionary as $word) {
$lev = levenshtein($input, $word);
if ($lev === 0) return $word; // 完全匹配
if ($shortest === -1 || $lev < $shortest) {
$shortest = $lev;
$closest = $word;
}
}
return $shortest <= 2 ? $closest : null; // 閾值 2
}
$dict = ['apple', 'banana', 'orange', 'grape'];
echo didYouMean('appl', $dict); // apple
echo didYouMean('bannna', $dict); // banana
<?php
$a = 1;
$b = 'test';
$c = [1,2,3];
function test() {
$local = 'local';
print_r(get_defined_vars()); // 只包含函數內部變數
}
test();
// 實戰:除錯輸出所有變數
function debugDump($label = '') {
echo "=== $label ===\n";
print_r(get_defined_vars());
echo "";
}
<?php
// 顯示字串代碼高亮
highlight_string('');
// 顯示檔案代碼高亮 (回傳而非輸出)
$code = highlight_file(__FILE__, true); // true = 回傳字串
echo $code;
// 實戰:線上代碼查看器
if (isset($_GET['file']) && is_file($_GET['file'])) {
highlight_file($_GET['file']);
}
<?php
// 獲取純代碼 (移除註解、空行、縮進)
$cleanCode = php_strip_whitespace(__FILE__);
echo $cleanCode;
// 實戰:代碼壓縮/分析/授權檢查
$tokenCount = count(token_get_all(php_strip_whitespace($file)));
<?php
// 需 php.ini 設定 browscap 指向 browscap.ini
// 或使用輕量替代:get_browser(null, true) 解析 User-Agent
$browser = get_browser(null, true);
echo "Browser: {$browser['browser']} {$browser['version']}\n";
echo "Platform: {$browser['platform']}\n";
echo "Supports JS: " . ($browser['javascript'] ? 'Yes' : 'No') . "\n";
echo "Is Mobile: " . ($browser['ismobiledevice'] ? 'Yes' : 'No') . "\n";
// 注意:需定期更新 browscap.ini,或改用輕量庫如 ua-parser
<?php
echo "初始: " . memory_get_usage() . " bytes\n";
echo "峰值: " . memory_get_peak_usage() . " bytes\n";
$data = [];
for ($i = 0; $i < 100000; $i++) {
$data[] = str_repeat('x', 100);
}
echo "建立陣列後: " . memory_get_usage() . " bytes\n";
echo "峰值: " . memory_get_peak_usage() . " bytes\n";
unset($data);
echo "釋放後: " . memory_get_usage() . " bytes\n";
// 實戰:記憶體超限預警
register_shutdown_function(function() {
$peak = memory_get_peak_usage(true);
if ($peak > 128 * 1024 * 1024) { // 128MB
error_log("Memory peak: " . ($peak / 1024 / 1024) . " MB");
}
});
<?php
$longText = str_repeat('Lorem ipsum dolor sit amet. ', 1000);
echo "原始: " . strlen($longText) . " bytes\n";
$compressed = gzcompress($longText);
echo "壓縮: " . strlen($compressed) . " bytes (" . round(100 * strlen($compressed) / strlen($longText)) . "%)\n";
$original = gzuncompress($compressed);
echo "解壓: " . strlen($original) . " bytes\n";
echo "驗證: " . ($original === $longText ? '成功' : '失敗') . "\n";
// 實戰:大型 JSON/API 回應壓縮、Session 資料壓縮、快取壓縮
// 相關:gzencode()/gzdecode() (gzip 格式),gzdeflate()/gzinflate() (zlib 格式)
<?php
// 即使用戶關閉瀏覽器/停止載入,腳本繼續執行
ignore_user_abort(true);
set_time_limit(0); // 移除時間限制
// 實戰:長時間任務 (發送郵件、生成報表、視頻轉碼)
// 結合 fastcgi_finish_request() 立即回應用戶,後台繼續處理
fastcgi_finish_request(); // 僅 PHP-FPM 可用
// ... 繼續長時間任務 ...
<?php
$data = getrusage();
echo "用戶態 CPU 時間: " . ($data['ru_utime.tv_sec'] + $data['ru_utime.tv_usec'] / 1e6) . "s\n";
echo "核心態 CPU 時間: " . ($data['ru_stime.tv_sec'] + $data['ru_stime.tv_usec'] / 1e6) . "s\n";
echo "最大常駐記憶體: " . $data['ru_maxrss'] . " KB\n";
echo "頁面回收: " . $data['ru_minflt'] . "\n";
echo "頁面錯誤: " . $data['ru_majflt'] . "\n";
// 注意:Windows 不支援此函數
<?php
// 獲取系統暫存目錄
echo sys_get_temp_dir(); // /tmp (Linux) 或 C:\Windows\Temp (Windows)
// 建立唯一暫存檔案 (自動清理需自行處理)
$tmpFile = tempnam(sys_get_temp_dir(), 'myapp_');
file_put_contents($tmpFile, 'temp data');
// ... 使用 ...
unlink($tmpFile); // 手動刪除
// 建立自動清理的暫存檔案 (關閉檔案句柄自動刪除)
$fp = tmpfile();
fwrite($fp, 'auto cleanup data');
fseek($fp, 0);
echo fread($fp, 1024);
fclose($fp); // 自動刪除
| 函數 | 核心用途 | 實戰場景 |
|---|---|---|
| levenshtein | 編輯距離 | 拼錯修正、相似度搜尋、DNA 序列比對 |
| get_defined_vars | 作用域變數快照 | 除錯、模板引擎變數檢查、單元測試 |
| highlight_string/file | 語法高亮 | 代碼查看器、文檔生成、教學網站 |
| php_strip_whitespace | 移除註解空白 | 代碼分析、授權檢查、壓縮 |
| get_browser | UA 解析 | 相容性處理、統計分析、行動裝置適配 |
| memory_get_usage/peak | 記憶體監控 | 效能分析、記憶體洩漏偵測、超限預警 |
| gzcompress/uncompress | 字串壓縮 | API 壓縮、快取壓縮、大資料傳輸 |
| ignore_user_abort | 忽略中斷 | 長任務後台處理、支付回調、報表生成 |
| getrusage | CPU/資源統計 | 效能分析、容器資源監控、負載評估 |
| tmpfile/tempnam | 暫存檔案 | 上傳處理、中間檔案、跨請求資料交換 |