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

PHP 開發必備:10 段高頻使用的實用代碼片段

     編輯:PHP 相關知識

PHP 開發必備:10 段高頻使用的實用代碼片段

在日常 PHP 開發中,有些功能模塊幾乎每個項目都會用到。本文精選了 10 個經典且實用的代碼片段,涵蓋郵件發送、編碼轉換、IP 獲取、日期驗證、郵箱驗證、XML 解析、數據庫連接、JSON 處理、時間戳轉換以及壓縮包解壓等核心場景,幫助開發者快速解決常見問題,提升編碼效率。

1. 使用 PHP Mail 函數發送 HTML 郵件

PHP 內置的 mail() 函數雖然簡單,但配合完整的 Header 即可發送支持 HTML 格式的郵件。注意設置正確的 MIME 版本、字符集與回覆地址,可大幅提高郵件送達率。

$to = "viralpatel.net@gmail.com";
$subject = "VIRALPATEL.net";
$body = "Body of your message here you can use HTML too. e.g. <br> <b> Bold </b>";
$headers = "From: Peter\r\n";
$headers .= "Reply-To: info@yoursite.com\r\n";
$headers .= "Return-Path: info@yoursite.com\r\n";
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
mail($to, $subject, $body, $headers);

2. URL 安全的 Base64 編碼與解碼

標準 Base64 包含 +、/、= 等特殊字符,在 URL 傳遞時會出現問題。以下兩個函數將其替換為 URL 安全字符,適用於 Token 生成、參數加密等場景。

function base64url_encode($plainText) {
    $base64 = base64_encode($plainText);
    $base64url = strtr($base64, '+/=', '-_,');
    return $base64url;
}
function base64url_decode($plainText) {
    $base64url = strtr($plainText, '-_,', '+/=');
    $base64 = base64_decode($base64url);
    return $base64;
}

3. 獲取客戶端真實 IP 地址

由於代理、負載均衡等網絡環境,$_SERVER['REMOTE_ADDR'] 往往不是真實客戶端 IP。此函數依次檢查 HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR,最後回退到 REMOTE_ADDR,較為可靠地獲取真實 IP。

function getRealIPAddr() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

4. 日期格式驗證 (YYYY-MM-DD)

使用正則表達式匹配格式,再調用 checkdate() 驗證日期合法性(如 2 月 30 日會返回 false),避免無效日期入庫。

function checkDateFormat($date) {
    if (preg_match("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts)) {
        return checkdate($parts[2], $parts[3], $parts[1]);
    }
    return false;
}

5. 郵箱地址格式驗證

雖然正則無法 100% 覆蓋 RFC 5322 標準,但以下模式能覆蓋 99% 的常見郵箱格式,適合表單前端驗證與後端二次校驗。

$email = $_POST['email'];
if (preg_match("~([a-zA-Z0-9!#$%&'*+-/=?^_`{|}~])@([a-zA-Z0-9-]).([a-zA-Z0-9]{2,4})~", $email)) {
    echo 'This is a valid email.';
} else {
    echo 'This is an invalid email.';
}

6. 使用 SimpleXML 輕松解析 XML

PHP 的 simplexml_load_string() 將 XML 字符串轉為對象,支持屬性訪問($record['name'])與節點遍歷($record->symbol),代碼極其簡潔。

$xml_string = "<?xml version='1.0'?> <moleculedb> <molecule name='Benzine'> <symbol>ben</symbol> <code>A</code> </molecule> <molecule name='Water'> <symbol>h2o</symbol> <code>K</code> </molecule> </moleculedb>";
$xml = simplexml_load_string($xml_string);
foreach ($xml->molecule as $record) {
    echo $record['name'], ' ';
    echo $record->symbol, ' ';
    echo $record->code, '<br />';
}

7. MySQL 數據庫連接封裝 (含 404 保護)

此腳本將連接參數集中管理,並通過 basename(__FILE__) 防止直接訪問,包含文件時自動建立連接,適合中小型項目快速接入。

<?php
if (basename(__FILE__) == basename($_SERVER['PHP_SELF'])) send_404();
$dbHost = "localhost";
$dbUser = "xxxx";
$dbPass = "xxxx";
$dbDatabase = "xxxx";
$db = mysql_connect("$dbHost", "$dbUser", "$dbPass") or die ("Error connecting to database.");
mysql_select_db("$dbDatabase", $db) or die ("Couldn't select the database.");
function send_404() {
    header('HTTP/1.x 404 Not Found');
    print '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">'."\n".
    '<html><head>'."\n".
    '<title>404 Not Found</title>'."\n".
    '</head><body>'."\n".
    '<h1>Not Found</h1>'."\n".
    '<p>The requested URL '. str_replace(strstr($_SERVER['REQUEST_URI'], '?'), '', $_SERVER['REQUEST_URI']). ' was not found on this server.</p>'."\n".
    '</body></html>'."\n";
    exit;
}
?>

8. JSON 數據編碼與解碼

PHP 5.2+ 內置 json_encode() / json_decode(),輕鬆實現數組與 JSON 字符串互轉,支持多維數組與對象嵌套,是 API 開發的基石。

$json_data = array('id'=>1, 'name'=>"rolf", 'country'=>'russia', "office"=>array("google","oracle"));
echo json_encode($json_data);

9. MySQL 時間戳轉換為 Unix 時間戳

直接在 SQL 中使用 UNIX_TIMESTAMP() 函數,將 DATETIME 或 TIMESTAMP 類型字段轉為整數時間戳,便於前端 JS 直接處理或跨系統傳輸。

$query = "select UNIX_TIMESTAMP(date_field) as mydate from mytable where 1=1";
$records = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($records)) {
    echo $row['mydate'];
}

10. 解壓縮 Zip 文件到指定目錄

調用系統 unzip 命令配合 PHP 文件操作,實現解壓後自動移動文件並清理臨時目錄,適合上傳包自動部署場景。

<?php
function unzip($location, $newLocation) {
    if (exec("unzip $location", $arr)) {
        mkdir($newLocation);
        for ($i = 1; $i < count($arr); $i++) {
            $file = trim(preg_replace("~inflating: ~", "", $arr[$i]));
            copy($location . '/' . $file, $newLocation . '/' . $file);
            unlink($location . '/' . $file);
        }
        return TRUE;
    }
    return FALSE;
}
?>
// 使用示例
<?php
include 'functions.php';
if (unzip('zipedfiles/test.zip', 'unziped/myNewZip'))
    echo 'Success!';
else
    echo 'Error';
?>

PHP 字符串常用操作速查

字符串聲明與輸出

推薦使用單引號聲明純文本字符串,性能略優於雙引號且無需轉義變量。

$str = 'Hello PHP';
echo $str;

strpos - 查找子串位置

返回子串首次出現的索引(從 0 開始),未找到返回 false。注意嚴格判斷 === false。

$str = 'Hello PHP';
echo strpos($str, 'o');  // 4
echo strpos($str, 'PH'); // 6

substr - 截取子串

指定起始位置與長度,省略長度則截取至末尾。負數起始位置表示從末尾倒數。

$str = 'Hello PHP';
$str1 = substr($str, 2, 3); // 'llo'
echo $str1;

str_split - 固定長度分割字符串

將字符串按指定長度切分為數組,默認長度 1。常用於逐字符處理或固寬格式化。

$str = 'Hello PHP';
$result = str_split($str);       // ['H','e','l','l','o',' ','P','H','P']
$result1 = str_split($str, 2);   // ['He','ll','o ','PH','P']
print_r($result1);

explode - 按分隔符分割

按指定字符(如空格、逗號)分割字符串,返回數組。比 str_split 更靈活,適合 CSV、標籤等解析。

$str = 'Hello PHP Java C# C++';
$result = explode(' ', $str);
print_r($result);

字符串連接

使用點號 . 連接,或雙引號內直接解析變量。後者語法更簡潔,但僅限雙引號字符串。

$str = 'Hello PHP Java C# C++';
$num = 100;
$str1 = $str . '<br/>Objective-C ' . $num;
$str2 = "$str<br/>Objective-C $num";
echo $str1;
echo $str2;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved