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

PHP 代碼優化與常見問題總結:效能、安全、寫法細節 15 條實戰經驗

     編輯:PHP 綜合知識

1. 函數傳回陣列用 return,勿用 global

// 好
function userloginfo($usertemp) {
    $detail = explode("|", $usertemp);
    return $detail;
}
$login = userloginfo($userdb);

// 差
function userloginfo($usertemp) {
    global $detail;
    $detail = explode("|", $usertemp);
}
userloginfo($userdb);

2. 取得專案根 URL 高效寫法

$urlarray = explode('/', $_SERVER['REQUEST_URI']);
unset($urlarray[count($urlarray)-1]);
$base_url = 'https://' . $_SERVER['HTTP_HOST'] . implode('/', $urlarray);

3. 數值比較用恆等 === 較 == 快

if ($a === $b) $c = $a; // 型別也相同時更快

4. MySQL 查詢優先用 WHERE IN,少用 LIMIT 深分頁

LIMIT 100000, 10 需掃描前 10 萬行;WHERE id IN (...) 連續 ID 查詢極快,非連續首次稍慢但有快取加成。

5. Windows Server 穩定性不如 Linux/Unix

生產環境首選 Linux。

6. 輸出前開啟 ob_start() 加速輸出

ob_start();           // 通用
ob_start('ob_gzhandler'); // Linux 下啟用 gzip 壓縮更快

7. 判斷邏輯:正向用 if($a==值),反向用 if(empty($a))

效能較好且語意清晰。

8. != 與 <> 效能相當

任選其一保持專案一致。

9. 單雙引號字串效能差異可忽略

實測 $a="..."; 與 $a='...'; 無顯著差異,重點在可讀性與跳脫需求。

10. 規範 SQL 寫法利於解析器優化

大寫關鍵字、明確欄位名、避免 SELECT *。

11. setcookie 即時生效技巧

if ($online) {
    $online1 = $online; // 先賦值給變數
    setcookie('online1', $online, $cookietime, $ckpath, $ckdomain, $secure);
}
// 直接 setcookie 需重新整理才生效

12. 檔案讀取用 fopen+flock+fread,勿用 file()/fget()

$handle = fopen($filename, 'rb');
flock($handle, LOCK_SH);
$data = fread($handle, filesize($filename));
fclose($handle);

速度與穩定性雙贏。

13. 截斷中英文混排字串避免亂碼

function substrs($content, $length) {
    if (strlen($content) > $length) {
        $num = 0;
        for ($i = 0; $i < $length - 3; $i++) {
            if (ord($content[$i]) > 127) $num++;
        }
        $content = ($num % 2 == 1) ? substr($content, 0, $length - 4) : substr($content, 0, $length - 3);
        $content .= ' ...';
    }
    return $content;
}

14. 程式中屏蔽大寫字母(避免帳號混淆)

for ($asc = 65; $asc <= 90; $asc++) {
    if (strrpos($regname, chr($asc)) !== false) {
        $error = "禁止使用大寫字母";
        $reg_check = 0;
    }
}

15. 穩定高效讀檔函數(替代 file/fgets)

function openfile($filename, $method = "rb") {
    $handle = @fopen($filename, $method);
    @flock($handle, LOCK_SH);
    $filedata = @fread($handle, filesize($filename));
    @fclose($handle);
    $filedata = str_replace("\n", "\n<ofstar:>", $filedata);
    $filedb = explode("<ofstar:>", $filedata);
    $count = count($filedb);
    if ($filedb[$count-1] == '') unset($filedb[$count-1]);
    return $filedb;
}

結語

以上皆為實測驗證經驗,歡迎實測後討論交流。

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