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

PHP 10 個鮮為人知但超實用的函數:levenshtein、get_defined_vars、highlight_string 等實戰技巧

     編輯:PHP 綜合知識

PHP 隱藏寶石:10 個鮮為人知但極其實用的內建函數

PHP 擁有上千個內建函數,許多強大功能被開發者忽略。本文精選 10 個高實用性、低知名度的函數,附帶實戰場景與代碼範例。

1. levenshtein() - 字串相似度比較 (編輯距離)

<?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

2. get_defined_vars() - 除錯神器:獲取所有當前作用域變數

<?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 "
"; }

3. highlight_string() / highlight_file() - 程式碼高亮顯示

<?php
// 顯示字串代碼高亮
highlight_string('');

// 顯示檔案代碼高亮 (回傳而非輸出)
$code = highlight_file(__FILE__, true); // true = 回傳字串
echo $code;

// 實戰:線上代碼查看器
if (isset($_GET['file']) && is_file($_GET['file'])) {
    highlight_file($_GET['file']);
}

4. php_strip_whitespace() - 移除註解與空白

<?php
// 獲取純代碼 (移除註解、空行、縮進)
$cleanCode = php_strip_whitespace(__FILE__);
echo $cleanCode;

// 實戰:代碼壓縮/分析/授權檢查
$tokenCount = count(token_get_all(php_strip_whitespace($file)));

5. get_browser() - 瀏覽器能力偵測

<?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

6. memory_get_usage() / memory_get_peak_usage() - 記憶體監控

<?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");
    }
});

7. gzcompress() / gzuncompress() - 字串壓縮 (約 50% 壓縮率)

<?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 格式)

8. ignore_user_abort() - 忽略用戶中斷繼續執行

<?php
// 即使用戶關閉瀏覽器/停止載入,腳本繼續執行
ignore_user_abort(true);
set_time_limit(0); // 移除時間限制

// 實戰:長時間任務 (發送郵件、生成報表、視頻轉碼)
// 結合 fastcgi_finish_request() 立即回應用戶,後台繼續處理
fastcgi_finish_request(); // 僅 PHP-FPM 可用
// ... 繼續長時間任務 ...

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

<?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 不支援此函數

10. sys_get_temp_dir() / tempnam() / tmpfile() - 暫存檔案管理

<?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_browserUA 解析相容性處理、統計分析、行動裝置適配
memory_get_usage/peak記憶體監控效能分析、記憶體洩漏偵測、超限預警
gzcompress/uncompress字串壓縮API 壓縮、快取壓縮、大資料傳輸
ignore_user_abort忽略中斷長任務後台處理、支付回調、報表生成
getrusageCPU/資源統計效能分析、容器資源監控、負載評估
tmpfile/tempnam暫存檔案上傳處理、中間檔案、跨請求資料交換
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved