5丁目通信(仮称)

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

タグ: PHP

  • rewriteルールで悩んでいること。

    Apacheあるサイトの引き継ぎの仕事。

    /news_999_xxx.htmlを/news.php?a=999&b=xxx に変換するだけが、xxxに?とか*が含まれてOKという仕様だからルールが書けない。

    [plain gutter=”false”]RewriteRule ^news_([0-9]+)_(.*)\.html$ /news.php?a=$1&b=$2 [/plain]

    では、*がxxxに入るとマッチングしない。

    [plain gutter=”false”] /news_123_abc*def.html[/plain]

    そもそも*が含まれてるというところがダメなのか? 正規表現は難しい。

  • MongoDBをCakePHP2で使う話し

    MongoDBのようなNonSQLに向いたサイトを作成を検討中。現在CakePHPは2に移行しつつあるので、CakePHP2からMongoDBに接続できるかのテストから始める。結果は、笑ってしまうくらい簡単に接続できた。MongoDBに対応したCakePHPのデータソース(仮にCake Mongoと呼んでおく)の開発者に感謝する。

    CakePHPとMongoDBがインストールされたものとする。

    PHPとMongoDBと接続するドライバーが必要である。WindowsのXAMPP上のテストなので、PeclからのインストールではなくMonboDBのサイトからWindows用のドライバのバイナリファイルを持ってくる。Apacheのバージョンに合わせてダウンロードする。php.iniの設定をして、phpinfo()で確認する。

    https://www.php.net/manual/ja/mongo.installation.php#mongo.installation.windows

    以上は、検索すると出てくるので、詳細は各ページを参照する。

    以下は、Cake Mongo開発者のプレゼン資料からの抜粋である。

    データソースをGitから取得する。WindowsなのでGit Bashを使う。以下のコマンドを実行する。

    > cd app/Plugin
    > git clone git://github.com/ichikaway/cakephp-mongodb.git Mongodb
    > cd Mongodb
    > git checkout -b cake2.0 origin/cake2.0

    これで、CakePHP2用の CakeMongoがダウンロードできる。

    CakePHPのファイルの修正は以下の通り。まずはデータベースの接続の設定

    /app/Config/database.php

    class DATABASE_CONFIG {
      public $default= array(
        'datasource'=>'Mongodb.MongodbSource',
        'host' => 'localhost',
        'database'=> 'blog',
        'port'=>27017,
      )
    }

    次に/app/Config/bootstrap.phpでCakeMongoのプラグインを読み込ませる。

    CakePlugin::load('Mongodb');

    後は、CakeMongoに付いてくるサンプルを動かしてみる。

    データベースの設定をしなくていいので、簡単に動くことが確認できた。あっさり動くことに、逆に驚き。

  • 基本は大事

    ようやく頼まれていたサイトのサーバー移行が終わりました。移行自体は簡単でしたが、flickrとかフォト蔵のような画像サービスに散らばった画像ファイルを、すべてローカルサーバーにダウンロードしてまとめました。

    今回の移行したサイトはPHPで書かれていました。なんとHTMLにPHPのコードが埋め込まれているという、PHPのマンモス本のサンプルと同じような書き方です。DBのアクセスはPearのDBです。MVCとかフレームワークとか無縁です。

    しかし、この書き方は馬鹿にしてはいけません。なにせファイルの上から下に読んでいけば理解できるのです。PHPの基本は、HTMLファイルの埋め込みでしたので、基本に従って書かれていることになります。知らないフレームワークとかオレオレフレームワークよりも解読性は絶対に高いです。

    ということで、次はもっと安全に運用できるように修正の仕事になりそうです。

    Google+: View post on Google+

  • pearのチャンネルサイト落ちている? という話し

    PEAR

    PHPUnitをインストールしたくて、Pearでインストールしたら、 components.ez.no/ConsoleToolsをインストールしろと言われた。

    しかし、インストールしたくても相手側のサーバーから応答がないようだ。

    復活するまで待たなければいけないのか?それとも他に原因があるのかな?

    追記

    現在はアクセスできるようになっている。

    著:山田祥寛
    ¥3,366 (2025/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)
  • 使えるネットから電話でアンケートが来た話し

    今は使えるネットとVPSを2つ契約をしている。それで電話が入ったのだと思う。

    最初はサーバーとかコントロールパネルの感想など聞かれたので、正直に夜は遅くなるとか、たまにアクセスできなくなるとか、PHPのバージョンが古すぎるとか、正直に答えておいた。PHPのバージョンアップしたらコントロールパネルが使えなくなったとかは言わないでおいた。1つは解約するので。

    次にバックアップのことを聞かれたので、こちらは現状の方法を答えておいた。でも、いきなりバックアップのことを聞き出すの?

    あとあとよく考えると、アンケートの名を借りて、バックアップのソーリューションの売り込みだったかもしれない。アンケートの名を借りたセールス電話。電話でアンケートなんてわざわざしないよな。だったら、今回の改善のためのアンケートの結果は吸い上げられないかもしれない。最初からセールス電話で連絡すればいいのに。すぐ断るから。

    Google+: View post on Google+

  • PHPをアップデートした話し

    PHPに脆弱性が存在するということで、5.3.9から5.3.10にアップデートしろ、とニュースが出た。まさしくここのプログのサーバーがPHPの5.3.9だったのでバージョンアップをした。

    yumでお手軽パッケージ管理をしているので、yum updateと行う。今回もカーネルもバージョンアップしていた。どうしようかと思ったが、この際カーネルもアップデートしてしまう。

    ブログのデータ類や、gitのリポジトリのバックアップをして万一に備えます。ブログのバックアップは、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調べ)
  • jQuery Mobileに対応したら文字が小さくなったときの対応をした話し

    jQuery Mobile

    テスト的にCakePHPで作成しているサイトをスマートフォン対応にしてみました。簡単にjQuery Mobileで作成してみました。CakePHPではコントローラーでPCかスマートフォンかで判定して、ビューのレイアウトやアクションを切り替えてしまいます。この辺りはいずれ書きますので、プログラムに興味がある人は連絡ください。ソースを見せます。とても簡単ですが。

    さて、下の方でリンクしているjQuery Mobileの解説本で試ししてみると、どういう訳か実機のAndroid端末で試すと文字が小さくなります。画面の大きさによって文字の大きさを自動的に変えてくれるようです。文字サイズを固定に指定しても無視されます。

    jQuery Mobileの1.0のアルファ版(1.0.a2)を使ってみると、期待通りの文字サイズになります。ベータ版(1.0b1)だと文字サイズが小さくなります。もちろん、正式版(1.0)は小さいままです。

    正式版になったときバグでも入り込んだ訳もないしと、いろいろ調べてみたら、<head>タグに

    <meta name="viewport" content="width=device-width,initial-scale=1">

    がなかったのが原因でした。解説本をそのままコピーしたのが悪かったようです。その解説本にもコラムに小さく書いてありました。

    jQuery Mobileのように新しく開発のスピードが速いものは、紙の解説本よりも最新の情報を見ていく必要がありそうです。

    著:山田祥寛
    ¥3,366 (2025/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)
  • CakePHP2での開発が一段落した話し

    試しにCakePHP2で開発してきましたが、とりあえず一段落しました。

    いろいろな命名が1.3から変わっていますので注意が必要です。HTMLヘルパーは必ず$this->Htmlにしなければいけないとか、Appの下のディレクトリが頭が大文字になっているとか、細かい変更がありますが、だんだんと慣れていくことでしょう。

    一番変わったのは、Authコンポーネントです。こちらは参考となるサイトはありませんでした。やはりCakePHPの本家サイトのCookBookが一番まとまっています。というよりも、ここしか参考となる資料は今のところありません。ここで何回も言いましたが、CakePHP2の情報を知りたければ、絶対にCookBookを読む必要があります。

    こいうことで、今年の営業はこれでおしまいにしていいかしら。

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

    Cakephp2でTextHelper::truncate()を動かすと、1回目の処理が文字化けしてしまいました。どういう訳か2回目以降は正常に切り取ってくれます。

    /lib/Cake/View/Helper/TextHelper.phpのソースを追ってみると、mb_strlen()が正しい文字列の長さを返していません。strlen()と同じ値を返してくれます。それで後のmb_substr()で正しく切り取ってくれていませんので文字化けしているようです。

    strlen()になっているということは、予想通りmb_strlen()の第4パラメータにエンコードを指定しておけばOKでした。ということは、php.iniのmbstringの項目を正しく設定していないのが原因です。そこで、

    [mbstring]
    mbstring.language = Japanese
    mbstring.internal_encoding = UTF-8
    mbstring.http_output = UTF-8

    なんて設定してApacheを再起動すると、ソースに手を入れずにエンコードなしで文字化けしないで表示します。/app以外のソースはいじらないのが基本。

    つまり、日本語のサイトを作成するときは、mbstringをサボらずに設定しましょうというという基本を忘れるなということでした。

    著:山田祥寛
    ¥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で作成してみます。しかも、最新のCakePHP2です。

    CakePHP2になるとUnitTestがSimpleTESTからPHPUnitiに変わりました。いろいろとカンファレンスに話しを聞いていると、アジャイルとか自分は感化されやすいので、まずはUnitTestでのテスト駆動開発を導入してみます。バージョン管理は前に導入していましたが、徐々に試してみます。

    こうでも新しいことをしていないと、だんだんを開発のモチベーションが上がらないので。何でも試すことができるのは、一人で動いているせいでしょうか。

    CakePHP2で使うPHPUnitの情報は、Googleさんに聞いてもほとんどありません。日本語での情報はありません。一番詳しいのは、CakePHP2のCook Bookです。ますはこちらを読むことを薦めます。結局、本家CakePHPにたどり着きました。英語ですけど、何とか読めます。

    PHPUnitも開発元のサイトが一番詳しいということになりました。こちらは日本語に翻訳されています。

    Fixruresのファイルは、CakePHPのBakeで作成するのが簡単のようです。DBから直接Fixturesにインポートすると、ちょっと大きなテーブルだとメモリが一杯になります。ソースを追ってみたところ、メモリにテーブルデータをすべて展開しているようです。最初は、何かバグでもあるのかと思っていました。Bakeで途中で聞いてきますが、一部を切り出した方がよさそうです。

    テスト駆動開発は最初にテストコードを書いてからソースコードを書くのですが、まだまだテストコードを書くのを忘れて、直接コードを書いてしまいます。こちらは癖を付けなければいけません。

    恩恵としては、リファクタリングするときはやはり効果があります。あとはエラーの赤を消して、緑にするという目標があって、プログラミングは楽しくなりそうです。

    しかし、まだまだ、どうやってテストを書くのがいいのか迷います。我慢してしばらく続けようと思います。

    Google+: View post on Google+

    著:山田祥寛
    ¥3,366 (2025/04/25 12:34時点 | Amazon調べ)
    著:松浦 健一郎, 著:司 ゆき
    ¥2,574 (2025/04/25 12:34時点 | Amazon調べ)
    著:谷藤賢一, 著:徳丸浩
    ¥2,750 (2025/04/25 12:34時点 | Amazon調べ)