PHP Conference Japan 2024

向下不相容的變更

雖然大多數現有的 PHP 5 程式碼應該可以在沒有變更的情況下運作,但請注意一些向下不相容的變更。

透過陣列字面值將陣列定義為類別的屬性時,不會覆寫陣列鍵。

先前,如果明確鍵與隱含循序鍵相同,則宣告為類別屬性且混合了明確鍵和隱含鍵的陣列可能會導致陣列元素被靜默地覆寫。例如:

<?php
class C {
const
ONE = 1;
public
$array = [
self::ONE => 'foo',
'bar',
'quux',
];
}

var_dump((new C)->array);
?>

以上範例在 PHP 5.5 的輸出

array(2) {
  [0]=>
  string(3) "bar"
  [1]=>
  string(4) "quux"
}

以上範例在 PHP 5.6 的輸出

array(3) {
  [1]=>
  string(3) "foo"
  [2]=>
  string(3) "bar"
  [3]=>
  string(4) "quux"
}

json_decode() 的嚴格性

根據 JSON 規範,json_decode() 現在一律拒絕非小寫的 JSON 字面值 truefalsenull,並相應地設定 json_last_error()。先前,json_decode() 接受僅由這些值的大寫或混合大小寫組成的輸入。

此變更只會影響將無效 JSON 傳遞給 json_decode() 的情況:有效的 JSON 輸入不受影響,將繼續正常解析。

使用 SSL/TLS 時,串流包裝器現在預設會驗證對等憑證和主機名稱

所有加密的用戶端串流現在預設啟用對等驗證。預設情況下,這將使用 OpenSSL 的預設 CA 捆綁包來驗證對等憑證。在大多數情況下,與具有有效 SSL 憑證的伺服器通訊不需要進行任何更改,因為發行商通常會將 OpenSSL 配置為使用已知的良好 CA 捆綁包。

可以透過設定 openssl.cafile 或 openssl.capath 設定全域覆寫預設的 CA 捆綁包,或透過使用 cafilecapath 上下文選項根據每個請求覆寫。

雖然通常不建議,但可以透過將 verify_peer 上下文選項設定為 false 來停用請求的對等憑證驗證,並透過將 verify_peer_name 上下文選項設定為 false 來停用對等名稱驗證。

GMP 資源現在是物件

GMP 資源現在是物件。在 GMP 副檔名中實作的函數 API 並未更改,除非程式碼使用 is_resource() 或類似方法明確檢查資源,否則程式碼應可未經修改地執行。

Mcrypt 函數現在需要有效的金鑰和 IV

mcrypt_encrypt()mcrypt_decrypt()mcrypt_cbc()mcrypt_cfb()mcrypt_ecb()mcrypt_generic()mcrypt_ofb() 將不再接受大小不正確的金鑰或 IV,需要 IV 的區塊加密模式現在如果未提供 IV 將會失敗。

cURL 檔案上傳

使用 @file 語法的上傳現在需要將 CURLOPT_SAFE_UPLOAD 設定為 false。建議改用 CURLFile

新增筆記

使用者貢獻的筆記

此頁面沒有使用者貢獻的筆記。
To Top