Debian

包 php5-json 打破了 firephp

  • March 24, 2014

背景

最近我將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會做)。

  1. 作為根目錄,將 Remi 的 json.so 替換為 Crockford 的 json.so 你剛剛編譯。

缺點

隨著 php5-json 的下一次升級,您將獲得 Remi 的庫。

您現在正在使用非自由軟體。

你搞砸了你的系統。

有人聲稱雷米的圖書館有更多的功能,這可能是真的,因為克羅克福德的圖書館是從 2005 年開始的。

引用自:https://unix.stackexchange.com/questions/87067