今回は、前回作ったセッションハンドラを使ってみます。

といっても、requireして終わりですw

Continue reading »

Tagged with:  

今回は、PHP用のNet_TokyoTyrantを使ってセッションハンドラを作成します。

基本的には、
Tokyo TyrantによるHAなセッションストレージ 2 PHPから利用する篇
に書いてある通りだが、いくつか修正。

Continue reading »

Tagged with:  

Tokyo TyrantによるHAなセッションストレージ 2 PHPから利用する篇
を参考にして作ってみた。
2台サーバを使って、セッション情報を共有できる事を確認するのがゴール。

今回は、セッション格納用のTokyoTyrantを準備する処まで。

Continue reading »

Tagged with:  

※ProxyPreserveHost Onを設定すると発生しない??

リクエストをプロキシされる側で問題が発生する場合がある。

今回遭遇したのは、$_SERVERに関する部分。

プロキシ:example.jpの80番ポート
APサーバ:example.jpの30080番ポート

とすると、
APサーバにて、$_SERVER['HTTP_HOST']を表示させると

example.jp:30080

となっている。
普通に考えればこれは当然なんだけど、

example.jp:80

になって欲しい。
他にも、 $_SERVER['REMOTE_ADDR']と$_SERVER['SERVER_NAME']も
APサーバ側の情報になる。

そんな時の対処法としては、

$_SERVER['HTTP_HOST'] = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST']:$_SERVER['HTTP_HOST'];
$_SERVER['REMOTE_ADDR'] = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER['REMOTE_ADDR'];
$_SERVER['SERVER_NAME'] = isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? $_SERVER['HTTP_X_FORWARDED_SERVER']:$_SERVER['SERVER_NAME'];

という感じで、HTTP_X_FORWARDED系の情報を使い、プロキシ側に書き換えます。

これを使って、mojaviとかも上手く動くようになりました。

※グローバル変数を書き換えるのは危険な気もするけど…。

Tagged with:  

PHPとRubyの比較 その3

On 2009年10月11日, in 未分類, by タカ

今回はクラス周り。

一番、魅力的な部分が、クラス定義の追加

まず、普通にクラスを作る。(self.を付けるとstaticメソッドになる)

class Test
  def self.disp ; puts "disp" end
end
Test.disp

これを実行すると、

disp

少しいじる。

class Test
  def self.disp; puts "disp" end
end

Test.disp

class Test
  def self.disp; puts "disp(overwrite)" end
end

Test.disp

これを実行すると、

disp
disp(overwrite)

となる。

PHPだとクラスの多重定義になりエラー扱い。
でも、Rubyは上書きしてくれる。

PHPだと、カスタマイズ用に継承させたクラスを使っていたけど
Rubyだとそれがいらない!
カスタマイズ用の空ファイルを作っておいてもいいけどそれすらいらないか。

Tagged with:  

PHPとRubyの比較 その2

On 2009年10月10日, in 未分類, by タカ

続いて、文字コード周り。PHP5系とRuby 1.8系の比較です。
まずは、内部エンコーディングの設定。

PHPだと

mb_internal_encoding("UTF-8");

Rubyだと

$KCODE = 'UTF-8'

次に、UTF-8からShift_JISへの変換。

PHPだと

mb_convert_encoding("Shift_JIS", "UTF-8", $str);

Rubyだと

require 'iconv'
Iconv.iconv("Shift_JIS", "UTF-8", str)

まずまず、同じような感じ。
iconvが必要な点に注意!

※1.9系では文字コード周りが便利になったという話を聞きました。
それはまた後日という事で。

Tagged with:  

PHPとRubyの比較 その1

On 2009年10月10日, in 未分類, by タカ

PHPのプログラムをRubyへポーティングしようと思っています。
その過程で、PHPとRubyの比較を書いておこうと思います。

PHPの

$obj instanceof TestClass

は、Rubyでは

obj.kind_of?(TestClass)

になる。

?も関数名にできるのは意外にいい仕様だと思う。
PHPだと、

function isValidData($data) { return true; }

と関数名にisとか付けてたけど、

def validData?(data) return true end

って感じにできる。
これって結構直感的だなぁと思った。

Tagged with:  

PHPの場合

dirname(__FILE__);

bashの場合

$(cd $(dirname $0);pwd)

Rubyの場合

File.expand_path(File.dirname(__FILE__))

もしくは

require 'pathname'
Pathname.new(__FILE__).parent.realpath.to_s

Pythonの場合

import os
os.path.dirname(os.path.abspath(__file__))
Tagged with: