Archive for category PHP

PHP:setcookie

cookieを利用するときの注意点

php.ini(もしくは.htaccess) で以下の設定してれば問題ないと思っていましたが、とんだ勘違いでした。

php_flag session.cookie_secure On
php_flag session.cookie_httponly On

マニュアルはよく読みましょうということで

setcookie

setcookie ( string $name  [, string $value  [, int $expire = 0  [, string $path  [, string $domain  [, bool $secure = false  [, bool $httponly = false  ]]]]]] )

$secure、$httponly を true にしないと意味ないです。

session.cookie_secure

session.cookie_secureは、 セキュアな接続を通じてのみCookieを送信できるかどうかを指定します。
デフォルトは、offです。 この設定は、PHP 4.0.4で追加されました。 

session.cookie_httponly

クッキーに対して、HTTP を通してのみアクセスできるようにします。
つまり、JavaScript のようなスクリプト言語からはアクセスできなくなるということです。
この設定を使用すると、XSS 攻撃によって ID を盗まれる危険性を減らせます (が、すべてのブラウザがこの設定をサポートしているというわけではありません)。 

第2回CakePHP関西勉強会で発表してきました

6月5日(金)に第2回CakePHP関西勉強会に参加&発表してきました。
#草稿に保管したまま放置して、2週間近くたってしまいました。。。

初めて発表したのですが、全く余裕が無く途中で頭が真っ白になってましたzz

ですが、聞く側とはまた違った視点で勉強会に参加できて楽しかったです。
非常にいい経験になりました。
shin1×1さん、他参加された皆様ありがとうございました&お疲れ様でした。
また機会があれば、今度はCakePHPでより実用的な内容を発表できればなと思います。

次回までに、またぶっちゃけすぎなCakePHPの制作事例を用意しておきます。

以下は当日発表された内容と感想です。

1)フックメソッドを極める – shin1×1さん
フックメソッドの種類と実行順序がわかりやすくまとめられていて非常に参考になりました。
Model の onError() は試しに使ってみます。
Helper の afterLayout() を知れてほんと助かりました。
モバイル用にコアのViewを持ってきて、強引に文字コード変換するところでした。
あと、オープニングから発表までぶっ続けでお疲れ様でした。
6月末に出るCake本、楽しみにしています。

2)究極のコントローラを目指す – slywalkerさん
あそこまで究極を目指すかどうかは置いといて
まだまだ BadCake な状況なので、コントローラをスリムにするリファクタリング
の過程がみれて参考になりました。
最終的にコントローラのコードが全てなくなる様は圧巻です。
ふと scaffold っぽいなと思いましたけど。。。
関係ないですが、不要コードを消すエフェクトがインパクトありすぎて
何を消そうとしてたのかついつい忘れて見ている自分がそこに居ましたw

3)RubyOnRailsからCakePHPへ – yabumaru(それは私です。)
まだまだCake暦が短いので、かなりRailsよりな内容になってしまいました。
こちらにPDFにした資料アップしております。

LT1)CakePHP でこんなの作ってみました – msngさん
「名前をつけてやる」というサービスを紹介されました。
名は体を表すじゃないですが、ruドメインを取得するこだわりがすごすぎます。
そしてアイデアに感服いたしました。

LT2)CakePHP で PDF を出力してみる – keisonさん
PDF出力の需要はあるんですが、処理が本当にめんどくさいですよね。
座標合わせにグリッドを出すのはすごい!
CSV を使用した位置情報の外部化など便利なライブラリとして公開されるのを期待します。

LT3)plugin の名前がキモい – pm11opさん
Pluginの名前(URL)がキモい、、、というか繰り返しは感じていたので
さまざまな方法での解決方法が提示されていて参考になりました。
ただ、Core をいじるのだけは避けたいw

懇親会)
第1回の懇親会でも行きました近くの韓国料理屋さんです。
とにもかくにも、無事に発表が終わってホッとしました。(出来はおいといて)
今回もいろいろな方とお話できて楽しかったです。
盛り上がりすぎて気づけば 24:20 で終電ぎりぎり、急いで失礼したんですが
結局終電に間に合わず、タクシーで帰るはめになりましたzz

第3回も楽しみにしています!!

CentOS5のPHPをアップデートする

PHPでDateTimeクラスを利用するには、どうもPHP5.2以降でないとだめらしいので
PHP5.2.6にアップデートしてみる。(CentOS5だと初期はPHP5.1.6なのかな)

RPM-GPG-KEYをインストール

rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

リポジトリ参照ファイルを作成

#vi /etc/yum.repos.d/utterramblings.repo

参照ファイルの内容

[utterramblings]
name = Jason's Utter Ramblings Repo
baseurl = http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled = 0  ・・・常に参照するわけじゃないので0にしてます。
gpgcheck = 1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

yumでPHPをアップデート

# yum --enablerepo=utterramblings update php

うまくいけばこの手順で更新されるはずです。

CakePHP関西勉強会に参加してきました

久しぶりに関西での勉強会(CakePHP関西勉強会)に参加してきました。

最近業務でCakePHPを利用する機会が増えてきたので、これは行っておかねばと
個人的にはまだまだ試行錯誤の段階ですが、そういう方にもわかりやすい勉強会で大変良かったです。
是非、続けていきたいですね。

1.CakePHP アプリケーションの流れを追う [shin1×1さん]
なかなか意識して追いかけることがない部分なので、シーケンス図をベースに全体の流れがわかって参考になりました。
componentが一押しとのことで、プライベートメソッドまでcomponentに追い出す発想はなかったです。
チューニングのポイントも参考になりました、試してみます。

2.フォームメールを生成するプラグイン [slywalkerさん]
テーブルをもたいないモデルの例として紹介されていましたが、ちょうど同じ内容のもの(テーブルを利用しますが・・)を近々やる必要があるので是非参考にさせていただきます。
pluginが一押しとのことで、VIEWの管理の部分がややネックになりそうとのことでしたが、解決方法が見つかったようです。(Cakeすげぇ~w)

3.LT1:開発事例と失敗談 [keisonさん]
かなり多くの案件でCakePHPを使われていて、酸いも甘いも経験されてこられてるようでした。
同じ道を通るのかなと感じつつ聞いていました。

4.LT2:CakePHPと私(仮) [m_takagiさん]
CakePHPというか、、、なぜかPHPすら出てこなかった発表で驚きましたが
次の懇親会に向けて非常に良い繋ぎだったと思います。(わざと?)
食べ物と風景の写真が9割ぐらいだったように思いますw

5.懇親会
隣がまさかの取引先の方でかなりのサプライズでした。(名刺交換して気付きましたw)
色々な方とお話ができて楽しかったです。

IEでファイルがダウンロードできない

管理画面にCSVダウンロード機能を追加しようとしてはまりました。

エラーメッセージはこんな感じです。

www.xxxxxx.com - ...download.php をダウンロードできません。
このインターネットのサイトを開くことができませんでした。
要求されたサイトが使用できないか、見つけることができません。後でやり直してください。

っで、いろいろ調べてみると
すでに no-cache ヘッダが出力されたページにIEでアクセスするとこういった現象が起こるようです。

Content-Disposition: attachemnt と Cache-Control: no-cache によるダウンロードの問題
http://support.microsoft.com/default.aspx?scid=kb;ja;436605

セッションを発行する前に次の関数を指定すれば回避できるようです。

session_cache_limiter('public'); ・・・追加しました。
session_start();

FireFoxは特に問題なさそうです。