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

PHP 開發實戰總結:Linux 環境、Shell 調用、編碼規範、返回值、安全、鎖、隊列、錯誤級別

     編輯:PHP 綜合知識

1. Linux 伺服器標準化部署

  • 磁盤規劃:/ (系統 10-20G) + /home (數據/代碼/日誌,剩餘空間)
  • 登入安全:堡壘機/跳板機 → 目標服務器,全程審計;Token/RSA SecurID 双因子認證
  • 標準棧:Linux + Nginx + PHP-FPM + MySQL/Redis

2. PHP 調用 Shell 指令

<?php
// 執行後台任務、系統工具、跨語言腳本
$output = shell_exec('python3 /scripts/process.py --id=123 2>&1');
$ret = exec('/usr/bin/wkhtmltopdf input.html output.pdf', $out, $code);

// 安全原則
// 1. 絕不直接拼接用戶輸入到命令
// 2. 使用 escapeshellarg() / escapeshellcmd()
// 3. 固定命令白名單,參數化傳遞
$safeArg = escapeshellarg($userInput);
exec("/usr/bin/convert {$safeArg} -resize 200x200 output.jpg");
?>

3. 編碼規範與團隊協作

  • IDE 統一 (PhpStorm 推薦)、編碼 UTF-8 無 BOM、縮進 4 空格
  • PSR-1/PSR-12 基礎規範,團隊共識優於個人偏好
  • Git Hooks (pre-commit) 強制 CodeSniffer 檢查
  • Code Review 文化:所有合併需至少 1 人審閱

4. 函數返回值設計模式

<?php
// 統一返回結構
function getUser($id) {
    // 1. 先查緩存
    $cacheKey = "user:{$id}";
    if ($data = Redis::get($cacheKey)) return ['code'=>0, 'data'=>json_decode($data,true)];
    
    // 2. 查資料庫
    $user = DB::table('users')->find($id);
    if (!$user) return ['code'=>404, 'msg'=>'用戶不存在'];
    
    // 3. 寫緩存
    Redis::setex($cacheKey, 3600, json_encode($user));
    return ['code'=>0, 'data'=>$user];
}

// 錯誤碼規範:0=成功, 4xx=客戶端錯誤, 5xx=服務端錯誤, 業務碼 1000+
?>

5. 資料處理安全流程

  1. 接收:$input = $_POST['key'] ?? ''; (不再盲目 addslashes)
  2. 驗證:Validator::make($input, ['key'=>'required|string|max:50'])->validate();
  3. 入庫:預處理語句 / ORM 參數綁定 (自動防注入)
  4. 輸出:htmlspecialchars($str, ENT_QUOTES, 'UTF-8') 防 XSS

6. 鎖機制落地

參考《PHP 高併發鎖機制實作》一文,已在生產環境穩定運行:CacheLock 類支援 EAccelerator/文件雙模式,解決報表生成衝突、緩存重建穿透。

7. 隊列分發 (MQ)

  • 使用 RabbitMQ/Kafka 進行異步解耦:訂單處理、郵件發送、日誌聚合、圖片處理
  • 生產者 → Exchange → Queue → 消費者 (多實例水平擴展)
  • 死信隊列處理失敗重試、告警

8. 錯誤級別最佳實踐

<?php
// 開發環境
error_reporting(E_ALL & ~E_STRICT & ~E_DEPRECATED); // 嚴格模式,強制變數初始化
ini_set('display_errors', 1);

// 生產環境
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '/var/log/php/error.log');

// 自定義錯誤處理器
set_error_handler(function($severity, $message, $file, $line) {
    if (!(error_reporting() & $severity)) return false;
    throw new ErrorException($message, 0, $severity, $file, $line);
});
?>

9. 安全防護體系

  • 內容審核:敏感詞過濾 (DFA 算法/AC 自動機)、圖片識別 (OCR/深度學習)、用戶行為頻率限制 (滑動窗口/令牌桶)
  • ID 加密:內部自增 ID 對外暴露需加密 (Hashids/AES/雪花算法),防止遍歷爬蟲、業務邏輯推測
  • SQL 注入/XSS/CSRF:框架級防護 + 定期滲透測試
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved