特定のファイル(URL)を除いたindex.htmlの有り、無しの統一

特定のファイル(URL)を除いたindex.htmlの有り、無しの統一

mod_rewriteは何度調べても全然覚えられません。。

SEO関連で調整するよう言われたので調査。
index.htmlの有り、無しの統一というありがちな話。
こんな感じ。
hogehoge/index.htmlをhogehoge/にする。

ただ今回は特定のファイル(URL)の場合を除くという指令。

サンプルフォルダ構成

— base
|– a
| `– index.html
|– b
| `– index.html
|– c
| |– cc
| | `– index.html
| `– index.html
`– index.html

.htaccessの記述

RewriteEngine on
RewriteCond %{THE_REQUEST} !^.*/b/index.html
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://example.com/base/$1 [R=301,L]

この場合
http://example.com/base/b/index.html
だけindex.htmlが書き換えられない。

RewriteCondは連続して書くとANDになるから。
ORでつなげたい場合は[OR]をつける
RewriteCondの条件で大文字小文字を区別しない場合は[NC]をつける

■RewireRuleの書式
RewriteRule Pattern Substitution [flags]
くわしくはこちら

■flagsの種類

  • redirect|R [=code] (強制 redirect)
  • forbidden|F (URL を強制的に forbidden(禁止)にする)
  • gone|G (URL を強制的に gone(消去済み)にする)
  • proxy|P (強制 proxy)
  • last|L (last(最後の)ルール)
  • next|N (next(次の)一周)
  • chain|C (次のルールにchained (チェイン))
  • type|T=MIME-type (MIME type の強制指定)
  • nosubreq|NS (内部の sub-request が no (ない) 時のみ 使われる)
  • nocase|NC (no case)
  • qsappend|QSA (query string append)
  • noescape|NE (no URI escaping of output)
  • passthrough|PT (pass through to next handler)
  • skip|S=数字 (skip next rule(s))
  • env|E=VAR:VAL (set environment variable)

参考サイト

楽:技林ブログ>mod_rewrite サンプル集

技林TOP > 自宅サーバ構築メモ > mod_rewrite

index.html「あり・なし」のURL正規化 – 301リダイレクト応用編

A Users Guide to URL Rewriting with the Apache Webserver

mod_rewrite モジュール URL 書き換えエンジン

超音波ネズミ駆除器~その後の効果~

2007年の年末に友人からねずみ退治にいい方法がないかと相談され、
超音波ネズミ駆除器 「ペストコントロ」を紹介してみたんだけれど最近その
効果について聞く機会があったので報告。

効果はものすごくあったようで、設置以来まったくネズミが出なくなったらしい。
ただし最初は装置の近くでは「ミュイーン、ミュイーン」という音が少し聞こえたらしい。
そのうち慣れてすごく意識しないと聞こえないようになったということ。
※これは人によるみたい。

設置したのは屋根裏に1つ。それで2階建ての家全体に効果があったらしい。

「ペストコントロ」を設置するまではかごで捕獲したり、そこそこ投資していた
らしい。かごで捕獲した場合はその後の処理に困ったりしていたらしいので、
そもそも姿が見えなくなったのがとっても素敵だと。

調べて教えてあげただけだけど効果絶大でいいことした気分!

PHPでセッションの有効期限を延ばす設定

セッションの寿命を延ばす

クッキーに有効期限を設定できる場合はこれが簡単。
主に徳丸本より。

PHPの場合

session_set_cookie_params関数でセッションIDを保持するクッキーの有効期限を設定する。
php.iniもしくは.htaccess等でsession.gc_maxlifetime設定の時間を延ばす。
session.gc_maxlifetimeはデフォルトで1440秒(24分)に設定されている。

php.iniで有効期限を最低3時間にする例

session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 10800

【参考サイト】

【PHP】セッションタイムアウトの時間を設定する

セッション(session)の有効期限を設定するには

セッションのガーベッジコレクションをテストする

PHP のセッション寿命の設定

session_set_cookie_params関数

session_get_cookie_params関数

session.gc_maxlifetime

session.gc_probability

session.gc_divisor

HEADのラケット購入

 

HEADのラケットが欲しいけど、「PRO」とか「MP」とかOSとかの
違いがわからなかったので調べてみたらいいサイトがあった。

HEADテニスラケット早見表

大体こんなラインナップでProから段々ウェイトが軽くなったり、
フェイス、フレーム厚が変わっていくらしい。

  • Pro
  • Mid
  • MP16×19
  • MP18×20
  • 300
  • OS
  • Elite
  • Lite

今回はネットの口コミとかいろいろ参考にして
ユーテック IG エクストリーム MPを購入。

ストリングはGOSEN エッグパワー 17 ブラックを55ポンドで。

これでレジャー用ラケットから卒業だ!

参考サイト

みんなで作る『テニスラケットデータベース』
試打コミ! - みんなの・テニス口コミ・コミュニティ -

 

効率的なWebアプリケーションの作り方のメモ


最近「効率的なWebアプリケーションの作り方」読んで写経してます。
目次

■Part1 MVC開発の基礎知識

  • 1章 MVC開発の概要
  • 2章 オブジェクト指向

■Part2 フレームワークを利用する利点

  • 3章 レガシーコードの欠点
  • 4章 リファクタリング・デザインパターン実践
  • 5章 フレームワークを活用する

■Part3 モダンPHP Webアプリケーション開発

  • 6章 アプリケーション開発を始めるための準備
  • 7章 データベースとエンティティ
  • 8章 コントローラとビュー
  • 9章 フォームとデータベース

■Part4 機能の作成と実装のパターン化

  • 10章 ユーザ登録
  • 11章 イテレーション
  • 12章 管理画面
  • 13章 コマンドラインスクリプト
  • 14章 ユニットテスト
  • 15章 機能テスト

Part1、Part2はオブジェクト指向、フレームワークに関することがすごく
コンパクトにまとめられててとってもいいと思った。

ここにまとめられていることはオブジェクト指向の分厚い本で出てくる内容なので
先にこの本で概要を見てから分厚い本に取り組めばより理解しやすいんじゃないかなと思う。
普通のPHPの本では触れられていないところが記載されている感じ。

Part3からはSymfony2を使っての開発を一通り行う構成。
この本が出た当初のSymfonyのバージョンは2.0.11だけど9月に2.1.2が
出てるので公式サイトからそのまま落とすと設定ファイルの内容が違ったりして
テンパる。
本に沿って写経するなら公式サイトから2.0.17のstandardをダウンロードする。

Download

そのほかにPart3を現在写経するにあたって問題がありそうなのは、
7章のデータフィクスチャのところ。
本に記述してあるやり方では入らなかったので公式サイトに書いてある
やり方で設定する必要がある。
DoctrineFixturesBundle
このページでも2.0バージョンを選択しないとやり方が違うので注意。

あとは8章のViewを作っていくところで、サンプルのソースコードを
そのまま入力するとまだ読み込んでいないパラメータとかを使っていて
エラーがでるので、画面のエラーメッセージを見つつ修正していく必要があった。

あとは技術評論社のサポートページからサンプルソースを落として
見比べながらやっていけばOK。

ほかの書評記事でも書いている通り初心者がSymfony2を覚えるための本では
ないなーという感じ。
PHPでDDDで組むための参考にはちょうどいいと感じた。

まだ習得できてないけどね。

LPI Level1 の記録

先日取得したLPI Level1の記録。

出題範囲が2年前に買ったLPIC レベル1の本の範囲と変わるということで
勿体無いのと、なんか資格欲しいかもと思ったので受験。
LPI Level1 Exam 101 670点
LPI Level1 Exam 102 630点

試験範囲が変わる直前にLPI Level1 取得。

勉強は小豆本のRelease3.0対応本と

Ping-tで勉強。全部金にするまでやって、コマ問までやった。
とりあえず上記のことをすれば普通に合格できると思う。

ただ、満点取るのは難しいとおもう。
実際に見たことも無い問題が少し出題されて焦った。。

勉強してみてLevel1はLinuxに慣れるという意味では結構
いいんじゃないかなと思った。
でも実際のサーバの設定系はLevel2からなので実務に関係する
のはLevel2以降なんだなと。

今からLevel1の取得を目指す人は出題範囲が変わったので

↑こっちを買わないといけないので注意。

次はLevel2を目指します。年内に取れたらいいな。
とりあえずRelease3.5対応の小豆本が発売されるの待ってます。

LPI Level3の取得までが目標。

2012年植え付け

久しぶりの投稿。

2012年夏野菜の植え付け開始。どうも毎年GWに行うっぽい。

カインズホームで苗を購入してきた。

今年購入した苗

  • きゅうり[北進](自根苗)×2
  • ズッキーニ(自根苗)×3
  • トマト[ホーム桃太郎](接木)×1
  • トマト[ホーム桃太郎](自根苗)×1
  • なす[千両2号](自根苗)×1
  • なす[水茄子](自根苗)×1
  • ピーマン[京みどり](自根苗)×2

父親提供

  • トマト[アイコ](自根苗)×2

以下写真

昨年の失敗を考慮して今年はズッキーニにマルチを使用。

大きくなることを考慮してけっこう間を開けておいた。

手前の透明の半球をかぶってるのがズッキーニ。

それ以外の苗はとりあえず植えて風除けの肥料の袋を

かぶせておいた。

次回畑にいったら空芯菜とかぶの種をまく予定。

CentOS6.2をホストにしてopenVZ入れてコンテナのバックアップとバックアップからのコンテナの作成メモ

タイトルの通り・・・
CentOS6.2をホストにしてopenVZ入れてコンテナのバックアップとバックアップからのコンテナの作成メモ

環境CentOS6.2

■openVZのインストール自体は以下のサイトを参考に

Installing And Using OpenVZ On CentOS 6.0

■vzdumpのインストール

◇ダウンロードしてインストールしてみる。

#wget http://download.openvz.org/contrib/utils/vzdump/vzdump-1.2-4.noarch.rpm
#rpm -i vzdump-1.2-4.noarch.rpm

◇足りないって言われる

エラー: 依存性の欠如:
		cstream は vzdump-1.2-4.noarch に必要とされています
		perl(LockFile::Simple) は vzdump-1.2-4.noarch に必要とされています

◇足りないものを入れる為にrpmforgeリポジトリの追加

#rpm -ivh http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
#rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

◇設定ファイルでenabledを全部0にしておく

#vi /etc/yum.repos.d/rpmforge.repo
#cat /etc/yum.repos.d/rpmforge.repo |grep enabled

◇vzdumpで必要とされたものをinstall

#yum --enablerepo=rpmforge install cstream
#yum --enablerepo=rpmforge install perl-LockFile-Simple

◇再度インストール

#rpm -i vzdump-1.2-4.noarch.rpm

■コンテナのバックアップのとり方

◇サスペンドにして圧縮してバクアップをとる方式で

#vzdump -suspend -compress ID
#cd /vz/dump/
#ls -al

バックアップ取れてるか確認

[root@cent6_2dev dump]# ll
合計 265564
-rw-r--r-- 1 root root      3046  3月  8 11:08 2012 vzdump-openvz-220-2012_03_08-11_05_41.log
-rw-r--r-- 1 root root 271930677  3月  8 11:08 2012 vzdump-openvz-220-2012_03_08-11_05_41.tgz

■バックアップを利用してコンテナを作成する場合

◇元々コンテナID220でIPも220なものをコンテナID221、IP221で複製する場合

#vzrestore /vz/dump/vzdump-openvz-220-2012_03_08-11_05_41.tgz 221
#vzctl set 221 --hostname dev2.artis.com --save
#vzctl set 221 --ipadd 192.168.1.221 --save
#vim /etc/vz/conf/221.conf //IPが追加になっちゃうので前のIPを消す
#vzctl start 221 

その後はサーバに接続してIPに関連する箇所を修正する

PDOでmysqlに接続する時の文字コード

久しぶりにメモ。

開発環境でPDOからmysqlにつないでデータを入れたりしてたのに
本番サーバに設置した途端にプログラムから入れたデータが文字化けした。

mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

dbにつないで文字コードの設定をみてみたけど問題なかったので変だなーと。

で、以下のプログラムで確認。

$PDO=NULL;
try {
    $PDO=new PDO(
        sprintf('mysql:host=%s;dbname=%s','localhost','dbname'),'user','password',
        array(
            PDO::MYSQL_ATTR_READ_DEFAULT_FILE=>'/etc/my.cnf',
            PDO::MYSQL_ATTR_READ_DEFAULT_GROUP=>'client',
            PDO::ATTR_EMULATE_PREPARES=>'FALSE'));
    $PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
} catch(PDOException $e) {
    var_dump($e->getMessage());
}

//$PDO->query("SET NAMES utf8");


$sth=$PDO->prepare("SHOW VARIABLES LIKE 'char%'");
$sth->execute();
while($ins=$sth->fetchObject()){
    echo $ins->Variable_name . " | " . $ins->Value . "\n";
}

開発環境での結果…

$ php connect_test.php
character_set_client | utf8
character_set_connection | utf8
character_set_database | utf8
character_set_filesystem | binary
character_set_results | utf8
character_set_server | utf8
character_set_system | utf8
character_sets_dir | /usr/share/mysql/charsets/

本番環境の結果…

$ php connect_test.php
character_set_client | latin1
character_set_connection | latin1
character_set_database | utf8
character_set_filesystem | binary
character_set_results | latin1
character_set_server | utf8
character_set_system | utf8

コレですね…

どうも開発環境では/etc/my.cnfに[client]に文字コードの
指定があったから上手くいってたけど、本番環境では
/etc/my.cnfに文字コードの設定がちゃんとされていないのが問題
だったみたい。

今回の本番環境は/etc/my.cnfを勝手に触れないので

$PDO->query("SET NAMES utf8");

で対応する。。

いろんな環境で動かすならSET NAMESはちゃんと書いておいたほうが良さそうですね。

サーバ調査コマンドメモ

ただのメモです。web+db press vol.65より

uptime ロードアベレージの確認

http://cmd.misty.ne.jp/refference/uptime.html

sar CPU使用率、I/O待ち状態の確認

http://www.syboos.jp/linux/doc/sar-command.html

pidstat プロセス単位で統計情報を参照できる

http://blog.withsin.net/2011/08/17/pidstat/

dstat 超多機能ツールらしい

dstat が便利

tcpdump パケットの中身を覗く

http://itpro.nikkeibp.co.jp/article/COLUMN/20070403/267311/

netstat TCPコネクションの状態を覗く

http://www.atmarkit.co.jp/fnetwork/netcom/netstat/netstat.html

サーバが重いときの調査手順
サーバ負荷対応手順