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

PHP 核心函數速查手冊:MySQL、文件系統、日期時間、字符串、數學、Session、數組七大類完整整理

     編輯:PHP 綜合知識

PHP 內建上千個函數,掌握高頻核心函數是提升開發效率的關鍵。本文將最常用的函數按功能分類整理,提供語法、參數說明、實戰示例,適合作為開發時的桌面速查手冊。

一、MySQL 數據庫操作(mysqli/PDO 推薦,mysql_* 已棄用)

注意:mysql_* 系列函數自 PHP 5.5 棄用,PHP 7.0 移除。現代項目請使用 mysqli 或 PDO。本節僅作歷史代碼維護參考。

函數用途現代替代方案
mysql_connect()建立連接new mysqli() / new PDO()
mysql_select_db()選擇數據庫mysqli_select_db() / PDO::exec()
mysql_query()執行 SQLmysqli_query() / PDO::query()
mysql_fetch_array()獲取結果行(數組)mysqli_fetch_array() / PDOStatement::fetch()
mysql_fetch_assoc()獲取關聯數組mysqli_fetch_assoc() / PDO::FETCH_ASSOC
mysql_fetch_object()獲取對象mysqli_fetch_object() / PDO::FETCH_OBJ
mysql_num_rows()結果行數mysqli_num_rows() / rowCount()
mysql_insert_id()最後自增 IDmysqli_insert_id() / PDO::lastInsertId()
mysql_data_seek()移動結果指針mysqli_data_seek()
mysql_close()關閉連接mysqli_close() / PDO = null

現代 PDO 範例

<?php
$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,
]);

// 預處理語句(防注入)
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ? AND status = ?');
$stmt->execute([$email, 1]);
$user = $stmt->fetch();

// 事務
$pdo->beginTransaction();
try {
    $pdo->exec("INSERT INTO logs (msg) VALUES ('start')");
    $pdo->exec("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollBack();
    throw $e;
}
?>

二、文件系統操作

函數用途示例
fopen()打開文件/URL$fp = fopen('data.txt', 'r'); $fp = fopen('https://api.example.com', 'r');
fclose()關閉文件指針fclose($fp);
fread()讀取指定長度$content = fread($fp, filesize('data.txt'));
fgets()按行讀取while ($line = fgets($fp)) { ... }
fwrite() / fputs()寫入數據fwrite($fp, "Hello\n");
file_get_contents()一次性讀取整文件$content = file_get_contents('data.txt');
file_put_contents()一次性寫入文件file_put_contents('log.txt', "msg\n", FILE_APPEND);
file()讀取為數組(按行)$lines = file('data.txt', FILE_IGNORE_NEW_LINES);
file_exists()檢查文件存在if (file_exists('config.php')) ...
is_file() / is_dir()判斷文件/目錄is_dir('uploads') && mkdir('uploads', 0755, true);
filesize()獲取文件大小$size = filesize('large.zip');
unlink()刪除文件unlink('temp.tmp');
mkdir()創建目錄(遞歸)mkdir('a/b/c', 0755, true);
rmdir()刪除空目錄rmdir('empty_dir');
copy()複製文件copy('src.jpg', 'dst.jpg');
rename()移動/重命名rename('old.txt', 'new.txt');
pathinfo()解析路徑信息pathinfo('/a/b/file.txt') → ['dirname','basename','extension','filename']
realpath()獲取絕對路徑realpath('./config.php');
glob()模式匹配文件foreach (glob('*.php') as $f) ...
scandir()掃描目錄$files = scandir('.');
stat() / fstat()文件狀態信息$info = stat('file.txt'); // size, mtime, mode...
filemtime()修改時間filemtime('cache.dat')
touch()創建/更新時間戳touch('flag.lock');

實用片段:安全讀寫大文件

<?php
// 大文件逐行處理(內存友好)
$fp = fopen('huge.log', 'r');
while (($line = fgets($fp)) !== false) {
    if (strpos($line, 'ERROR') !== false) {
        processErrorLine($line);
    }
}
fclose($fp);

// 原子寫入(防止部分寫入被讀取)
$tmp = 'config.php.tmp.' . uniqid();
file_put_contents($tmp, $newContent);
rename($tmp, 'config.php');  // 原子操作
?>

三、日期時間處理

核心函數

函數用途示例
time()當前 Unix 時間戳1705300800
date()格式化本地時間date('Y-m-d H:i:s')
gmdate()格式化 GMT 時間gmdate('Y-m-d H:i:s')
mktime()構建時間戳mktime(0,0,0,12,25,2024)
strtotime()解析英文時間描述strtotime('+1 week'), strtotime('last Monday')
getdate()獲取日期組件數組['year'=>2024, 'mon'=>1, 'mday'=>15, ...]
checkdate()驗證日期合法性checkdate(2, 29, 2024) // true
DateTime 類面向對象操作(推薦)new DateTime('now', new DateTimeZone('Asia/Shanghai'))

date() 格式字符完整表

字符說明示例
Y4位年份2024
y2位年份24
m月份(01-12)01
n月份(1-12)1
F月份全稱January
M月份縮寫Jan
d日期(01-31)15
j日期(1-31)15
l星期全稱Monday
D星期縮寫Mon
w星期(0-6, 0=周日)1
H24小時(00-23)14
G24小時(0-23)14
h12小時(01-12)02
g12小時(1-12)2
i分鐘(00-59)30
s秒(00-59)45
aam/pmpm
AAM/PMPM
UUnix 時間戳1705300800
cISO 86012024-01-15T14:30:45+08:00
rRFC 2822Mon, 15 Jan 2024 14:30:45 +0800

DateTime 現代用法(強烈推薦)

<?php
$dt = new DateTime('now', new DateTimeZone('Asia/Shanghai'));
echo $dt->format('Y-m-d H:i:s');  // 2024-01-15 14:30:45

// 運算
$dt->modify('+1 month');
$dt->add(new DateInterval('P7D'));  // 加 7 天
$dt->sub(new DateInterval('P1Y'));  // 減 1 年

// 差值
$diff = $dt1->diff($dt2);
echo $diff->days;       // 總天數
echo $diff->format('%y年%m月%d天 %h小時%i分');

// 時區轉換
$dt->setTimezone(new DateTimeZone('UTC'));
echo $dt->format('c');

// 解析
$dt = DateTime::createFromFormat('Y/m/d H:i', '2024/01/15 14:30');
?>

四、字符串處理

函數用途示例
strlen()字節長度strlen('中文') // 6 (UTF-8)
mb_strlen()字符長度mb_strlen('中文', 'UTF-8') // 2
substr()截取子串(字節)substr('abcdef', 1, 3) // 'bcd'
mb_substr()截取子串(字符)mb_substr('中文測試', 1, 2, 'UTF-8') // '文測'
strpos() / mb_strpos()查找位置strpos('hello world', 'world') // 6
str_replace()替換(區分大小寫)str_replace('a', 'b', 'abc') // 'bbc'
str_ireplace()替換(不區分大小寫)str_ireplace('A', 'b', 'Abc') // 'bbc'
preg_replace()正則替換preg_replace('/\d+/', '*', 'a1b2') // 'a*b*'
explode()分割為數組explode(',', 'a,b,c') // ['a','b','c']
implode() / join()數組連接為字符串implode('-', ['a','b','c']) // 'a-b-c'
trim() / ltrim() / rtrim()去除空白字符trim(" hi ") // 'hi'
htmlspecialchars()HTML 轉義(防 XSS)htmlspecialchars('<script>', ENT_QUOTES, 'UTF-8')
htmlentities()所有字符實體化htmlentities('中文', ENT_QUOTES, 'UTF-8')
nl2br()換行轉 <br>nl2br("line1\nline2")
strip_tags()去除 HTML 標籤strip_tags('<b>bold</b>') // 'bold'
md5() / sha1() / hash()哈希hash('sha256', 'data')
password_hash() / verify()密碼哈希(推薦)password_hash('pwd', PASSWORD_DEFAULT)
strtolower() / strtoupper()大小寫轉換mb_strtolower('ABC', 'UTF-8')
ucfirst() / ucwords()首字母/單詞首字母大寫ucwords('hello world') // 'Hello World'
sprintf() / vsprintf()格式化字符串sprintf('%04d-%02d-%02d', 2024, 1, 15)
parse_str()解析查詢字符串parse_str('a=1&b=2', $arr)
http_build_query()構建查詢字符串http_build_query(['a'=>1, 'b'=>2])

五、數學運算

函數用途示例
abs()絕對值abs(-3.14) // 3.14
ceil()向上取整ceil(4.1) // 5
floor()向下取整floor(4.9) // 4
round()四捨五入round(3.14159, 2) // 3.14
rand() / mt_rand()隨機整數mt_rand(1, 100)
random_int()加密安全隨機整數random_int(1, 100)
min() / max()最小/最大值max([3, 7, 2]) // 7
pow() / **冪運算2 ** 10 // 1024
sqrt()平方根sqrt(16) // 4
sin() / cos() / tan()三角函數(弧度)sin(M_PI_2) // 1
deg2rad() / rad2deg()角度弧度轉換deg2rad(180) // M_PI
pi() / M_PI圓周率常量M_PI // 3.1415926535898
is_nan() / is_infinite()判斷非數字/無窮大is_nan(acos(2)) // true
number_format()格式化數字number_format(1234.56, 2, '.', ',') // '1,234.56'
bcadd() / bccomp() / ...高精度計算(BCMath)bcadd('0.1', '0.2', 10) // '0.3'

六、Session 會話管理

函數用途示例
session_start()啟動/恢復會話session_start(); // 必須在輸出前調用
$_SESSION會話數據超全局變量$_SESSION['user_id'] = 123;
session_destroy()銷毀會話session_destroy();
session_unset()釋放所有會話變量session_unset();
session_regenerate_id()重新生成 Session IDsession_regenerate_id(true); // 防固定攻擊
session_set_cookie_params()設置 Cookie 參數session_set_cookie_params(3600, '/', '.example.com', true, true);
session_name()獲取/設置會話名稱session_name('MYAPP');
session_id()獲取/設置 Session IDsession_id('custom_id');
session_status()獲取會話狀態session_status() === PHP_SESSION_ACTIVE

最佳實踐

<?php
// 安全配置(放在 session_start() 之前)
ini_set('session.cookie_httponly', 1);      // 禁止 JS 訪問
ini_set('session.cookie_secure', 1);        // 僅 HTTPS 傳輸
ini_set('session.use_strict_mode', 1);      // 嚴格模式
ini_set('session.use_only_cookies', 1);     // 僅 Cookie 傳遞 ID
ini_set('session.cookie_samesite', 'Lax');  // CSRF 防護

session_start();

// 登入時重新生成 ID
if ($loginSuccess) {
    session_regenerate_id(true);
    $_SESSION['user'] = $userData;
}

// 權限檢查
function requireLogin() {
    if (empty($_SESSION['user'])) {
        header('Location: /login.php');
        exit;
    }
}
?>

七、數組操作

函數用途示例
count()元素個數count($arr)
array_key_exists() / isset()檢查鍵存在isset($arr['key'])
in_array()檢查值存在in_array('value', $arr, true) // 嚴格模式
array_push() / []壓入元素$arr[] = 'new';
array_pop()彈出最後元素$last = array_pop($arr);
array_shift() / array_unshift()隊首操作array_unshift($arr, 'first');
array_merge()合併數組array_merge($a, $b)
array_combine()鍵值組合array_combine($keys, $values)
array_keys() / array_values()提取鍵/值array_keys($assocArr)
array_flip()交換鍵值array_flip(['a'=>1, 'b'=>2]) // [1=>'a', 2=>'b']
array_reverse()反轉數組array_reverse([1,2,3]) // [3,2,1]
array_slice()切片array_slice($arr, 1, 3)
array_splice()剪切/替換array_splice($arr, 1, 2, ['x','y'])
array_map()映射轉換array_map('trim', $arr)
array_filter()過濾array_filter($arr, fn($v) => $v > 10)
array_reduce()歸約array_reduce($arr, fn($c,$v)=>$c+$v, 0)
array_walk()遍歷修改array_walk($arr, fn(&$v) => $v *= 2)
array_column()提取列array_column($users, 'name')
array_unique()去重array_unique([1,2,2,3]) // [1,2,3]
sort() / rsort()索引數組排序sort($arr); rsort($arr);
asort() / arsort()關聯數組按值排序asort($arr); // 保持鍵值關係
ksort() / krsort()關聯數組按鍵排序ksort($arr);
usort() / uasort() / uksort()自定義比較排序usort($arr, fn($a,$b) => $a <=> $b);
shuffle()隨機打亂shuffle($arr);
range()生成範圍數組range(1, 10) // [1..10]
list() / [] 解構解包賦值[$a, $b, $c] = [1,2,3];
json_encode() / json_decode()JSON 轉換json_encode($arr, JSON_UNESCAPED_UNICODE)

速查建議

  1. 收藏本文:作為日常開發快速查閱
  2. 優先現代 API:PDO、DateTime、password_hash、random_int、mb_* 系列
  3. 查閱官方文檔:php.net 獲取最新參數、返回值、版本要求
  4. 善用 IDE 提示:PHPStorm/VS Code + PHP Intelephense 可大幅減少查閱
  5. 建立團隊片段庫:將常用模式封裝為代碼片段

熟練掌握這些核心函數,能讓您的 PHP 代碼更簡潔、更健壯、更具可維護性。

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