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

PHP 實用函數大全:加密、隨機字串、檔案操作、IP 取得、SQL 防注入、下載、截斷、時間格式化、提示跳轉

     編輯:PHP 綜合知識

1. 可逆加密解密(AES-256-CBC + Base64)

function encryptDecrypt($key, $string, $decrypt) {
    if ($decrypt) {
        return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
    } else {
        return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
    }
}
// 使用
$enc = encryptDecrypt('pwd', 'Hello世界', 0);
$dec = encryptDecrypt('pwd', $enc, 1);
⚠️ mcrypt 已棄用(PHP 7.2+ 移除),新專案請改用 openssl_encrypt (AES-256-GCM)。

2. 產生隨機字串

function generateRandomString($len = 10) {
    $chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $str = '';
    for ($i = 0; $i < $len; $i++) $str .= $chars[random_int(0, strlen($chars)-1)];
    return $str;
}

3. 取得副檔名

function getExtension($fn) { return pathinfo($fn, PATHINFO_EXTENSION); }

4. 格式化檔案大小

function formatSize($bytes) {
    $units = ['B','KB','MB','GB','TB','PB'];
    for ($i=0; $bytes>=1024 && $i

5. 標籤替換(簡易模板引擎)

function stringParser($tpl, $map) {
    return str_replace(array_keys($map), array_values($map), $tpl);
}

6. 列出目錄檔案

function listDirFiles($dir) {
    foreach (new DirectoryIterator($dir) as $f) if (!$f->isDot() && !$f->isDir()) echo $f->getFilename().'<br>';
}

7. 取得當前完整 URL

function curPageURL() {
    $proto = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS']!=='off') ? 'https' : 'http';
    $port  = ($_SERVER['SERVER_PORT']=='80') ? '' : ':'.$_SERVER['SERVER_PORT'];
    return $proto.'://'.$_SERVER['HTTP_HOST'].$port.$_SERVER['REQUEST_URI'];
}

8. 強制下載檔案

function download($file) {
    if (!file_exists($file)) return false;
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    header('Content-Length: '.filesize($file));
    readfile($file);
    exit;
}

9. 多位元組安全截斷(支援 UTF-8/GBK)

function msubstr($str, $start=0, $len=15, $charset='utf-8', $suffix=true) {
    if (function_exists('mb_substr')) return mb_substr($str,$start,$len,$charset).($suffix?'…':'');
    if (function_exists('iconv_substr')) return iconv_substr($str,$start,$len,$charset).($suffix?'…':'');
    // 兜底簡易實作略
}

10. 取得客戶端真實 IP

function getClientIp() {
    $keys = ['HTTP_X_FORWARDED_FOR','HTTP_CLIENT_IP','REMOTE_ADDR'];
    foreach ($keys as $k) {
        if (!empty($_SERVER[$k])) {
            $ips = explode(',', $_SERVER[$k]);
            foreach ($ips as $ip) {
                $ip = trim($ip);
                if ($ip!=='unknown' && filter_var($ip, FILTER_VALIDATE_IP)) return $ip;
            }
        }
    }
    return '0.0.0.0';
}

11. SQL 防注入(舊式 mysql_* 專用,現代請用 Prepared Statements)

function injCheck($sql) {
    return preg_match('/(select|insert|update|delete|union|into|load_file|outfile)/i', $sql) ? false : $sql;
}

12. 操作成功提示並跳轉

function message($title, $msg, $url) {
    echo "<meta charset='utf-8'><script>alert('$msg'); location.href='$url';</script>";
}

13. 秒數轉 HH:MM:SS

function sec2hms($s) {
    $h = floor($s/3600); $m = floor(($s%3600)/60); $sec = $s%60;
    return sprintf('%02d:%02d:%02d', $h, $m, $sec);
}

附錄:現代化工具函式庫(可直接 Composer 安裝)

  • 字串/陣列/集合:illuminate/support (Str, Arr, Collection)
  • 日期時間:nesbot/carbon
  • 檔案/上傳:league/flysystem
  • 驗證:respect/validation
  • 加密:defuse/php-encryption (AES-256-GCM)
  • IP/地理:geoip2/geoip2

建議新專案直接引入成熟庫,避免重複造輪子並享受持續維護。

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