包 php5-json 打破了 firephp
背景
最近我將php升級到5.5版。在這個 json 升級模組中,從 php5 包中移出了一個新的包 php5-json。所以我安裝了它。
現在與firephp(和firebug)的連接。
在發送之前,firephp::log 使用 json_encode 對變數進行編碼。
json_encode 可能會出現問題。json_encode 可能無法對輸入變數進行編碼。這可能發生在具有未編碼 unicode 的字元串或具有一些錯誤編碼字元的字元串中。
以前版本的 php 中的行為
- 在螢火蟲中,而不是帶有錯誤編碼空白的值出現。
- 錯誤值後,firebug 繼續顯示從 firephp 到達的下一個值。
單獨的 php5-json 的行為
- 當錯誤的編碼值到達 firebug 時,會出現以下錯誤消息:
SyntaxError:JSON.parse:意外字元
chrome://firephp/content/lib/renderer.js
第 159 行
- 在此清單後,來自 firephp 的日誌停止。
問題
我知道有一個“意外角色”。但我只想繼續前進並查看以下消息。不要停在第一個意想不到的字元上。
我該怎麼做才能解決這個問題?或者至少回到以前的行為?
軟體版本:
- Debian 測試 jessie
- Linux 主機 3.10-2-amd64 #1 SMP Debian 3.10.5-1 (2013-08-07) x86_64 GNU/Linux
- php5 5.5.1+dfsg-2
- php5-json 1.3.1+dfsg-1
- 冰鼬 22.0
- FirePHPCore-0.3.2
- 螢火蟲 1.11.4
- Firephp 0.7.2
編輯:
我還可以在 Firebug 標頭 X-Wf-1-1-1-2 中看到:
$$ {“Type”:“LOG”,“Label”:"$someVar",“File”:"/home/GIT/www/some/path/someFile.php",“Line”:“156”}, $$
確實錯過了值部分,因此不是有效的 JSON ,這就是渲染失敗的原因。
帶有正確消息的標題,將被列印:
$$ {“Type”:“LOG”,“Label”:“POST data”,“File”:"/home/GIT/www/some/path/someFile.php",“Line”:“22”},{“data”:{“myarray”:[“117”]},“getA”:“true”,“getB”:“true”} $$
編輯2:
我將此作為 Debian 719942中的錯誤送出。但似乎沒有人願意看它:-(
背景:
由於Crockford許可中的一條條款與 Linux 發行版存在許可沖突,該條款規定:軟體應用於善,而不是惡。 這不符合自由軟體基金會 (FSF) 的自由 0:為任何目的執行程序的自由。(來源)
解決方法是新寫的庫pecl-json-c打包為php5-json。新使用的 json 庫似乎與firephp不兼容。但是,如果您將軟體用於善而不是惡,您可能希望恢復原始的 Crockford 庫。
恢復克羅克福德圖書館的步驟
1)獲取原始的json 1.2.1庫並解壓。2)安裝工具自帶的
php5-dev(在Debian中)。(來源:如何創建 PHP 擴展)。 3)正如jacekk建議的那樣,您需要將 in 的一次出現替換為。 4) 正如Star建議的那樣,您需要在 file 的三個位置替換為。 5)然後將目錄更改為 json-1.2.1 並執行
sudo apt-get install php5-dev``phpize
function_entry``json.c``zend_function_entry
ZVAL_DELREF``Z_DELREF_P``JSON_parser.c
phpize ./configure make
6)不幸的是你不能刪除包php5-json,因為它會帶走整個php。相反,您需要找到庫 json.so (
dpkg -L php5-json | grep json.so
會做)。
- 作為根目錄,將 Remi 的 json.so 替換為 Crockford 的 json.so 你剛剛編譯。
缺點
隨著 php5-json 的下一次升級,您將獲得 Remi 的庫。
您現在正在使用非自由軟體。
你搞砸了你的系統。
有人聲稱雷米的圖書館有更多的功能,這可能是真的,因為克羅克福德的圖書館是從 2005 年開始的。