Pacote php5-json quebra o firephp

1

Antecedentes

Recentemente atualizei o php para a versão 5.5. Dentro deste módulo de atualização para json foi movido para fora do pacote php5 para um novo pacote php5-json. Então eu instalei isso.

Agora a conexão com o firephp (e o firebug).
Antes de enviar, o firephp :: log codifica a variável com json_encode.
Pode ocorrer um problema com o json_encode. O json_encode pode falhar ao codificar a variável de entrada. Isso pode acontecer em uma string com unicode não codificado ou uma string com alguns caracteres codificados incorretamente.

Comportamento na versão anterior do php

  • No firebug, em vez de aparecer o valor com o espaço em branco da codificação errada.
  • Após o valor errado, o firebug continua exibindo os próximos valores que chegaram do firephp.

Comportamento com php5-json separado

  • Quando o valor codificado incorreto chega ao firebug, a seguinte mensagem de erro é exibida:

    SyntaxError: JSON.parse: unexpected character
    chrome://firephp/content/lib/renderer.js
    Line 159

  •   
  • Após esta listagem de logs de paradas de firephp.
  •   

Pergunta

Eu entendo que houve um 'caráter inesperado'. Mas gostaria apenas de seguir em frente e ver as seguintes mensagens. Não pare no primeiro personagem inesperado.
O que devo fazer para resolver o problema? Ou pelo menos voltar para o bevior anterior?

Versões de software:

  • Debian testando jessie
  • Host 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
  • iceweasel 22,0
  • FirePHPCore-0.3.2
  • Firebug 1.11.4
  • Firephp 0.7.2

Editar:

Eu também posso ver no cabeçalho do Firebug X-Wf-1-1-1-2:

[{"Type":"LOG","Label":"$someVar","File":"/home/GIT/www/some/path/someFile.php","Line":"156"},]

Qual faz perder a parte do valor e, portanto, não é válido JSON , e é por isso que a renderização falha.

O cabeçalho com a mensagem correta, que é impressa:

[{"Type":"LOG","Label":"POST data","File":"/home/GIT/www/some/path/someFile.php","Line":"22"},{"data":{"myarray":["117"]},"getA":"true","getB":"true"}]

Editar2:

Eu enviei isto como um bug no Debian 719942 . Mas não parece que alguém esteja disposto a dar uma olhada nisso: - (

    
por sumid 16.08.2013 / 22:46

1 resposta

0

Antecedentes:

Existe um conflito de licenciamento com distribuições Linux sobre uma cláusula Crockford licença que declara:
O Software deve ser usado para o bem, não para o mal.
Isto não concorda com a liberdade da Fundação do Software Livre (FSF) 0:
A liberdade de executar o programa para qualquer propósito. ( source )

A solução para isso deve ser uma biblioteca recém-escrita pecl-json-c empacotada como php5-json. A biblioteca json recém-usada não parece ser compatível com o firephp . Mas se você usar o software para o Bem, não para o Mal, talvez queira restaurar a biblioteca original do Crockford.

Etapas para restaurar a biblioteca do Crockford

1) Obtenha a biblioteca original do json 1.2.1 e descompacte-a.
2) Instale o php5-dev (no Debian sudo apt-get install php5-dev ) que vem com a ferramenta phpize . (fonte: Como criar extensões PHP ).
3) Como jacekk sugere que você precisa substituir uma ocorrência de function_entry em json.c com zend_function_entry .
4) Como Estrela sugere que você precise substituir ZVAL_DELREF por Z_DELREF_P em três locais no arquivo JSON_parser.c . < br> 5) Então você muda o diretório para o json-1.2.1 e executa

phpize
./configure
make

6) Infelizmente você não pode remover o pacote php5-json, porque ele levará consigo todo o php. Em vez disso, você precisa localizar a biblioteca json.so ( dpkg -L php5-json | grep json.so fará).
7) Como a raiz substituir o json.so de Remi com o json de Crockford.so você acabou de compilar.

Desvantagens

Com a próxima atualização do php5-json você receberá de volta a biblioteca de Remi.
Agora você está usando software não-livre.
Você está bagunçando seu sistema.
Algumas pessoas afirmam que a biblioteca do Remi tem mais recursos, o que provavelmente é verdade, porque a biblioteca do Crockford é de 2005.

    
por 25.03.2014 / 00:07