2013年2月23日土曜日

[apache] mod_rewrite 具体例 #1

apacheのmod_rewriteでハマったので
具体的にやりたい事と設定例を投稿していきます。

=今回やりたいこと=
http://hoge.ne.jp/appdir-name/foo/bar
へのアクセスを
http://hoge.ne.jp/appdir-name/index.php
へのアクセスに変える。

mod_rewriteの設定をする上でポイントは、
公式のドキュメント参照
■RewriteLogでログ出力して処理の流れを把握する
に尽きます。

まずは、rewriteモジュールがインストールされており、apacheにロードされているかの確認。httpd.confに下行があればok
LoadModule rewrite_module libexec/apache22/mod_rewrite.so


そして、rewriteのログ出力を行うようにhttpd.confに下行を追加 (なお、思うような挙動になったらログ出力をしないようにしておこう-> LogLevel 0にする)

RewriteLog /var/log/apache22/rewrite.log
RewriteLogLevel 7

上記のログファイルがない場合は、適宜作成しapacheのプロセスが書き込めるようにパーミッションを設定しておく。

当方の環境では、httpd.confに
Include etc/apache22/Includes/*.conf
とあるので/usr/local/etc/apache22/Includesに専用の設定ファイルである

appdir-name.confを作成して下記を記入。

  2 <Directory [absolute-path-to-document-root]/appdir-name>
  3 Order Allow,Deny
  4 Allow from all
  5
  6 RewriteEngine on
  7 RewriteBase /appdir-name
  8 RewriteRule ^.*/.*$ index.php
  9 </Directory>

ポイントは、7行目で先頭にスラッシュを含んで末尾にはスラッシュを含まないこと。さらに8行目の先頭にはスラッシュを含まないことです。

以上で設定が完了したのでapacheを再起動します。
/usr/local/etc/rc.d/apache22 restart

2013年2月19日火曜日

[Mac OS X] ドットファイルを表示する

.htaccessなどドットファイルをFinderにて表示させるには、

defaults write com.apple.finder AppleShowAllFiles TRUE
killall Finder

2013年2月17日日曜日

[Mac] MacUIM

Macにてvimで日本語を入力しだしたら、uimのvim協調モードがこいしくなった。
探したらMacUIMなるものを発見。インストールしてみたがvim協調モードは、機能しない。

とりあえずインストール方法をメモっとく。
まずは、パッケージファイルを
http://code.google.com/p/macuim/
からダウンロードする。
そして、インストールする。インストール後に自動でログアウトされるのでログインし直す。

システム環境設定->言語とテキストの「入力ソース」タブにてMacUIMとMacUIM(日本語)にチェックを入れます。
次にシステム環境設定->MacUIM を開く。漢字かな変換サーバーを、「mozc」に変えることにした。そこで「一般」タブで入力方式を「mozc(ja)」に変更する。

次は、「mozc」の「vim協調モードを有効にする」にチェックをいれます。

そして、myMacはUS配列なので「Mozc key bindings」のOn/Offで自分の割り当てた入力方式切り替えキーバインでイングを登録しておきます(自分は、Shift-Space)。
がしかし、vim協調モードは実質有効になっていない。どうすればいいのか?
分かったらまた投稿します。


2013年2月16日土曜日

smarty のインストール

レガシーなPHPのコードは、ビューとロジックのコードが入り交じり書いてる時は、いいけど後で手直ししようとした時に萎える

そこで最近見つけた「smarty」というPHPのテンプレートエンジンをインストールしてみた。テンプレートエンジンというのは、簡単に言えばスタティックなHTMLのコードの中にロジックの結果(変数)を埋め込むという物。

さっそくインストール、公式サイトからDLも出来るけど今回は、portsからインストールする。
cd /usr/ports/www/smarty3/
make config-recursive
make
make install clean

これでインストールは完了。さっそくサンプルを作ってみる。
まずは、必要なディレクトリを作成します。作成する場所は、適宜ですが今回はViewのコードを置く場所。
mkdir templates // 後に作成するテンプレートファイル(tpl)を入れます。
mkdir templates_c // PHPバイナリが置かれます
mkdir configs // 設置データを置く? 今回は必要ありません?!
mkdir cache // キャッシュデータが置かれます

次にテンプレート。
index.tpl

 1 <html>
  2 <head>
  3 <title>{$gSiteTitle}</title>
  4 </head>
  5 <body>
  6 <h1>{$gSiteTitle}</h1>
  7 </body>
  8 </html>
今回は、実にシンプルに変数の値を埋め込むのみ。$gSiteTitleの部分にPHPで計算/処理した結果が入る。
次にコントローラ。


  1 <?php
  2 require_once(dirname(__FILE__). '/../LocalSettings.php');
  3 require_once("$GLOBALS[gSmartyDir]/Smarty.class.php");
  4
  5 class Index{
  6
  7   //function index(){
  8   function base(){
  9     $view = new Smarty();
 10     $view->template_dir = "./view/templates";
 11     $view->compile_dir = "./view/templates_c";
 12     $view->config_dir = "./view/configs";
 13     $view->cache_dir = "./view/cache";
 14     $view->assign("gSiteTitle", $GLOBALS['gSiteTitle']);
 15     $view->display("index.tpl");
 16   }
 17 }
 18 ?>
9行目でsmartyのインスタンスを生成して、10-13行目で先ほど作成したディレクトリのパスをプロパティにセットしてます。
14行目で外部ファイル(LocalSettings.php)で定義されているグローバル変数(gSiteTitle)をテンプレート内の変数にアサインしています。そして、15行目で実際に描画しています。

今回は、ここまで。本当は、テーブルを格納した配列をテンプレートファイル内でforeachでまわして出力等も出来るみたいだけどまた今度ということで。。。



2013年2月14日木曜日

[PHP] 連想配列について

自分は、基本的に特殊な技術や方言は身につけないたちなので避けてきたが
PHPで関数内にてグローバル変数を参照する時に連想配列の表現をした方が
なんとなくglobalで宣言するより楽そうなんで使ってみた。

しかし、これが凄くはまった。
文中で "$GLOBALS['key']" などとグローバル変数自体をダブルクォーテーションでくくると
Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in
と叱られる。いつも思うがPHPのエラーメッセージは下世話なせいで分かりにくい。

つまるところ、連想配列をダブルクォーテーションでくくる場合、"$GLOBALS[key]"
てな具合でkeyをシングルクォーテーションでくくっては、いけないらしい。
なんだか訳の分からん仕様だ。


2013年2月12日火曜日

[FreeBSD] デスクトップ環境の構築

まずは、X11のインストール
cd /usr/ports/x11/xorg
make config-recursive
make
make install clean

次にキーボードやマウスを自動認識するためのサービスを起動時に開始するための設定。
/etc/rc.confに以下を追加。

hald_enable="YES"
dbus_enable="YES"

ここで再起動をかます。
そして、ログインして
startx
でXorgが起動する。

次にWindow Managerをインストールする。
今回は、軽量なXfceをインストールします。
cd /usr/ports/x11-wm/xfce4
make config-recursive
make
make install clean

次回Xを起動した時にXfceが起動するようにするために以下を実行
echo "/usr./local/bin/startxfce4" >> ~/.xinitrc

startx でxfceなデスクトップが現れるかを確認。

次は、Login Managerをインストール。今回は、slimをインストールしてみます。
cd /usr/ports/x11/slim
make config-recursive
make
make install clean

次回起動した時にLMがきどうするように/etc/rc.confに以下を追加
slim_enable="YES"


今回は、ここまで


参考サイト
FreeBSD ハンドブック http://www.freebsd.org/doc/ja/books/handbook/x-install.html
slimのインストールなど http://www.kishiro.com/FreeBSD/gui_environment_xorg7_xfce4.html

2013年2月7日木曜日

[Windows] デバッグ

Debugging tools for windows のGlobal flagsでダンプ対象を設定しメモリリークをチェックできるらしい。
これから試す予定

2013年2月4日月曜日

[FreeBSD] IPアドレス固定

DHCPなホストのIP固定方法をまとめてみた
ちなみに自分の自宅LANは、192.168.100.0/24

/etc/rc.conf に ipアドレス、サブネットマスク、ブロードキャストアドレスを追記します。
ifconfig_em0="inet 192.168.100.101 netmask 255.255.255.0 broadcast 192.168.100.255"
em0は、設定したいインターフェース名でifconfigで確認できます。

/etc/resolve.conf にDNSサーバーを指定します。

 nameserver 192.168.100.1
 nameserver 8.8.8.8

2行目は、Google のパブリックDNSサーバー。
ここまでの設定を反映させるためにネットワークサービスを再起動
/etc/rc.d/netif restart

次にデフォルトデートウェイ
route add default 192.168.100.1
これだとネットワークサービスを再起動した時に設定が消えてしまうので
/etc/rc.confにルーターのIPアドレスを追加します。
defaultrouter="192.168.100.1"


-- Appendix --
ネットワークサービスの再起動
/etc/rc.d/netif restart

ルーティングテーブルの表示
netstat -rn