5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

カテゴリー: オープンソース

  • #baserCMS はPHPのバージョンによっては動かないので注意という話し

    OSC2012で紹介されていたbaserCMSをインストールしてみました。

    まずはローカルのPCにインストール。インストール自体は簡単ですが、残念ながら管理者ダッシュボードの中で固まります。

    PCではXAMPPの上でbaserCMSを動かしているのですが、もしやと思って古いバージョンのXAMPPで動かしてみると、今度は問題なく動きます。baserCMSはCakePHPの上で動いています。一緒にインストールされるCakePHPのバージョンを見たら1.2でした。これは古い・・・。

    baserCMSのサイトでシステム要件を見たら、PHP5.2.17以降となっていますが、経験上CakePHPの1.2ではPHP5.3以降は、エラーが出て面倒なことになりそうです。

    今使っているXAMPPのバージョンは、1.7.7で一つ古いのですが、動いているPHPが5.3.8なので、それが問題かもしれません。最新版のXAMPP1.8.0はPHP5.4.4なので、そこまで新しいと本番サーバーが間に合わないので使っていません。baserCMSが動くXAMPPのバージョンは1.6.8でPHPは5.2.6でした。PHPが5.2系なら大丈夫なのでしょう。本番サーバーでよく使うRedhat系のCentOSも6だと、PHPは5.3系がインストールされるので、このままだとbaserCMSは本番サーバーにインストールしたときに問題になるでしょう。

    以上、出鼻をくじかれたので、今日はbaserCMSはインストールしただけで終わってしまいました。baserCMSが新しいCakePHPに対応するまで待ったほうがいいかもしれません。それとも今まで通りWordPressでサイトを作ったほうがいいかもしれません。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • #CakePHP でMissingModelExceptionがログに出力された話し

    ローカル環境からUnix系のサーバーのテスト環境に、CakePHPで開発したサービスを移行する。動かない。

    PHPUnitでテストケースを動かすと内部エラーになる。ログを見るとMissingModelExceptionが出力されていた。

    何のことはないモデルのファイル名が違っていた。Postモデルは、Post.phpを見に行くということ。これをpost.phpにしていた。Windowsではファイル名の大文字小文字は関係ないが、Unix系のLinuxでは気にしましょうということ。

    以上、絶対に同じ間違いをしそうなので、覚え書きとして残しておく。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • php-adifをGitHubに公開した話し

    アマチュア無線のログデータの交換フォーマットであるADIFデータフォーマットを解析して、PHPの配列に展開するクラスライブラリであるphp-adifをGitHubに公開しました。ここからダウンロードできます。バグ報告は、GitHubのPull Requestで受け付けます。

    アマチュア無線は今となっては、とてもマイナーな趣味であり、しかもそのログ交換データフォーマットですので、ほとんど使われることはないでしょうね。もし、ログを取り込んで処理をするなんてアプリケーションを作成するときにお使いください。自分もこのクラスライブラリを使って、もっとマイナーなサービスを作成しようかな・・・。

    今回はソースを公開するというよりも、試しにGitHubでどのようにソースを公開するかを理解するほうの実験の意味合いが大きいと思います。

  • ADIFのマルチバイト対応は難しいという話し

    アマチュア無線のログデータを交換するデータ形式にADIF(Amateur Data Interchange Format)というものがあります。趣味のプログラムでインポートクラスライブラリをPHPで作成してみました。

    ADIFでは

    Head Data Head Data Head Data
    <eoh>
    <call:6>WN4AZY<band:3>20M<mode:4>RTTY<qso_date:8>19960513<time_on:4>1305<eor>
    <call:5>VK9NS<band:3>40M<mode:5>PSK63<qso_date:8>20101022<time_on:4>0111<eor>

    のような形式になります。元々の仕様は、シングルバイトしか考えていないようなので、こちらに日本語を含んだマルチバイト文字を設定すると対応が難しくなります。見ての通り、コロン(:)の次にはデータ長が入ります。例えば、日本で一番使われている某ログソフトではシフトJISしか考えていないので、日本語を含んだコメントは

    <comment:6>テスト

    のようにマルチバイト文字は2バイトで出力されてしまいます。しかし、UTF8上では、2バイトに限らないので、このデータ長での指定は使えません。<>の区切り文字で解析していくことになります。コメントに<を使われたりすると、値の終了がどこだかわからなくなってしまいます。シフトJISのまま処理しようすれば、マルチバイト文字の2バイト目に<を使われれば難しくなります。

    ADIFのドキュメントを読んでも<>:のような区切り文字をエスケープすることは記述されていませんので、どうしてもデータ長で値を読み込んで行くのでしょう。

    某ログソフトのADIFのエクポートが、

    <comment:3>テスト

    のように、文字数で出力してくれればいいのにと思うのですが、昔のシフトJISを基準にしているので無理だろうなと思うのでした。後はADIFのバージョン3に記述されているXMLベースのADXファイルフォーマットに期待です。

    著:加納勉, 編集:Webon編集部
    ¥480 (2025/04/05 17:43時点 | Amazon調べ)
    CQ出版
    ¥1,650 (2025/04/05 17:43時点 | Amazon調べ)

    電波を出すには必ずアマチュア無線の国家資格が必要です。電波法令を守って楽しみましょう。

  • CakePHP でのMongoDB でTRUNCATE TABLEの話し

    CakePHPでMongoDBをつなげてテストデータの投入のシェルとかを書いています。

    データの投入の前にMongoDBのコレクション(RDBならテーブルかな)の全データクリアをしたいのですが、今まではこのようにTRUNCATEをSQLで呼び出していました。

    $this->Model->execute('TRUNCATE TABLE table);

    これはMongoDBでは動きません。MongodbSource.phpにはtruncate()というメソッドがりますが、どう呼び出したら動くかわからず、以下のようにしました。

    $this->Model->query(array('$eval' => 'db.collection.drop();'));

    $evalってなあに? といった状況です。もっといい方法があるかも。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • CakePHP2のテストで、$defaultのDBを見に行ってしまう件、解決した話し

    CakePHP2のテストで、$defaultのDBを見に行ってしまう。と書きましたが、解決しました。

    /App/Model/AppModel.php で__construct()を定義したとき、正しく引数を受け取って親クラスに渡してあげないといけなかったようです。

    public function __construct($id = false, $table = null, $ds = null) {
        parent:__construct($id, $table, $ds);
        // 何かの処理
       }

    のように引数を明示的に書いてあげます。

    テストケースのsetup()にあるモデルを設定しているClassRegistry::init()が中で$useDbConfigをtestでモデルオブジェクトをインスタンスにしているところがあって、そのときのパラメータがクラスに引き渡されていないのが原因でした。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • CakePHP2で管理者用ページだけの認証を行う話し

    ユーザー認証と管理者認証を別のモデルで分けたいときのメモ。

    管理者用の認証をAppController.phpで定義してしまう。isAdmin()はadmin_***のアクションを呼んだかどうかの判定。

    app/Controller/AppController.php

    class AppController extends Controller {
      public $components = array('Auth');
    
      public function beforeFilter() {
        if ($this->isAdmin()) {
          $this->Auth->authenticate = array(
          'Form' => array(
            'userModel' => 'User', //ユーザー情報のモデル
            ),
          );
    
          $this->Auth->loginAction = '/admin/users/login'; //ログインを行なうaction
          $this->Auth->loginRedirect = '/admin/'; //ログイン後のページ
          $this->Auth->logoutRedirect = '/admin/'; //ログアウト後のページ
          $this->Auth->authError = 'ログインしてください。';
    
        } else {
          $this->Auth->allow('*');
        }
      }
    }

    大分はっしょっているけど。こんな感じ。

    あとは、ユーザー認証したいコントローラーでAuthコンポーネントを定義しておく。

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • CakePHPのビューを変数に格納する話し

    メールの本文をビューを使って生成したときがあります。PHPのストリングで結合してなんてやりたくありません。後で修正が面倒。

    CakePHPの1.3のときは、

    $this-&gt;output_layout = 'mail';
    
    // バッファリング開始
    ob_start();
    
    // Viewアクションでレンダリングする。
    $this-&gt;render('mail_view');
    
    // レンダリングした結果を取得する。
    $html = ob_get_clean();

    なんてob_start()とrender()でやっていたけど、CakePHPが2になってからrender()がレンダリング結果を返さなくなったようだ。

    そこで、viewのソースファイルを読んで、次のように対応した。

    // Viewアクションでレンダリングする。
    $response = $this-&gt;render('mail_view', 'email');
    
    // レンダリングした結果を取得する。
    $html = $response-&gt;__toString();

    なんだか__toString()とか内部のメソッドを呼んでいるが、もっとよい方法があるのだろうか?

    著:山田祥寛
    ¥3,366 (2025/03/27 13:40時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/03/27 13:40時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/03/30 15:22時点 | Amazon調べ)
  • #WordPress が3.4にアップデート

    WordPressが3.4になったぞ、という記事を見かけて、WordPressで運用しているサイトのダッシュボードにアクセスしたら、アップデートがあった。その他多数プラグインも。

    サクッとアップデートしてみる。見た目はどこが変わったの? と思うけど、確実に応答がよくなっている。SQLの見直しを行っているようだ。

    アップデートする前にデータベースのバックアップをしましょう。

    Google+: View post on Google+

  • テーマをTwenty Elevenにしてみた話し

    WordPress

    このブログのテーマをWordPress謹製のTwenty Elevenにしてみました。見た目はとてもシンプルになりましたが、中身は全然シンプルではありません。

    翻訳ファイル(ja.po)を取ってきます。WordPressの翻訳ファイルに関しては、ここのサイトをご覧ください。気に入らない翻訳はPoeditで修正してしまいます。Poeditは保存すればpoファイルから、翻訳バイナリのja.moファイルを作ってくれますので、ja.moをアップすればOKです。

    行間やインデントも気に入らなければCSSファイルを変更してしまいます。ブラウザがChromeの場合はF12を押すと楽チンに修正箇所がわかります。WordPressでは外観のテーマ編集で、FTPなしに直接CSSファイルを編集できます。タイトルの文字サイズも変更してしまいます。

    著:久保田涼子, 著:西原礼奈, 著:阿諏訪聡美
    ¥2,399 (2025/03/28 17:08時点 | Amazon調べ)

    なんやかんやでWordPressのサイト構築で躓くのは、PHPのプログラミングなのでした。