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

46 個 PHP 實用程式碼片段大全:簡訊、郵件、防注入、地理定位、圖片、壓縮、加密、API 整合

     編輯:PHP 綜合知識

通訊類

1. 發送簡訊(MSG91 閘道)

function send_sms($mobile, $msg) {
    $authKey = 'YOUR_AUTH_KEY';
    $senderId = 'YOUR_SENDER_ID'; // 6 字元
    $post = [
        'authkey' => $authKey,
        'mobiles' => $mobile,
        'message' => urlencode($msg),
        'sender' => $senderId,
        'route' => 'template',
    ];
    $ch = curl_init('https://control.msg91.com/sendhttp.php');
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $post,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_SSL_VERIFYPEER => false,
    ]);
    return curl_exec($ch);
}

2. 發送郵件(Mandrill API)

function send_email($to, $subject, $html) {
    require 'Mandrill.php';
    $m = new Mandrill('YOUR_API_KEY');
    $message = [
        'html' => $html, 'text' => strip_tags($html),
        'subject' => $subject, 'from_email' => 'noreply@example.com',
        'from_name' => 'MyApp', 'to' => [['email' => $to]],
        'track_opens' => true,
    ];
    return $m->messages->send($message);
}

3. 原生 mail() 發送 HTML 郵件

function mail_html($to, $subject, $body) {
    $headers = "From: MyApp \r\n";
    $headers .= "Reply-To: noreply@example.com\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";
    return mail($to, $subject, $body, $headers);
}

安全與驗證類

4. 防 SQL 注入清洗(遞迴支援陣列)

function clean($input) {
    if (is_array($input)) return array_map('clean', $input);
    $out = (string)$input;
    if (get_magic_quotes_gpc()) $out = stripslashes($out);
    return htmlentities($out, ENT_QUOTES, 'UTF-8');
}

5. 驗證 Email 格式

function is_valid_email($email) {
    return (bool)filter_var($email, FILTER_VALIDATE_EMAIL);
}

6. 驗證 URL 格式

function is_valid_url($url) {
    return (bool)filter_var($url, FILTER_VALIDATE_URL);
}

7. 取得真實 Client IP(支援代理)

function get_real_ip() {
    foreach (['HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR'] as $key) {
        if (!empty($_SERVER[$key])) return $_SERVER[$key];
    }
    return 'unknown';
}

8. 封鎖 IP 黑名單

$deny = file_exists('blocked_ips.txt') ? file('blocked_ips.txt', FILE_IGNORE_NEW_LINES) : ['127.0.0.1'];
if (in_array(get_real_ip(), $deny)) { die('Your IP is blocked'); }

檔案與資料處理類

9. 強制下載檔案

function force_download($file, $dir = '../log/exports/') {
    $path = $dir . $file;
    if (!is_file($path)) die('File not found');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . $file . '"');
    header('Content-Length: ' . filesize($path));
    readfile($path);
    exit;
}

10. 建立 ZIP 壓縮包

function create_zip(array $files, $dest, $overwrite = false) {
    if (file_exists($dest) && !$overwrite) return false;
    $zip = new ZipArchive();
    if ($zip->open($dest, $overwrite ? ZipArchive::OVERWRITE : ZipArchive::CREATE)) {
        foreach ($files as $f) if (file_exists($f)) $zip->addFile($f, basename($f));
        $zip->close();
        return file_exists($dest);
    }
    return false;
}

11. 解壓 ZIP

function unzip($zipFile, $destDir) {
    $zip = new ZipArchive();
    if ($zip->open($zipFile) && $zip->extractTo($destDir)) {
        $zip->close(); return true;
    }
    return false;
}

12. 讀取 CSV 為陣列

function read_csv($file) {
    $data = [];
    if (($h = fopen($file, 'r')) !== false) {
        while (($row = fgetcsv($h, 1024)) !== false) $data[] = $row;
        fclose($h);
    }
    return $data;
}

13. 陣列寫入 CSV

function write_csv(array $data, $file) {
    $h = fopen($file, 'w');
    foreach ($data as $row) fputcsv($h, $row);
    fclose($h);
}

14. 目錄遞迴列表

function list_dir($dir) {
    $out = [];
    foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS)) as $f) {
        $out[] = $f->getPathname();
    }
    return $out;
}

15. 遞迴刪除目錄

function delete_dir($path) {
    if (is_dir($path)) {
        foreach (array_diff(scandir($path), ['.','..']) as $f) delete_dir($path . '/' . $f);
        return rmdir($path);
    }
    return is_file($path) && unlink($path);
}

圖片與多媒體類

16. 縮放圖片(支援 JPG/PNG/GIF)

function resize_img($src, $dst, $maxW, $maxH) {
    list($w, $h, $type) = getimagesize($src);
    if ($w <= $maxW && $h <= $maxH) return copy($src, $dst);
    $ratio = min($maxW/$w, $maxH/$h);
    $nw = (int)($w * $ratio); $nh = (int)($h * $ratio);
    $srcImg = match($type) {
        IMAGETYPE_JPEG => imagecreatefromjpeg($src),
        IMAGETYPE_PNG  => imagecreatefrompng($src),
        IMAGETYPE_GIF  => imagecreatefromgif($src),
        default => null,
    };
    $dstImg = imagecreatetruecolor($nw, $nh);
    imagecopyresampled($dstImg, $srcImg, 0,0,0,0, $nw,$nh, $w,$h);
    imagejpeg($dstImg, $dst, 90);
    imagedestroy($srcImg); imagedestroy($dstImg);
}

17. 從 URL 下載圖片

function download_img($url, $saveAs) {
    $ch = curl_init($url);
    curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER=>1, CURLOPT_BINARYTRANSFER=>1, CURLOPT_FOLLOWLOCATION=>1]);
    $data = curl_exec($ch);
    curl_close($ch);
    return file_put_contents($saveAs, $data) !== false;
}

18. 取得遠端檔案大小(HEAD 請求)

function remote_filesize($url) {
    $ch = curl_init($url);
    curl_setopt_array($ch, [CURLOPT_NOBODY=>1, CURLOPT_HEADER=>1, CURLOPT_RETURNTRANSFER=>1, CURLOPT_FOLLOWLOCATION=>1]);
    curl_exec($ch);
    $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
    curl_close($ch);
    return $size > 0 ? $size : 'unknown';
}

19. PDF 轉圖片(需 ImageMagick)

function pdf_to_jpg($pdf, $jpg) {
    exec("convert -density 150 -quality 90 '$pdf[0]' '$jpg'", $out, $ret);
    return $ret === 0;
}

字串與文字處理類

20. URL 自動轉超連結

function auto_link($text) {
    $text = preg_replace('~((f|ht)tp://\S+)~', '$1', $text);
    $text = preg_replace('~(\s)(www\.\S+)~', '$1$2', $text);
    $text = preg_replace('~([\w.-]+@[\w.-]+\.\w+)~', '$1', $text);
    return $text;
}

21. 關鍵字高亮

function highlight($text, $keywords, $color = '#4285F4') {
    foreach (explode(' ', $keywords) as $kw) {
        $text = preg_replace("|($kw)|ui", "$1", $text);
    }
    return $text;
}

22. 數字序數後綴(1st, 2nd, 3rd, 4th...)

function ordinal($n) {
    $s = ['th','st','nd','rd'];
    $v = $n % 100;
    return $n . ($s[($v < 20 || $v > 20) ? ($v % 10 < 4 ? $v % 10 : 0) : 0]);
}

23. 秒數轉人類可讀(天/時/分/秒)

function secs_to_str($secs) {
    $units = [86400=>'day', 3600=>'hour', 60=>'minute', 1=>'second'];
    $str = '';
    foreach ($units as $sec => $unit) {
        if ($secs >= $sec) {
            $n = (int)($secs / $sec);
            $secs %= $sec;
            $str .= ($str ? ', ' : '') . "$n $unit" . ($n > 1 ? 's' : '');
        }
    }
    return $str ?: '0 seconds';
}

API 整合與第三方服務類

24. 偵測用戶城市(ipinfodb)

function detect_city($ip) {
    $url = "https://ipinfodb.com/ip_locator.php?ip=" . urlencode($ip);
    $html = file_get_contents($url);
    preg_match('/City : ([^<]+)/i', $html, $c);
    preg_match('/State\/Province : ([^<]+)/i', $html, $s);
    return ($c[1] ?? '') . ($s[1] ? ', ' . $s[1] : '');
}

25. Facebook 粉絲數

function fb_fans($page) {
    $json = @file_get_contents("https://graph.facebook.com/$page");
    return $json ? json_decode($json, true)['fan_count'] ?? 0 : 0;
}

26. Twitter 最新推文

function latest_tweet($user) {
    $url = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=$user&count=1";
    // 需 OAuth 簽名,此處略
}

27. 短網址(TinyURL)

function tiny_url($url) {
    return file_get_contents("https://tinyurl.com/api-create.php?url=" . urlencode($url));
}

28. 產生 QR Code(Google Chart API)

function qr_code($data, $size = 150) {
    return file_get_contents("https://chart.googleapis.com/chart?chs={$size}x{$size}&cht=qr&chl=" . urlencode($data));
}

29. 兩座標距離(公里)

function distance_km($lat1, $lon1, $lat2, $lon2) {
    $theta = $lon1 - $lon2;
    $dist = sin(deg2rad($lat1))*sin(deg2rad($lat2)) + cos(deg2rad($lat1))*cos(deg2rad($lat2))*cos(deg2rad($theta));
    return acos($dist) * 6371; // 地球半徑 6371km
}

30. WHOIS 域名查詢

function whois($domain) {
    $servers = ['com'=>'whois.verisign-grs.com', 'net'=>'whois.verisign-grs.com', 'org'=>'whois.pir.org', 'tw'=>'whois.twnic.net.tw'];
    $tld = array_pop(explode('.', $domain));
    $server = $servers[$tld] ?? 'whois.iana.org';
    $fp = fsockopen($server, 43);
    fputs($fp, $domain . "\r\n");
    $res = '';
    while (!feof($fp)) $res .= fgets($fp, 128);
    fclose($fp);
    return $res;
}

資料庫與序列化類

31. MySQL 連線(PDO)

$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'user', 'pass', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES => false,
]);

32. JSON 編碼/解碼(支援中文不轉義)

$json = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$data = json_decode($json, true);

33. XML 解析(SimpleXML)

$xml = simplexml_load_string($str);
foreach ($xml->item as $it) echo $it->title . "\n";

工具與輔助類

34. 取得當前完整 URL

function current_url() {
    $https = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443;
    return ($https ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
}

35. 限速下載

function throttle_download($file, $rateKB = 100) {
    $fp = fopen($file, 'rb');
    header('Content-Type: application/octet-stream');
    header('Content-Length: ' . filesize($file));
    while (!feof($fp)) {
        echo fread($fp, $rateKB * 1024);
        flush();
        sleep(1);
    }
    fclose($fp);
}

36. 文字轉圖片(簡易驗證碼)

function text_to_png($text, $font = 5) {
    header('Content-Type: image/png');
    $im = imagecreate(200, 50);
    $bg = imagecolorallocate($im, 255, 255, 255);
    $color = imagecolorallocate($im, 0, 0, 0);
    imagestring($im, $font, 10, 15, $text, $color);
    imagepng($im);
    imagedestroy($im);
}

37. 當前頁面執行時間

function exec_time() {
    return microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
}

38. 陣列去重(保留鍵名)

$unique = array_unique($arr); // 索引陣列
$unique = array_unique($arr, SORT_REGULAR); // 關聯陣列保留鍵

39. 亂數字串(Token/密碼)

function random_str($len = 32) {
    return bin2hex(random_bytes($len / 2));
}

40. 密碼雜湊與驗證

$hash = password_hash($pwd, PASSWORD_DEFAULT); // 自動鹽、BCRYPT/ARGON2
if (password_verify($input, $hash)) { /* 登入成功 */ }

進階片段

41. cURL 並發多執行緒(curl_multi 封裝)

function curl_multi_fetch(array $urls, $options = []) {
    $mh = curl_multi_init();
    $chs = [];
    foreach ($urls as $i => $u) {
        $ch = curl_init($u);
        curl_setopt_array($ch, $options + [CURLOPT_RETURNTRANSFER => true]);
        curl_multi_add_handle($mh, $ch);
        $chs[$i] = $ch;
    }
    $running = null;
    do { curl_multi_exec($mh, $running); curl_multi_select($mh); } while ($running);
    $res = [];
    foreach ($chs as $i => $ch) {
        $res[$i] = ['content' => curl_multi_getcontent($ch), 'info' => curl_getinfo($ch)];
        curl_multi_remove_handle($mh, $ch); curl_close($ch);
    }
    curl_multi_close($mh);
    return $res;
}

42. 遞迴建立目錄(支援模式)

mkdir('/path/to/dir', 0755, true);

43. 檔案鎖(防併發衝突)

$fp = fopen('lockfile', 'w+');
if (flock($fp, LOCK_EX)) { /* 關鍵區 */ flock($fp, LOCK_UN); }
fclose($fp);

44. 記憶體使用量

echo 'Memory: ' . round(memory_get_usage(true) / 1024 / 1024, 2) . ' MB';

45. 類別自動載入(PSR-4 簡易版)

spl_autoload_register(function($class) {
    $file = __DIR__ . '/src/' . str_replace('\\', '/', $class) . '.php';
    if (file_exists($file)) require $file;
});

46. 除錯輸出(開發環境專用)

function dd($var) {
    echo '
'; var_dump($var); echo '
'; die; }

結語

這 46 個片段涵蓋 PHP 開發 80% 的高頻需求。建議:將常用函數整理為專案共用的 helpers.php,配合 Composer 自動載入;涉及第三方 API 的片段請務必填入正式金鑰並加入錯誤重試、日誌記錄;生產環境嚴禁使用 dd()、exec() 等除錯/高危函數。持續精簡、封裝、測試,打造屬於團隊的「PHP 瑞士刀」。

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