PHPのjson_decode関数でうまくいかないとき

JSON形式のデータを、PHPでオブジェクトもしくは配列にする場合、json_decode関数を利用するが、データの処理がうまくいかない場合の調査をするには、json_last_errorという関数を利用するとよいみたい。

json_last_error();
直近の JSON エンコード/デコード処理中に発生したエラー (もし存在すれば) を返します。
数字が返ります(0、1から5)。

JSON_ERROR_NONE:エラーは発生しませんでした
JSON_ERROR_DEPTH:スタックの深さの最大値を超えました
JSON_ERROR_STATE_MISMATCH:JSON の形式が無効、あるいは壊れています
JSON_ERROR_CTRL_CHAR:制御文字エラー。おそらくエンコーディングが違います
JSON_ERROR_SYNTAX:構文エラー
JSON_ERROR_UTF8:正しくエンコードされていないなど、不正な形式の UTF-8 文字

上から0~5と思われます。



JSONP形式のデータをPHPのjson_decode関数で処理する

JSONP形式のデータは通常クロスドメインでのJavascriptでの処理に用いられることが多いが、サーバサイドで処理した方が確実でやりやすい場合も多い。PHPの関数でjson_decodeを利用すると、JSONエンコードされた文字列を受け取り、それをPHPの変数に変換できる。ただし、JSONP形式では、JSONデータで処理するには余分な文字列が先頭と末尾にある。
callback{(

・・・・JSONデータ

)};

これは文字列なので、文字列の処理として除外すればjson_decode関数が利用可能になるみたい。

例)
$body=preg_replace(‘/.+?({.+}).+/’,’$1′,$body);
もしくは
$body = substr($body,9,-3);



てるてるぼうず

未来の天気の希望をシェアするサービス
FB,TWで共有。



小さい記念日

昨日、上の子(4年生)が初めて自分の部屋で一人で寝た。大分嫌がっていたが、もう大丈夫そうだった。これまでずっと同じ部屋で寝ていて、さすがに4年にもなってという感じではあるが、子どもがだんだん離れていくことが現実になっていく、一つの大きなターニングポイントのように思えた。さびしいけどうれしいことなのだろうな。
寝に上がるときの不安そうな表情と起きてきたときのあっさりとした表情を忘れないようにしたい。



Javascriptでフォームのselectコントロール

Javascriptでフォームのselectの選択項目をコントロールしようとして、選択状態を取得するときは
selectedではなくdefaultSelectedを利用する。ieではselectedでは明示的にない場合はoptionの最初、0番目が取得されてしまう。
細かいことがわかっとらんなー



ログイン、DB関連

以前えらい苦労していたPDOのプレースホルダの処理がほぼ1回でうまくいった。やはり苦労はしとくものだと思った。

また、ログイン処理についてもライブラリを利用して数時間で実装できた。

なんか順調です。



インフルエンザ

インフルエンザかな



iphone解約

iphone3GSを今日解約してきた。
すでに3年以上経過していてすべて割賦は終了しているので特に何もなかった。さすがにandroidとの2個もちは費用対効果が低い。月額それなりにかかっているので節約効果はこれが一番高いと思われる。あとは自宅の古いADSLかな・・・それが終わればEmobileにしてもいいかな



WordPressの引越し(ついでにWordPressMeからWordPress3.3.1にバージョンアップ)

だいぶ前から借りているレンタルサーバの引越しをしていて、その中でWordpressの引越しを実施。もともとがWordpressMeでデータベース、WebともにEUCだったもを当然最新バージョンなので、UTF-8にする必要がある。まただいぶデータベースの構造も違っているし、利用しているプラグインも互換性あるかわからないし、面倒だなーと思っていたのだけど意外とすんなり行けました。

結論から言うと、下記の様な手順できました。

  1. DBのデータをそのまま移植。
  2. 最新版のwordpressをインストール
  3. wp-config.phpを書き換え
  4. 利用しているテーマの文字コードを変換
  5. 管理画面にアクセスすると「DBのバージョンアップしますか」といったものが出るのでOK

ここまでの互換性を維持していることにちょっと感動しました。

実際に試した経緯は以下の通り。
まず最初に試みたのが、そのまんまWordpressMeを移植する方法。元々のサーバのデータベースからPhpMyAdminで必要なテーブルをエクスポートして、新しいサーバのDBにそのままの移植。古いサーバのWordpress一式をそのまま新しいサーバに移植。wp-config.phpのDB情報と文字コード設定を上書き。
としたところ、文字の出力がすべて文字化けしていて、テーマの文字コードを変えてもデータベースから出力される文字は文字化けが治らない状態でした。また、管理画面のログインでエラーが出ていて、他で調べて修正を試みても駄目で、無理だなという感じでした。

なので、これは一つ一つ手作業で移行しないといけないのかなとあきらめ加減で、とりあえずダメもとで一度新サーバのWordpressファイル(WordpressMe状態)を消して、最新のものに置き換えてテーマとwp-config.phpだけを書き換えてアクセスしてみたところ意外といい線まで表示できていて、管理画面にアクセスしたところ(おそらくwp-admin/insall.php)データベースを更新しますかといったものが出ていて、それをクリックしたところ、すんなり「成功しました」という表示になり、実際にだいたい問題なく動作できるようになっていました。

若干の文字化け個所(プラグイン内の設定ファイルの文字コード)やプラグインの問題はありましたが、ほぼ問題なくつかえました。



WordPressのマルチサイト機能、サブドメイン型・サブディレクトリ型について

WordPressの3.0からの目玉機能の一つ、マルチサイト機能ですが、どう利用できるのか他のサイトでも詳しく書いているところがあるがちょっとわかりにくかった点を含めてまとめておく。
まず、実装方法の2パターンについて。
サブドメイン型サブディレクトリ型があります。このうちサブドメイン型はルート直下にWordpressがインストールされている必要があるようです。つまりhttp://hoge.jp/に最初の一つ目のWordpressのURLがなる必要があるということです。ということは最初にhttp://hoge.jp/blog/とするとサブドメイン型は利用できません。
他のサイトでマルチサイトの説明を見ていると、ルート直下に設定している前提で書かれているものが多いですが、実は、サブドメイン型が利用できない場合は管理画面のネットワーク設定にサブドメイン型か、サブディレクトリ型かを選択するラジオボタンが出ません。なので、説明と違うじゃんという混乱をしてしまうかもしれません。
よく画面を見るとちゃんと説明は書いていてくれてたりするのですが。
・・以下追記予定。