Posts tagged http

PHP の便利な関数 output_add_rewrite_var

1

PHP から出力する HTML に最終的に a タグや form タグを見つけ出し、自動で指定した変数をクエリストリングや hidden 属性で挿入してくれる関数です。

PHP4.3 から追加されたようなのですが知らなかったです。
昔から、session.use_trans_sid というセションID を a タグや form タグの hidden 属性に追加してくれるのはありましたが、それをセションID 以外にも使用できるように関数化したもののようです。

URL リライト機構に新しい名前/値の組を追加します。 名前および値は、URL (GET パラメータとして) およびフォーム (hidden フィールドとして) で追加されます。これは、session.use_trans_sid で透過的 URL リライティングが有効になっている場合に セッション ID が渡される方法と同じです。 絶対 URL (http://example.com/..) はリライトされないことに注意しましょう。

- PHP マニュアルより

userid の値 $userid を全てのリンクに付与したい場合は、
output_add_rewite_var('userid', $userid);と書くことにより
<a href="index.php">TOP</a>
<a href="index.php?userid=1">TOP</a>と出力されます。

form タグも
<form action="index.php" method="post">
<input type="hidden" name="userid" value="1">となります。

注意点としては絶対URLはりライトされないことです。
これがないと他サイトにまで、セションID などを渡してしまいますからね。

PHP マニュアル
output_add_rewrite_var

CakePHP アソシエーションのまとめ(3)

1

今回は belongsTo です。
CakePHP アソシエーションのまとめ(1) で hasOne をやりましたが、belongsTo はその逆です。

まとめ(1) で使用したテーブルで説明すると、Profile モデルにUser モデルを関連付けるのが belongsTo になります。

profile.php

<?php
class Profile extends AppModel {
    var $name = 'Profile';
    var $belongsTo = array('User' =>
                        array('className'  => 'User',
                              'conditions' => '',
                              'order'      => '',
                              'foreignKey' => 'user_id'
                        )
                      );
}
?>

配列のそれぞれの意味は CakePHP アソシエーションのまとめ(2) に説明があります。

これで、
$this->profile->findById($id);
とかすると、Profile モデルの該当するID のデータ内容とそのProfile モデルの元の User モデルのデータが取得できます。

もちろん、CakePHP の命名規則に従っていれば、

profile.php

<?php
class Profile extends AppModel {
    var $name = 'Profile';
    var $belongsTo = array('User');
}

?>

でもいけます。

6.4. アソシエーション

WordPress でタグを使えるようにしてみた

2

使用したプラグインは Simple Tagging です。

WordPress用、タグ付けプラグイン:Simple Tagging | 創造マラソン
こちらのサイトでかなり詳しく解説されています。

Single.php のエントリー本文の後に
<?php STP_PostTags(); ?>
を入れて、タグを表示させ、さらに
< ?php STP_RelatedPosts(); ?>
でタグにより、関連するエントリーを表示させるようにしました。
また、サイドバーに
< ?php STP_Tagcloud(); ?>
を入れてタグクラウドを表示させました。
ただ、このままではリスト構造で縦に並んでしまうので、

Tag Cloud – Simple Tagging for WordPress – Trac
こちらを参考に下記を追加しました。

style.css

ul#tagcloud { padding:0; margin:0; text-align:center; list-style:none; }
ul#tagcloud li { display:inline; font-size:70%; color:#ccc; background: none; padding: 0;}
ul#tagcloud li a, ul#tagcloud li a:link { text-decoration:none; }
ul#tagcloud li a:hover { text-decoration:underline; }
ul#tagcloud li.t1 a { color:#797979; font-size: 120%; }
ul#tagcloud li.t2 a { color:#6d6d6d; font-size: 160%; }
ul#tagcloud li.t3 a { color:#616161; font-size: 190%; }
ul#tagcloud li.t4 a { color:#555555; font-size: 210%; }
ul#tagcloud li.t5 a { color:#484848; font-size: 230%; }
ul#tagcloud li.t6 a { color:#3c3c3c; font-size: 250%; }
ul#tagcloud li.t7 a { color:#303030; font-size: 270%; }
ul#tagcloud li.t8 a { color:#242424; font-size: 290%; }
ul#tagcloud li.t9 a { color:#181818; font-size: 310%; }
ul#tagcloud li.t10 a { color:#0c0c0c; font-size: 330%; }

顔チェキを試してみた

1

最近話題の顔チェキを試してみました。

知らない方のために簡単に説明すると携帯から自分の顔写真を送ると有名人で誰に似ているか判定してくれるというケータイサイトです。

で、結果は

  1. 濱口優 63%
  2. 平泉成 61%
  3. 山口智充 60%

どれも言われたことないなぁ。平泉成さんって知りませんでした。

ちなみにウチの相方は

  1. 沢尻エリカ 51%
  2. 観月ありさ 48%
  3. 紺野まひる 48%

でした。こちらもどれも言われたことないそうです。

で、これって本人だったらどうなんだろう?と思い、濱口の写真で試してみました。
使った写真はこちらです。
結果は

  1. 濱口優 71%
  2. 森山未來 46%
  3. 小林隆 43%

でした。やっぱり本人は本人でした。確かに濱口優と森山未來は似ていると思う。

いよいよ PHP5 への移行が進むか

0

Do You PHP はてな – PHP4への最後通告

ついに来ましたか。。。2007/12/31いっぱいはサポートを続け、2008/08/08までは致命的なセキュリティFIXのみ行うようです。

最近の開発では PHP5 が増えてきましたし、いよいよPHP5 への移行が加速しそうですね。
個人的にはPHP5 は大歓迎です。

WordPress に「はてなスター」を導入してみました

0

はてなスターを導入してみました。

このブログは WordPress でやっています。
はてなスターはじめてガイド – Hatena Starに対応ブログサービスに入っていたので早速 JavaScritp コードを header.php の の前に入れてみました。
ところが、サイドメニューの「Category」などの横に表示されてしまいました。
どうも h3タグの中のaタグに☆ボタンを入れているようです。

再度、はてなスターはじめてガイド を見ると

技術的な詳細については、HatenaStar.js下部のドキュメント(英語)をご覧ください。

とあります。早速ソースを見てみると最後の方に色々とドキュメントが書かれています。

// This is the optional script for WordPress blogs
<script src=”http://s.hatena.com/js/Hatena/Star/EntryLoader/WordPress.js” type=”text/javascript”></script>

とありました。

で、

<script src="http://s.hatena.ne.jp/js/HatenaStar.js" type="text/javascript"></script>
<script src="http://s.hatena.com/js/Hatena/Star/EntryLoader/WordPress.js" type="text/javascript"></script>

と書くことにより、うまく行きました^^

さらにコメントをつけられるように、自分のブログを登録します。登録すると新たにコメントを付けられる JavaScript が発行されるので、それを追加すると。。。また、h3タグの後ろに☆ボタンが。。。

よくみるとブログ登録後に発行された JavaScritp の1行目は HatenaStar.js を読み込むもので、一番最初に貼り付けたコードと同じでした orz
で、結局ブログ登録後に発行された JavaScript と WordPress.js を読み込む JavaScript を貼り付けることにより、うまく行きました。

ブログ登録後に表示されるコードはトークンが追加されたということですね。

CakePHP アソシエーションのまとめ(2)

0

アソシエーションのまとめ(1) で書いた

< ?php
class User extends AppModel
{
    var $name = 'User';
    var $hasOne = array('Profile' =>
                    array('className' => 'Profile',
                          'conditions' => '',
                          'order' => '',
                          'dependent' => true,
                          'foreignKey' => 'user_id'
                    )
                  );
}
?>

この部分の補足です。
それぞれの意味するところは

var $hasOne = array('関連先のモデル名'=>
                array('className'  => '関連先のモデルのクラス名',
                      'conditions' => '関連を定義するSQL条件の一部',
                      'order'      => '関連先のデータの並び順',
                      'dependent'  => '関連先データの同時削除',
                      'foreignKey' => '関連先テーブル側の外部キー'
                )
              );

conditions は条件を付けて関連付けるモデルのデータを制限するときに指定する。
dependent は関連元のデータが削除されたときに、一緒に関連先のデータも削除するかどうか。
関連先のモデルで関連元のモデルの主キーを定義しているカラム名です。

dependent などはかなり便利に使えそうですね。
アソシエーションのまとめ(1) に書いたように、 foreignKey は CakePHP の命名規則に従っていれば省略可能です。

CakePHP アソシエーションのまとめ(1)

1

CakePHP のアソシエーションのまとめです。
タイトルに (1) とつけたので多分何回か続けます。

アソシエーションとはモデル間のつながりのことです。

例えば、下記のような2つのテーブルがあると

CREATE TABLE users(
    id int unsigned auto_increment primary key,
    nickname varchar(30) NOT NULL,
    created datetime default NULL,
    modified datetime default NULL
);

CREATE TABLE profiles(
    id int unsigned auto_increment primary key,
    user_id int unsigned unique,
    blog_url varchar(256),
    hobby varchar(256),
    created datetime default NULL,
    modified datetime default NULL
);

CakePHP では2つのモデルになります。
User モデルと Profile モデルです。
この2つのモデルは1対1の関係になります。
「一人のユーザは1つのプロファイルを持つ」とういことです。

この2つのモデルの関係を CakePHP に指示するには次のようになります。

< ?php
class User extends AppModel
{
    var $name = 'User';
    var $hasOne = array('Profile' =>
                    array('className' => 'Profile',
                          'conditions' => '',
                          'order' => '',
                          'dependent' => true,
                          'foreignKey' => 'user_id'
                    )
                  );
}
?>

これで、
$this->User->findById($id);とすることにより、

Array
(
    [User] => Array
        (
            [id] => 1
            [nickname] => boze
        )
    [Profile] => Array
        (
            [id] => 1
            [blog_url] => http://www.syuhari.jp/blog
            [hobby] => 読書
        )
);

のようにUser モデルだけでなく、Profileモデルの情報も同時に取得することができます。

CakePHP の命名規則を守っていれば、
var $hasOne = array('Profile');だけでもいけるようです。
※外部キーはモデル名+_id

CakePHP 日本語マニュアル
6.4. アソシエーション

PHPフレームワークのベンチマーク

0

PHPベンチマーク: Zend Framework vs Symfony vs CakePHP vs CodeIgniter vs PHP on TRAX – 徒然なるままにBlog

  • Zend-Framework
  • Symfony
  • CakePHP
  • Codelgniter
  • PHP on TRAX

のベンチマーク結果が載っています。

ただ、

モデル作成を行わないはずなのにCakePHPだけモデルが生成されるようになっていました。
PHPベンチマーク CakePHPでモデルを使用しない | Shin x blog

なので、是非CakePHP もモデル使用しないソースで実行した結果を見てみたいですね。

実行環境が元エントリとは異なるので絶対的な数値にはあまり意味が無いですが、両者を比べるとモデル生成なしの方が20%ほど速いようです。
PHPベンチマーク CakePHPでモデルを使用しない | Shin x blog

モデル使用しないと20% ほど早いそうです。

[マイ ドキュメント] フォルダのデフォルトの保存場所を変更する方法

1

[マイ ドキュメント] フォルダのデフォルトの保存場所を変更する方法
ITmedia Biz.ID:「マイドキュメント」整理法

コマンドラインを使用するときなどは不便で許せないマイドキュメントのパス。。。
C:\Documents and Settings\username\My Documents
大文字はまだいいけど、スペースとかは。。。だいたい長すぎます。tab キーで補完はできるけど。

しかし、このマイドキュメントの場所を移動できるのは知りませんでした!
これで少しは快適になるかな。

移動方法のメモ

  1. マイドキュメントのアイコンを右クリックしてプロパティを表示
  2. ターゲットタブの「移動」ボタンを押す
  3. 移動先を選択するウィンドウが出るので移動先を選択する
  4. 移動先にマイドキュメント内のファイルを移動するか聞かれるので必要なら移動させる

Windows Vista では
C:\Users\username\
に変更したらしいです。

Go to Top