背景
最近、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でも見ることができます。
[{"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": "true", "getB": "true"}]
編集2:
私はこれをDebianのバグとして報告します。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.c
zend_function_entry
星ファイルの3つの場所をに置き換えることをお勧めしますZVAL_DELREF
。 5) 次に、ディレクトリをjson-1.2.1に変更して実行します。Z_DELREF_P
JSON_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のライブラリにもっと多くの機能があると主張しています。