看板 PHP 關於我們 聯絡資訊
: : 感覺上是環境變數的問題 : 查一下你的程式裡面有沒有 override_function 把 serialize 換掉了。 : : 請問有人遇過相同的問題嗎~~~ 推 tn801534:我貼的都是真的執行結果喔 ~ 06/04 03:10 → tn801534:目前好像是發現不同位元的INT_MAX不同的關係 06/04 03:11 建議把 php 版本升起來看看還會不會有問題。 剛剛翻了一下 bugs.php.net 發現 PHP 4 有個問題 "zend_hash_get_current_key_ex returning persistent strings" , 而 PHP 內部是用 zend_hash_get_current_key_ex() 回傳結果來看 hash 的 key 是 HASH_KEY_IS_LONG 或是 HASH_KEY_IS_STRING ,如果一直都回傳 HASH_KEY_IS_STRING 就會有可能會出現你說的問題。 (文章底部有原始碼連結,你可以 trace 一下流程) 但關於 serialize 的 bug 太多 (快要 500 個),或許是別的 known bug 造成的.. → roga:32bits/64bits的作業系統 INT_MAX 都是 2147483647 .. INT_MAX 是看系統定義, 32/64 bit 都是 2147483647 檢測方法: 1. 找你系統內的 header file ,定義在 limit.h 裡面。 php (php.h) 內部的實作是這樣: #if HAVE_LIMITS_H #include <limits.h> #endif #ifndef LONG_MAX #define LONG_MAX 2147483647L #endif #ifndef LONG_MIN #define LONG_MIN (- LONG_MAX - 1) #endif #ifndef INT_MAX #define INT_MAX 2147483647 #endif 補充一下 PHP_INT_MAX 這個常數 <?php echo PHP_INT_MAX; ?> , 其實是來自 php.h 定義的 LONG_MAX ,雖然值和 INT_MAX 看起來一樣, 但意義上我想不能歸為相同。 補充:2011/06/07 15:27 32bit 的 INT_MAX 和 LONG_MAX 都是 2,147,483,647 所以看起來一樣 64bit 的 INT_MAX 是 2,147,483,647 LONG_MAX 是 9,223,372,036,854,775,807 這定義在 limit.h 裡面,優先權高於 php.h 補充完畢 2. 你可以看一下 PHP 實作 serialize 的方式: http://svn.php.net/viewvc/php/php-src/trunk/ext/standard/var.c?revision=306938&view=markup 進入點在 880 行,然後比對一下我前一篇文章。 3. 建議把 os, php 版本附上,最好寫個可以 re-produce 的 test case 這樣比較容易釐清問題。 -- The Internet: where men are men, women are men, and children are FBI agents. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.220.104.63 ※ 編輯: roga 來自: 202.89.121.16 (06/07 15:29)
roga:抱歉第一點我講不清楚,6/7下午補充一下... 06/07 15:29