整理高頻 PHP 面試題,附標準答案與核心考點解析,適合初中級工程師查漏補缺。
echo date('Y-m-d H:i:s', strtotime('-1 day'));
考點: date() 格式化字符、`strtotime()` 相對時間解析。常用格式:Y 年、m 月、d 日、H 24時、i 分、s 秒。
| 函數/語句 | 類型 | 返回值 | 輸出內容 | 典型用途 |
|---|---|---|---|---|
echo | 語言構造 | 無 | 一或多個字符串 | 模板輸出、性能敏感場景 |
print | 語言構造 | 恒為 1 | 單個字符串 | 表達式上下文需返回值時 |
print_r | 函數 | bool | 數組/對象結構(可讀) | 調試輸出 |
var_dump | 函數 | 無 | 類型+值+長度(詳盡) | 深度調試、類型檢查 |
var_export | 函數 | mixed | 合法 PHP 代碼表示 | 導出配置、緩存生成代碼 |
strrev($str); // 僅支持單字節字符集,UTF-8 中文會按字節反轉導致亂碼
// UTF-8 安全反轉
function mb_strrev($str) {
$chars = preg_split('//u', $str, -1, PREG_SPLIT_NO_EMPTY);
return implode('', array_reverse($chars));
}
ANALYZE TABLE 更新統計信息EXPLAIN 分析執行計劃、避免 SELECT *、LIMIT 分頁優化(游標/延遲關聯)、拆分大事務、緩存熱點查詢innodb_buffer_pool_size 設置物理內存 60-80%、innodb_flush_log_at_trx_commit=2 平衡性能安全、慢查詢日誌分析// 客戶端 IP (考慮代理)
function getClientIp() {
$headers = ['HTTP_X_FORWARDED_FOR', 'HTTP_X_REAL_IP', 'HTTP_CLIENT_IP', 'REMOTE_ADDR'];
foreach ($headers as $h) {
if (!empty($_SERVER[$h])) {
$ips = explode(',', $_SERVER[$h]);
return trim($ips[0]);
}
}
return 'unknown';
}
// 服務器公網 IP
$serverIp = gethostbyname($_SERVER['SERVER_NAME']);
// 或調用外部 API: file_get_contents('https://api.ipify.org')
// php.ini 全局設置
session.gc_maxlifetime = 86400 ; 24小時
session.cookie_lifetime = 86400 ; 瀏覽器關閉不銷毀
// 代碼動態設置 (需在 session_start() 前)
ini_set('session.gc_maxlifetime', 86400);
ini_set('session.cookie_lifetime', 86400);
session_set_cookie_params(86400);
session_start();
SELECT username, posts
FROM members
ORDER BY posts DESC
LIMIT 10;
原題錯誤: GROUP BY id 無意義,count(posts) 應為直接排序字段 posts。
echo $_SERVER['SCRIPT_NAME'] . '?' . $_SERVER['QUERY_STRING'];
// 或
echo 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
mysql_fetch_row():返回**數字索引數組** [0=>'val1', 1=>'val2']mysql_fetch_array():返回**混合索引數組** [0=>'val1', 'field1'=>'val1', 1=>'val2', 'field2'=>'val2'],默認 MYSQL_BOTH,可指定 MYSQL_NUM/MYSQL_ASSOC注意: `mysql_*` 已移除,請用 mysqli_fetch_row()/mysqli_fetch_array() 或 PDO fetch(PDO::FETCH_NUM)/FETCH_ASSOC/FETCH_BOTH。
$str1 = null; $str2 = false; var_dump($str1 == $str2); // true (鬆散比較)
$str3 = ''; $str4 = 0; var_dump($str3 == $str4); // true
$str5 = 0; $str6 = ''; var_dump($str5 === $str6); // false (嚴格比較: 類型不同)
鐵律: **永遠使用 `===` / `!==`**,除非極其確定需要類型轉換語義。
$test = 'hello';
$abc = &$test; // $abc 引用 $test
unset($test); // 僅銷毀變量名 $test,引用內容 'hello' 仍存在,$abc 可訪問
echo $abc; // 輸出 'hello'
核心: `unset` 斷開「變量名 → 內容」的綁定,**不銷毀內容本身**(引用計數 > 0 時)。
—— 未完待續,下期深入 OOP、框架原理、性能調優、安全防禦 ——