5丁目通信(仮称)

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

タグ: PHP

  • #CakePHP でFixtureをbakeしたとき、enumフィールドでエラーが出たので対応した話し

    CakePHPでbakeでFixtureを作成したとき、モデルにenumのデータタイプがあると

    Notice Error: Schema generation error: invalid column type enum('xxx','yyy','zzz') for Model2.field does not exist in DBO in [C:\xxxxxx\lib\Cake\Model\CakeSchema.php, line 610]

    のようにエラーが出て正常にFixtureが生成できなくなります。

    対応としては、FixtureをBakeするときにレコードを作成させてしまいます。

    Possible Models based on your current database:
    1. Model1
    2. Model2
    3. Model3
    4. Model4
    5. Model5
    
    Enter a number from the list above,
    type in the name of another model, or 'q' to exit
    [q] > 2
    Would you like to import schema for this fixture? (y/n)
    [n] >
    Would you like to use record importing for this fixture? (y/n)
    [n] >
    Would you like to build this fixture with data from KeywordGroup's table? (y/n)
    [n] > y

    ここにエラーがたくさん表示される。

    Please provide a SQL fragment to use as conditions
    Example: WHERE 1=1
    [WHERE 1=1] >
    How many records do you want to import?
    [10] >

    できあがったFixtureにはenumのフィールドに関しての$fieldsが抜けているので、Stringとして追加してしまいます。

    public $fields = array(
    :
    :
    'field' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 50, 'collate' => 'utf8_general_ci', 'charset' => 'utf8'),
    :
    );

    $recordsには、本番DBから適当にデータが追加されているはずです。この$recordsのデータがテストデータとしてinsertされます。

    適当ですが、これでテストできました。

    著:山田祥寛
    ¥3,366 (2025/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)
  • CakePHPを2.2にバージョンアップしたら英語で表示してしまうことを対応した話し

    CakePHPを1.3から2.2にバージョンアップしたら、日本語が英語で表示されるようになってしまいました。

    ローカルのPCでは、正常に日本語で表示されます。どういう訳か、国際化する前の__(‘xxx’)のxxxが表示されてしまいます。

    /app/Config/core.phpに

    Configure::write('Config.language', 'ja');

    を追加しても変わりません。いろいろ調べるうちにわかりました。

    /app/locale

    になっていました。

    /app/Locale

    が正解です。CakePHPが2になって、ディレクトリの1文字目が大文字になっているのを忘れていました。PCですと、この辺りは無視されますので、Unix系のサーバーに配置したときに初めてわかります。

    著:山田祥寛
    ¥3,366 (2025/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)
  • #WordPress のサイトのドメイン移行

    WordPressのサイトをテストサーバー(移行元サーバー)から本番サーバー(移行先サーバー)に移行したときのメモ。テストサーバーと本番サーバーでドメインが違っているときの、どのように作業したかをメモしておきます。

    最初に本番サーバーにWordpressをインストールしてしまいます。これは通常通りのインストールでOKです。正しくWordpressのサイトにアクセスできることを確認しておきます。

    WordPressで用意されているエクスポート/インポートを使ってもデータの移行はできませんでした。こういうときは何も考えずにMySQLでダンプしてリストアしてしまいます。インストールしたテーブルは一旦削除してからリストアします。エクスポート/インポートはphpMyAdminでもデータサイズが小さければ可能です。

    リストアする前にダンプしたSQLファイルを、テストサーバーのURLから本番サーバーのURLにテキストエディタで置換してしまいます。これはリンクのhrefやメディアからの画像のsrcでhttp://~のドメインを直接書いて格納されているからです。

    本番サーバーにプラグインをテストサーバーと同様なものをインストールしておきます。使用しているテーマもイントールします。これで準備OKです。

    おそらく、このままではアクセスも画像が出てきません。画像が表示されていてもテストサーバーから持ってきてしまいます。リンクをクリックするとテストサーバーに行ってしまいます。サイトの設定がテストサーバーのままです。

    管理ページにもアクセスできませんので、テーブルを編集してしまいます。wp_optionsテーブルのoption_name項目がsiteurlとhomeを本番サーバーのURLに修正します。これで画像とリンクが本番サーバーになります。

    テーマに直接テストサーバーのURLが格納されていれば、これもテストサーバーに修正してしまいます。あとはブラグイン(バックアッププラグインなど)の設定によっては、パスが違っているかもしれませんので、これも本番サーバーに合わせておきます。

    以上で無事に本番サーバーに移行できました。

    著:久保田涼子, 著:西原礼奈, 著:阿諏訪聡美
    ¥2,399 (2025/04/30 10:35時点 | Amazon調べ)

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

  • CakaPHPのHTMLヘルパーからの出力が汚いと言われたので無理矢理修正した話し

    お客さんからCakePHPから出力するHTMLコードが汚いと言われました。特に<head>の中の<meta>がつながって読みにくいと言われてしまいました。別に人間が読まないからいいじゃないと思いますが、ここはお金をいただく身ですので、こころよく修正してしまいます。

    HTMLヘルパーは出力するときにHtmlHelper.phpでsprintf()で整形して追加しているだけのようですので、とりあえず簡単にsprintf()の書式に\nを追加してしまいます。

    CakePHP自身を修正したくないので、MyHtmlヘルパーを作ってHtmlヘルパーから継承させてしまいます。

    <?php
    App::uses(‘HtmlHelper’, ‘View/Helper’);
    class MyHtmlHelper extends HtmlHelper {
    public function __construct(View $View, $settings = array()) {
      parent::__construct($View, $settings);
      // HTMLヘルパーで整形して出力するコードの行末に改行を入れて、きれいなHTMLコードを出力する。
      foreach($this->_tags as $key => $value) {
        $this->_tags[$key] = $value . “\n”;
        }
      }
    }

    使うときには、コントローラーのヘルパーの設定で、

    public $helpers = array( ‘Html’ => array(
       'className' => ‘MyHtml’
      )
    );

    のようにしておきます。これでHTMLヘルパーを使っているViewを修正せずに、MyHtmlヘルパーを使えます。今回はメソッドの追加変更はありませんので、そのままHTMLヘルパーを使えます。

    あまり役に立たないコードです・・・。

    著:山田祥寛
    ¥3,366 (2025/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)
  • #CakePHP でOGPの対応をした話し

    今、サポートしているゲームのブログランキングのサービスで、OGPへの対応の要望がありました。

    Htmlヘルパーを地道にビューに設定すればいいのですが、何かよい方法がないかと調べてみました。

    やはりありました。既にCakePHPのプラグインを作成してくれていました。しかもCakePHP2に対応されています。

    Ogphttps://github.com/monsat/Ogp

    オリジナルのままだと、作っているサービスには機能不足なので、機能を追加します

    • og:url に自動的に自分のURLを挿入する。
    • プリフィックスがog:以外に、Facebookのためのfb:を設定できるようにする。

    いろいろとソースを修正できるのも、オープンソースのいいところ。

    Githubにリポジトリを公開されていたので、Pull Requestして追加したソースの差分を取り込んでもらいました。

    著:山田祥寛
    ¥3,366 (2025/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)
  • PHPカンファレンス2012に参加しました。  #phpcon2012

    PHPカンファレンス2012に参加しました。  #phpcon2012

    昨日はPHPカンファレンス2012に行ってきました。会場は蒲田の大田区産業プラザです。

    今年は、WordPressのWord Campと同じ会場です。同時開催とは聞いていいたけど、本当に同じスペース内でやっているのね。同じ会場で別のところだと思っていた。

    セミナーはクローズの教室ではなくて、まるで展示会で企業が会場で講演会をするようなオープンなところでやっていた。Word Campのほうでじゃんじゃん音を鳴らしていたので、これはどうも落ち着かない。プロジェクタでプレゼンをするのだけど、スクリーンが小さいので見えない。前のほうの席を確保する。

    それにWord Campが同時開催となると、PHPカンファレンスかいずれかを捨てなければいけない。来年は、別々にやって欲しいな。そうすれば、どちらも参加できるのに。

    今回は名刺を忘れて大失敗。懇親会は参加しませんでした。懇親会だけでも価値があるかな。

    Embedded Link

    PHPカンファレンス2012
    日本最大のPHPの祭典

    Google+: View post on Google+

  • #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/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)
  • #CakePHP でMissingModelExceptionがログに出力された話し

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

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

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

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

    著:山田祥寛
    ¥3,366 (2025/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)
  • PHPカンファレンス2012に参加申し込み

    PHPカンファレンス2012に参加申し込みをして。間に合ったようだ。

    今年も会場が同じところだけど、去年のように部屋に入りきれずに、会場にいるのにストリーミングを別室で見ているのなんて、ばかなことが起こらないだろうか心配。

    Embedded Link

    PHPカンファレンス2012
    こちらは参加登録用のイベントです。 カンファレンスの詳細な内容についてはPHPカンファレンス2012公式サイトを御覧ください。 同日・同会場で開催されるWordCamp Tokyoについてはこちらをご覧ください。 混雑状況予測の為に別途、セッション参加希望フォームの入力をお…

    Google+: View post on Google+

  • php-adifをGitHubに公開した話し

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

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

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