多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > php提示PHP class x has no unserializer解決辦法

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

來源:程序員人生   發布時間:2014-01-31 19:40:45 閱讀次數:3651次

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的原因。

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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产在线成人一区二区 | 日本护士18 | 日韩欧美亚洲综合一区二区 | 美女福利视频国产片 | 青青国产成人精品视频 | 国产成人精品久久综合 | 久久v| 成 人国产在线观看高清不卡 | 日本一区视频在线观看 | 爱爱小视频免费体验区在线观看 | 中文字幕成人 | 日本网站免费看 | xart欧美一区在线播放 | 亚洲国产欧美日韩 | 国产不卡毛片 | 中文字幕中文字幕中中文 | 最近高清中文在线字幕在线观看 | 久久久久久日本一区99 | 欧美精品 在线观看 | 久久综合久久久 | 日本午夜在线观看 | 国产或人精品日本亚洲77美色 | 伊人影视 | 精品一区二区乱码久久乱码 | 日本天堂在线视频 | 欧美日韩精品一区二区 | 国产a国产片色老头 | 国产成人一区 | 女人18毛片特级一级免费视频 | 国产欧美日韩综合二区三区 | 五月天久久久 | 男女羞羞视频免费 | 一级网 | 亚洲成av人片在线观看无码 | 欧美在线一级精品 | 99re这里有免费视频精品 | 国产精品第一页爽爽影院 | 成人看片毛片免费播放器 | 国产精品免费视频一区一 | 国产精品v | 日本高清免费毛片久久看 |