php5-json 包破坏了 firephp

php5-json 包破坏了 firephp

背景

最近我将php升级到5.5版本。在此升级模块中,json 已从 php5 包移出到新包 php5-json 中。所以我安装了它。

现在与 firephp (和 firebug)的连接。
在发送之前,firephp::log 使用 json_encode 对变量进行编码。
json_encode 可能会出现问题。 json_encode 可能无法对输入变量进行编码。这可能发生在具有未编码的 unicode 的字符串或具有某些错误编码字符的字符串中。

以前版本的 php 中的行为

  • 在 Firebug 中,出现的不是带有错误编码的值,而是空白。
  • 在错误值之后,Firebug 继续显示从 firephp 到达的下一个值。

单独 php5-json 的行为

  • 当错误的编码值到达 firebug 时,会出现以下错误消息:

    SyntaxError:JSON.parse:意外字符
    chrome://firephp/content/lib/renderer.js
    第 159 行

  • 在此列表之后,来自 firephp 的日志将停止。

问题

我知道有一个“意想不到的人物”。但我想继续看以下消息。不会在第一个意外字符处停止。
我该怎么做才能解决这个问题?或者至少回到之前的状态?

软件版本:

  • Debian 测试杰西
  • 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 中看到:

[{“类型”:“LOG”,“标签”:“$someVar”,“文件”:“/home/GIT/www/some/path/someFile.php”,“行”:“156”},]

哪个错过价值部分,因此是无效的 JSON,这就是渲染失败的原因。

打印出包含正确消息的标头:

[{“类型”:“日志”,“标签”:“POST数据”,“文件”:“/home/GIT/www/some/path/someFile.php”,“行”:“22”},{ “数据”:{“myarray”:[“117”]},“getA”:“true”,“getB”:“true”}]

编辑2:

我将此作为 Debian 中的错误提交719942。不过好像没人愿意看:-(

答案1

背景:

有一个许可冲突Linux 发行版中的一个子句克罗克福德的 执照其中指出:
本软件应用于善良而非邪恶。
这不符合自由软件基金会 (FSF) 的自由 0:
出于任何目的自由运行程序。来源

解决方案应该是一个新编写的库pecl-json-c打包为 php5-json。新使用的json库好像不兼容火力PHP。但如果您使用软件是为了行善,而不是为了作恶,您可能需要恢复原始的 Crockford 库。

恢复克罗克福德图书馆的步骤

1)获取原件json 1.2.1库并解压它。
2)安装sudo apt-get install php5-dev自带phpize工具的php5-dev(Debian中)。 (来源:如何创建 PHP 扩展)。
3) 作为雅采克建议您需要将出现的一次function_entryin替换json.czend_function_entry
4) 作为星星建议您需要在 file 中的三个位置替换ZVAL_DELREF为。 5)然后将目录更改为 json-1.2.1 并运行Z_DELREF_PJSON_parser.c

phpize
./configure
make

6) 不幸的是,你无法删除 php5-json 包,因为它会带走整个 php.ini 文件。相反,您需要找到库 json.so (dpkg -L php5-json | grep json.so就可以了)。
7) 作为 root,将 Remi 的 json.so 替换为刚刚编译的 Crockford 的 json.so。

缺点

随着 php5-json 的下一次升级,您将恢复 Remi 的库。
您现在使用的是非自由软件。
你正在搞乱你的系统。
有人声称 Remi 的库有更多功能,这可能是真的,因为 Crockford 的库是 2005 年的。

相关内容