基礎語法與核心概念(1-15 題)
- 前一天日期格式化:
date("Y-m-d H:i:s", strtotime("-1 day"))
- echo/print/print_r 差異:echo 多參數無回傳;print 單參數回傳 1;print_r 印結構化陣列/物件。
- 模板引擎:Smarty、Blade、Twig、PHPLib。
- 版本控制工具:Git、SVN、CVS。
- 字串反轉:英文
strrev();中文需 mb_substr() 逐字元反轉或 array_reverse()。
- MySQL 優化:索引、查詢優化、分庫分表、讀寫分離、緩存、引擎選擇。
- PHP 全名:Hypertext Preprocessor。
- MySQL 當前時間/格式化:
NOW(), CURRENT_TIMESTAMP();DATE_FORMAT()。
- 中文截取無亂碼:
mb_substr($str, 0, 10, 'UTF-8')。
- 版本控制/模板引擎使用經驗:實務經驗描述。
- 得意專案描述:STAR 原則敘述。
- 大流量解決方案:緩存(Redis/Memcached)、CDN、負載均衡、資料庫分庫分表、異步佇列、靜態化、查詢優化。
- 取得 Client/Server IP:
$_SERVER['REMOTE_ADDR'], $_SERVER['SERVER_ADDR']。
- include/require 差異:require 致命錯誤停止;include 警告繼續。require 載入較早。
_once 防重複載入。
- 修改 Session 生命週期:
session_set_cookie_params()、ini_set('session.gc_maxlifetime', ...)。
Web 基礎與安全(16-30 題)
- 取得網頁內容:
file_get_contents()、cURL。
- HTTP 1.0 狀態碼 401/404 header 寫法:
header("HTTP/1.0 404 Not Found");FastCGI 下用 header("Status: 404 Not Found")。
- Heredoc 結束標記:須獨佔一行、無縮進、分號可選。
- ASP/PHP/JSP 優缺點:ASP 綁定 IIS/Windows;PHP/JSP 跨平台、開源生態豐富。
- MVC 認識:Model(資料/業務)、View(呈現)、Controller(調度/請求處理)。
- SQL:發文最多前 10 會員:
SELECT id, username FROM members ORDER BY posts DESC LIMIT 10(MySQL/PostgreSQL)或 TOP 10(SQL Server)。
- 傳值 vs 傳引用:
&$var 為引用;函數參數用引用可修改外部變數;多返回值場景適用。
- error_reporting 作用:設定錯誤回報等級(如 E_ALL & ~E_NOTICE)。
- Email 格式驗證:
filter_var($email, FILTER_VALIDATE_EMAIL) 或 Regex。
- 取得腳本路徑與參數:
$argv, $argc(CLI);Web 下用 $_SERVER['SCRIPT_FILENAME']。
- 修改 Session 生命週期(重複):同上。
- JS 彈窗/焦點:
alert(), confirm(), prompt();focus()。
- JS 跳轉/引入外部 JS:
window.location.href='#';<script src="#"></script>。
- foo() vs @foo():
@ 抑制錯誤訊息(含 Warning/Notice)。
物件導向與資料庫(31-45 題)
- 宣告空類別:
class MyClass { }
- 實例化:
$obj = new MyClass();
- 存取屬性:
$obj->prop(public);私有屬性需 Getter/Setter。
- mysql_fetch_row vs mysql_fetch_array:前者僅數值索引;後者可同時有數值與關鍵字索引(
MYSQL_ASSOC, MYSQL_BOTH)。
- GD 庫用途:動態圖片建立、處理(縮圖、驗證碼、水印、圖表)。
- 輸出 HTML 方式:
echo, print, Heredoc, 直接跳出 PHP 標籤。
- 開啟檔案函數:
fopen()(c 選項)。
- 陣列加入元素錯誤寫法:
array_add() 不存在;正確為 $arr[]=, array_push()。
- 變數作用域題:函數內未
global $num 時不影響外部,輸出 10。
- SQL 查詢並輸出:參考範例程式碼。
- 類別使用與 MD5 雙重加密:
md5(md5($num)."En")。
- SQL Insert/Update/Delete:標準語法。
- 資料類型意義:int, char(定長), varchar(變長), datetime, text(長文本)。char 固定長度、varchar 實際長度+1-2 字節。
- 自增欄位屬性:
AUTO_INCREMENT。
- 三元運算子輸出:
$a = $b > $c ? 4 : 5; → 4。
- isset/empty:檢測變數是否設定/是否為空。
- 結果集行數:
mysql_num_rows()(mysqli: $result->num_rows)。
- 陣列第一個元素:
$arr[0], reset($arr), current($arr), array_shift($arr)。
- 陣列合併字串:
implode(',', $arr)。
- 字串第一字元:
$str[0], substr($str,0,1)。
- PHP 連接 SQL Server/Oracle:可,需對應驅動(sqlsrv, oci8, PDO)。
- PHP 5 存取修飾符:public, protected, private。
- 建構子/解構子:
__construct(), __destruct()。
程式實作練習
1. 從 URL 取副檔名
$url = "https://www.sina.com.cn/abc/de/fg.php?id=1";
$path = parse_url($url, PHP_URL_PATH);
$ext = pathinfo($path, PATHINFO_EXTENSION);
echo $ext; // php
2. 計算兩檔案相對路徑
function getRelativePath($target, $base) {
$t = explode('/', trim($target, '/'));
$b = explode('/', trim($base, '/'));
$i = 0;
while (isset($t[$i]) && isset($b[$i]) && $t[$i] === $b[$i]) $i++;
$up = count($b) - $i;
return str_repeat('../', $up) . implode('/', array_slice($t, $i));
}
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
echo getRelativePath($b, $a); // ../../12/34/c.php
3. 遞迴掃描目錄所有檔案
function scanAll($dir) {
$result = [];
$items = scandir($dir);
foreach ($items as $item) {
if ($item === '.' || $item === '..') continue;
$path = "$dir/$item";
if (is_dir($path)) {
$result[$item] = scanAll($path);
} else {
$result[] = $item;
}
}
return $result;
}
print_r(scanAll('/home/test/sql'));