php5-json 패키지가 firephp를 중단시킵니다.

php5-json 패키지가 firephp를 중단시킵니다.

배경

최근에 PHP를 5.5 버전으로 업그레이드했습니다. 이 업그레이드된 모듈에서는 json이 php5 패키지에서 새 패키지 php5-json으로 이동되었습니다. 그래서 설치했습니다.

이제 Firephp(및 Firebug)와 연결되었습니다.
firephp::log는 json_encode를 사용하여 전송하기 전에 변수를 인코딩합니다.
json_encode에 문제가 있을 수 있습니다. json_encode는 입력 변수를 인코딩하지 못할 수 있습니다. 이는 인코딩되지 않은 유니코드가 있는 문자열이나 잘못 인코딩된 문자가 있는 문자열에서 발생할 수 있습니다.

이전 버전의 PHP에서의 동작

  • Firebug에서는 잘못 인코딩된 값이 나타나는 대신 빈 값이 나타납니다.
  • 오류 값 이후 Firebug는 firephp에서 도착한 다음 값을 계속 표시합니다.

php5-json 단독의 동작

  • 잘못된 인코딩 값이 Firebug에 도달하면 다음과 같은 오류 메시지가 나타납니다.

    SyntaxError: JSON.parse: 예기치 않은 문자
    chrome://firephp/content/lib/renderer.js
    라인 159

  • 이 목록 이후에는 firephp의 로깅이 중지됩니다.

질문

"예상치 못한 캐릭터"가 있다는 것을 알고 있습니다. 하지만 다음 소식으로 넘어가고 싶습니다. 예상치 못한 첫 번째 문자에서 멈추지 않습니다.
이 문제를 해결하려면 어떻게 해야 합니까? 아니면 적어도 예전처럼 돌아가나요?

소프트웨어 버전:

  • 데비안 테스트 제시
  • 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
  • 파이어php 0.7.2

편집하다:

Firebug 헤더 X-Wf-1-1-1-2에서도 볼 수 있습니다.

[{"type": "LOG", "tag": "$someVar", "file": "/home/GIT/www/some/path/someFile.php", "line": "156"},]

어느하다값 부분이 누락되었으므로잘못된 JSON, 이것이 렌더링이 실패하는 이유입니다.

올바른 메시지와 함께 헤더를 인쇄합니다.

[{"type": "log", "tag": "POST 데이터", "file": "/home/GIT/www/some/path/someFile.php", "line": "22"}, { "데이터": {"myarray": ["117"]}, "getA": "참", "getB": "참"}]

편집 2:

나는 이것을 데비안의 버그로 보고합니다.719942. 하지만 아무도 그것을 보고 싶어하지 않는 것 같습니다 :-(

답변1

배경:

면허를 가지고 있다갈등Linux 배포판의 조항크록포드 특허그것은 다음과 같이 말합니다:
이 소프트웨어는 악이 아닌 선을 위해 사용해야 합니다.
이는 자유 소프트웨어 재단(FSF)의 Freedom 0과 일치하지 않습니다.
어떤 목적으로든 프로그램을 자유롭게 실행할 수 있습니다.(원천)

솔루션은 새로 작성된 라이브러리여야 합니다.pecl-json-cphp5-json으로 패키지되어 있습니다. 새로 사용된 json 라이브러리가 호환되지 않는 것 같습니다화력PHP. 그러나 소프트웨어를 악이 아닌 선을 위해 사용한다면 원본 Crockford 라이브러리를 복원하고 싶을 수도 있습니다.

Crockford Library를 복원하는 단계

1) 원본 받기JSON 1.2.1라이브러리를 만들고 압축을 푼다.
2) sudo apt-get install php5-dev자체 phpize도구와 함께 제공되는 php5-dev(Debian)를 설치합니다. (원천:PHP 확장을 만드는 방법).
3) 다음과 같이야체크in 을 로 function_entry바꾸는 것이 좋습니다 . 4) 다음과 같이json.czend_function_entry
파일의 세 위치를 로 교체하는 것이 좋습니다 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) 루트로서 Remi의 json.so를 방금 컴파일된 Crockford의 json.so로 바꿉니다.

결점

php5-json의 다음 업그레이드에서는 Remi의 라이브러리가 복원됩니다.
당신은 비자유 소프트웨어를 사용하고 있습니다.
당신은 시스템을 엉망으로 만들고 있습니다.
어떤 사람들은 Remi의 라이브러리에 더 많은 기능이 있다고 주장하는데, 이는 Crockford의 라이브러리가 2005년에 만들어졌기 때문에 사실일 수 있습니다.

관련 정보