国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php提示PHP class x has no unserializer解決辦法

2024-05-04 21:56:32
字體:
來源:轉載
供稿:網友

PHP已經出到了5.3.8穩定版本,于是乎準備將公司生產服務器上的PHP從5.2.17升級到5.3.8,在測試服務器上調試的時候卻發現了一個詭異的問題:

把PHP環境裝好后,原先能在5.2.17正常運行的代碼報錯了,提示PHP class x has no unserializer,而同一套代碼在同服務器上使用5.3.8則沒有任何問題.Google一下了發現沒有什么有用的信息,看來我是遇到冷門問題了,于是開始逐步debug檢查,發現報錯的地方位于使用memcache取數據的部分,在取出緩存在memcache中的數據時提示我的類沒有反序列化功能,而此行代碼運行在5.3.8的時候卻沒有任何問題. 

鑒于唯一的線索是這個反序列化的提示了,搜索了一下php官方相關序列化的信息,首先找到了序列化接口Serializable的介紹,在這里我注意到該接口有一個unserializ方法,這個是用于反序列化類時調用的借口. 同時,php的memcache擴展在把php數據對象存到memcache時是會將其序列化的,難道是我自己使用的對象沒有實現Serializable接口的問題?追查了一下代碼發現我存在memcache中的類是繼承于Array_Object類,于是乎跑到官方Array_Object的介紹頁面一看,果然如此.

Array_Object從5.3.0開始就實現了Serializable接口,而5.2是沒有實現的。到這里,這個問題的原因也就明朗了,分析如下:

程序在兩個版本的PHP下運行卻使用同一個memcache緩存池,我先測試的是5.3.8版本,那么存進去的是PHP5.3的Array_Object對象,該對象在5.3下面可以正常序列化和反序列化,后來我又去訪問了運行在PHP5.2下面的程序,這是在memcache中已經有了緩存對象,所以5.2讀出來的是5.3中序列化的Array_Object對象,而在5.2中Array_Object是沒有實現Serializable接口的,那么在反序列化時就會出現錯誤,也是就是提示PHP class x has no unserializer的原因。

解決這個問題的方法很簡單,給每個程序使用不同的緩存池,避免產生數據污染和版本兼容問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屯留县| 沙湾县| 延庆县| 延吉市| 谢通门县| 商河县| 清丰县| 宜丰县| 新昌县| 阿荣旗| 博白县| 海伦市| 内江市| 新平| 大连市| 玉山县| 龙门县| 阿合奇县| 新绛县| 曲沃县| 报价| 乌恰县| 玛纳斯县| 合水县| 景洪市| 广宁县| 乃东县| 林芝县| 宾阳县| 焦作市| 延安市| 黄山市| 大英县| 永昌县| 德化县| 横峰县| 藁城市| 边坝县| 余干县| 哈巴河县| 海口市|