Home > アーカイブ > 2006-09

2006-09

settypeで変数初期化

  • 2006-09-15 (金)
  • PHP
この記事の所要時間: 21

settype()で変数の初期化を行おうという記事です。

IMHO, this is much more clear. Its a standard way to set the type and default value of your variables. You see, settype() assigns a default value to the variables if they do not exist already.

Initializing & typing variables with settype() « Ramblings of a web guy (2006-09-15)

まあCやJavaでいう

int var;

という事ですね。

データ型を定義したいというのは分かるのですが、PHPではあまり意味が無いように思えます。というのも、その変数に異なる型の値を入れるとデータ型が変わってしまうんですね。

< ?php
settype($var, 'integer');
printf("\$var%s: %s\n", $var, gettype($var));

$var = 123;
printf("\$var=%s: %s\n", $var, gettype($var));

$var = 123.45;
printf("\$var=%s: %s\n", $var, gettype($var));

$var = "abc";
printf("\$var=%s: %s\n", $var, gettype($var));
?>
> php -f test.php 
$var=0: integer
$var=123: integer
$var=123.45: double
$var=abc: string

ふつうに$var=0で初期化されている方が分かりやすいです。データ型を固定したいのであれば変数を参照する際にキャストするなりsprintf()するなりで変換した方が無難です。

データ型がキッチリ決まっている方が安心という考えは分かりますけどね。このへんは普段あまり意識しないところなんでちょっと新鮮でした。

CakePHP 配列の考え方

この記事の所要時間: 035

モデルやコントローラで値の受け渡しは配列を使います。この配列はちょっとクセがあって$array[モデル名(or テーブル名)][カラム名]という形式になっています。これはちょっと抵抗がありました。1レコードの値を配列に入れるなら$array[カラム名]の方が自然だと思っていたからです。

ところが、ある事に気づいた時から「ああ、なるほど。」としっくりいくようになりました。

さてそれは何かと言うと、なんてことはない、これSQLと一緒なんですね。

select table.column from table;

これが分かってから何だかすっきりしました。

MotoGP#13 セパン

この記事の所要時間: 23

終盤3連戦の第1戦、マレーシアGPがセパンで行われました。予選2日目が豪雨により中止になるという妙な展開での決勝となりました。(125ccは予選2日目があったのですが走行したのは2台のみ)

125cc

バウティスタは強かった。いやほんとに。タイトルは次戦で決まりかな。

    [小ネタ]

  • ウォームアップラップスタート時にホームストレートで転倒していたのは何だったんだ?
  • パッシーニは赤旗の原因なのに走行できるんだな。
    (そういえばルティもそんなのあったなー。)
  • 小山のマシンは目立つ。でも残念ながら転倒。体は大丈夫そう。
  • G+実況「宇井さん以来のシーズン6勝」
    (宇井はもう過去の人なのか。。。) 
  • 125は頭の中でライダーとマシンとツナギがバラバラで訳が分からない。
    KTMのNo2はタルマクシじゃなかったけ?(笑)
  • カリオもランキング2位を維持することに注力している模様。

250cc

ロレンゾ+アプリリアは強かった。ほんと、ひと頃のビアッジみたい。かたやドビチオーゾはストレートの差をブレーキングで何とか頑張ってるという感じ。もうちょっとマシン差が埋まればさらにあついタイトル争いになるのだけれど。

    [小ネタ]

  • G+、250も解説坂田。(GJ!!)
  • KTM早くなってる。があああああああああああああ。(4周目リタイヤ)
  • ロカテリはほんとに勝負弱い。2000年は何だったんだ。
  • 関口13位!!素晴らしい。 

MotoGP

やっぱりロッシは強かった。ほんとに。カピロッシ+BSの圧勝かと思いきやまさかのドッグファイトだった。でもこの展開になるとロッシは強いなー。

    [小ネタ]

  • G+、ゲスト秋吉。話しているのを初めて見たが、テストライダーやっているだけあってコメントが的確。素人無視(笑)の玄人発言連発(キャスター角がどうのって)。辻やん出番なし。
    また来て欲しいな。
  • 電波障害で映像が無い間に中野はいなくなっていた。。。
  • カピロッシ寝かしすぎ(ラスト2周の2,3コーナーはスリップダウンするかと思った)

セパンは上位勢が単独で走るレースが多かったように思うのですが、今年は250cc,MotoGPクラスは混戦になり、楽しめました。来週は毎年激戦が繰り広げられるフィリップアイランドです。かなり寒いらしいのですが、また面白いレースが見られそうです。

Syntax Highlighter for Windows Live Writerを試す

この記事の所要時間: 150

Windows Live WriterプラグインのSyntax Highlighterを試してみました。これはソースコードをハイライト表示してくれるもので、ASP.NET・C・C#・VB・XML・Java・PHP・Perl・Python・Ruby・JavaScript・SQL等の多くの言語に対応しています。

インストールはSyntax Highlighter for Windows Live WriterからHighlight4Writerをダウンロードして、WLWのPluginフォルダにzipファイルを展開するだけです。(ちなみに.NET Framework2.0必須です。.NET Framework1系の環境では認識されません。はまりました。。。)

 このプラグインで生成したソースが以下です。

<?php
class SampleController extends AppController
{
  var $name = 'Sample';

  /**
   * ?A?N?V??o??g
   */
  public action_index() {
    // index action
    sleep(1);
    $this->render();
  } 
}
?>

きちんとハイライト表示されますし、予約語や関数にはPHPマニュアルへのリンクが張られます。(背景色とかぶって見づらい項目があったので手で背景を白にしています。)ただ日本語は化けていますし、一度貼り付けたソースはプラグインでは編集できません。(もちろんエディタ部分では編集できます)

>>

試しておいてなんですが

  • WordPressにはソースのハイライト表示プラグインがある。
    PHP Highligh StringiG:Syntax Hiliter等)
  • Web上で編集してしまうとその箇所はハイライト処理されない。

という感じで今は使いどころが無いかなーという感想です。ハイライト表示プラグインがないblogには良いかもしれませんね。

CakePHP アプリケーションの設定情報をまとめる

この記事の所要時間: 22

Amazonのアクセスキーやメールサーバホスト等、アプリケーション固有の設定情報(パラメータ)を一元的に記述する方法を考えてみました。

1.core.phpに記述する

[app/config/core.php]にはフレームワークが使用するパラメータが記述されています。これに続いてアプリケーションの設定を記述する方法です。シンプルで分かりやすいですが、フレームワーク自体の設定と一緒になってしまうので、混同しやすいかもしれません。

[app/config/core.php]

< ?php
#snip
/**
 * application config
 */
define('MAIL_SMTP', 'mail.example.com');
define('AMAZON_ACCESS_KEY', 'xxxxxxxxxx');
define('SYSTEM_PARAMETER', 'yyy');
?>

2.アプリケーション用の設定ファイルに記述する

アプリケーション用の設定は[app/config/app.php]に記述してAppControllerで読み込む方法です。これならフレームワークの設定とは切り離せますし、各controllerでは設定ファイルを意識する事なくパラメータを使用できます。

[app/config/app.php]

< ?php
define('MAIL_SMTP', 'mail.example.com');
define('AMAZON_ACCESS_KEY', 'xxxxxxxxxx');
define('SYSTEM_PARAMETER', 'yyy');
?>

[app/app_controller.php]

< ?php
#snip
config('app');
#snip
class AppController extends Controller
{
}
?>

今回は設定値をPHPの定数で定義する方法を取りました。定数はどこからでも透過的にアクセスできるので扱いが楽ですね。ただ設定値をアプリケーションで変更できないですし、もし開発者以外が設定を触るならiniファイル形式の方が良いかもしれません。いずれこちらの方法も考えてみたいと思います。

Yahoo!スポーツ に注意

この記事の所要時間: 151

ええ私が悪いんです。

MotoGPを毎戦楽しみに見ています。G+を録画して後日に見るのでその頃にはレース自体は終わっています。当然あちこちのサイトには結果が上がっているのでレース系のサイトは見ないように気を付けています。

昨日行われたマレーシアGPを見てました。250ccまでは問題無く見ました。レース後は表彰台、インタビュー、CMと言ったインターバルがあります。表彰台はいつものメンツだったので何気なくYahoo!プロ野球を見たんですね。「”神撃”止まらん!矢野2発締め」という記事があったんですね。心惹かれるタイトルですね。もうオチが分かりましたね。

ああ見ましたよ。でも知ってるんです。記事の右横にはトピックス記事が一つだけ画像付き表示されるんですよね。知ってます。それで高橋裕紀の初優勝の時、写真を見ちゃいましたから。でもトピックスっていろいろあるじゃないですか。特に昨日はシューマッハが引退宣言なんてありましたし。日本では知名度の低いMotoGPがいきなり表示されることはないだろうと。

ああ見ましたよ。黄色のバイクに黄色のツナギ来たライダーがスタンディングしているのを。

 

「あ、125か250かな?」

 

自問してみました。すみません、思いつきませんし、既に両クラス共に見てます。

 

「あ、エドワーズかな、初優勝だね。いやいや、もしかしたらダンロップ?」

 

他の可能性も考えてみましたが、何度も見ているポーズをしていました。どう見てもあの人です。

そうですか、シーズン5勝目ですか、良かったですね。。。

 

見ません!MotoGP見終わるまでYahoo!プロ野球見ません!!(涙)

>>

ええ見ましたよ。MotoGP。1周目の途中でいきなり画面が真っ暗になって「アンテナをご確認下さい」。。。(そうですウチはCSで見てます。電波、大事ですね。)その後映ったと思ったら途切れが延々と続き、ようやく映ったと思ったらすでに7周目でしたよ。orz

追記:2ch見たら他にも電波障害が見れなかった or 途切れた人が多数いたようです。うーむ。

CakePHP Controller小話

この記事の所要時間: 39

9月に入りましたが、まだまだ暑い日が続きますね。アイスコーヒーとエアコンが欠かせません。さてここでbakerの皆さんに涼しくなる小話でも。

CakePHPでは1アクションがcontrollerの1メソッドになっています。アクション名(メソッド名)はリクエストのあったURLから決定されます。つまり外部からcontrollerのメソッドを実行できてしまうわけです。ただフレームワークがアクションメソッドだけをアクションとして実行するようにしてくれれば問題は無いはずです。ではURLで指定されたアクション(メソッド)がアクションメソッドかどうかどのように判断しているのでしょうか。

これが実は通常のメソッドとアクションメソッドとの区別は無いんですね。フレームワークはURLで指定されたアクション(メソッド)を単に呼んでいるだけなのです。つまりcontroller内のメソッドは外から呼び放題なわけです。

 

ちょっと涼しくなってきましたか?

 

こりゃいけないって事でアプリケーションのcontrollerではアクションメソッドだけを書きましょう、という話になるのですが、それだけではダメなんです。そう親クラスのControllerには多くのメソッドがあるんですね。それを継承しているんで、当然Controllerクラスのメソッドも呼び放題なわけです。

 

背中がゾクッとしてきましたね。

 

さらに付け加えるとURLの指定でメソッドに引数を与えることもできてしまいます。

 

 

怖いですねー。ホラーですねー。

 

 

で、どうしましょ。という話です。

まず以下に該当するメソッドはアクションとしては実行されません。

  1. メソッド名が[_](アンダースコア)ではじまるもの
  2. beforeFilter,beforeRender,afterFilterメソッド
  3. アクセス制御子がprivateのメソッド(PHP5のみ。これはPHP自身がFatal errorを出す)

これを見るとAppControllerや各controllerでは1.か3.のルールでメソッドを書けば大丈夫なようです。

ただControllerクラスのメソッドで上記のルールに該当しないものはやはり呼ばれてしまいます。とりあえずの実害は(おそらく)無いのでしょうけど、根本的に任意のメソッドを外部から呼ばれてしまうのは気持ち悪いです。そこでまたパッチ[cakephp_action_method.patch]を作りました。

このパッチではaction_~ではじまるメソッドのみをアクションとして実行します。アクションのメソッド名は[action_ + アクション名]になります。例えば/post/indexに対応するメソッド名は[action_index]になります。(ビューファイル名は従来とおりアクション名のみで良いです。)

[app/controllers/post_controller.php]
< ?php
class PostController extends AppController
{
  function action_index() {
    // indexアクションとして呼ばれる
  }

  function other_method() {
    // これはアクションとして外部から呼ばれない
  }
}
?>

これで外部からはcontrollerのaction_~以外のメソッドは呼べなくなります。精神衛生上はこの方が良いかと。無保証ですがよろしければどうぞ。

ヘッドフォンを2つ持つ持ちたい

この記事の所要時間: 138

最近カフェやファミレスなんかで仕事をするのですが、その時に必須なのがヘッドフォン。他人の話し声が少し聞こえるくらいなら良いのですが、あまりにうるさいと会話の方が気になって集中できません。

そこでいつもノートPCにヘッドフォンを繋いで音楽を聴きながら仕事をしています。

ただ一つ問題があって、カフェで席について、さあ仕事するぞ、とカバンを開けた時に

 

「あ、ヘッドフォンが無い・・・」

 

なんて事がたまにあります。静かなカフェなら「しょうがないか」で済むのですが、うるさいファミレスなんかだと最悪です。(まあ本来そういうところなんですが。)ろくに作業もできず、コーヒーをそそくさと飲んで出ることもあります。

カバンに入っぱなしにしておけば良いのですが、普段使っているカバンが2種類あり(バイク通勤用のパッセンジャーバッグと仕事用の手提げカバン)、さらに事務所でもヘッドフォンをたまに使うので出したりしまったりが多いのです。

せっかくカフェまで行って「仕事するぞ」という意気込みがかき消されるのはイヤなので、とりあえず両カバンにヘッドフォンを入れておく事にしました。事務所で使う際は通勤用カバンの分を使うことにして、仕事用カバンのヘッドフォンは出さないようにします。これなら出先で困る事はないはずです。

 

というわけで早速買いました。音質は大して問わないので一番安いアームレスのやつを。そしていざカフェへ出陣です。席について、カバンを開けて、ノートPCを取り出して・・・

 

 

「あ、ヘッドフォンが無・・・い?」

 

 

領収書はあります。なので買ったのは妄想では無いはずです。数分前に確かに電気屋で買いました。その後、近くに会画の即売会があって普段見もしないのになぜか覗いてきました。そしてカフェに着きました。

私のヘッドフォンはどこへ?

IE7はFirefox?

この記事の所要時間: 114

まあとりあえず見てみましょう。(ブラクラ系では無いのでご安心を)

http://www.ie7.com/

ie7がFirefoxだとは(笑)

Register.comで確認したところ、このドメインはDigital Dataflowという英国のインターネットサービス会社が登録したものであることが明らかになった。同ドメインは1999年に登録されており、次の更新時期は2007年3月8日である。

from: 「Firefox」ファンの仕業か–モジラサイトに人を誘導する「IE7.com」 – CNET Japan

うん?1999年?えらく仕込みの長いネタですな。

ついでにie7以降を見るとこんな感じでした。

  • ie8.com – 取得済み
  • ie9.com – 取得済み
  • ie10.com – 取得済み
  • ie11.com – 取得済み
  • ie12.com – 取得済み
  • ie13.com – 取得済み
  • ie14.com – 空き
  • ie15.com – 空き
  • ie20.com – 空き
  • ie100.com – 取得済み
  • ie2000.com – 取得済み
  • ie2006.com – 取得済み
  • ie2007.com – 取得済み
  • iexp.com – 取得済み
  • ievista.com – 取得済み

ie14が空いてますね。IE14っていつだろう・・・

CakePHP URLマッピング修正パッチ

この記事の所要時間: 053

CakePHP 管理者用アクションに書いた/admin以下をApacheのBasic認証やIP制限でアクセス制限する方法ですが、CakePHP1.1.7.3363ではApache側のアクセス制限を回避されてしまう可能性があります。

この現象はURLのQUERY_STRINGにurl=を指定した場合に発生します。具体的には

http://www.example.com/post/index?url=/admin/user/index

でアクセスするとPostController#index()が呼ばれるのではなく、UserController#admin_index()が呼ばれてしまいます。

Apache側の設定(LocationMatch等)を上手く使う手もあるのですが、そもそもコントローラとアクションが上書きされてしまう事自体が問題だと思うので、修正パッチを書きました。気になる方はどうぞ。

[cakephp_url_mapping.patch]

Home > アーカイブ > 2006-09

検索
フィード
メタ情報

Return to page top