Archive
WinVistaはダメな子じゃない!・・はず
そろそろ仕事用のパソコンでWindowsVistaを使われる方々も増えてきているのではないこと思う今日この頃。
大抵、メーカーのPCってパーテーションが区切ってなくてCドライブしかない!という状況でお困りの方、Vistaにはパーテーションを区切る機能が付いてるので、それをご紹介。
パーティションサイズの変更は、コントロールパネルの「システムとメンテナンス」→「管理ツール」にある、「コンピュータの管理」から行うことができます。
左側の、「ディスクの管理」を選択して、分割したいドライブを右クリックして、「ドライブの圧縮」から容量を指定して分割することができます。
ただし、Vistaを使用してから結構時間がたってると、HDDのいろんな場所にデータが書き込まれていて、選択できる容量が少ない場合がありますので、事前にデフラグ等をして整理すると多少改善されます。
ベストは、使い始めに区切っちゃうのが一番なんですけどね。
メーカー物のPCでパーテーション切ってないものとか少なくないので、これからの時代を生き抜くに覚えておいて損はないかも・・?
Windows7でもたぶん搭載されてると思いますし。
と、本日でVista誕生から2年が経ったんですね。
今日は何の日?
X年、Y月のZ週目月曜日が知りたいー。
ってときに使ったプログラム。
$yearに知りたい年
$monthに知りたい月
$weekに知りたい週(0~)
// 最初のX曜日を算出
for ($i = 1; $i > 8; $i++){
if(date("w", mktime(0,0,0, $month ,$i ,$year)) == 1){
break;
}
}
$ret = $i + ($week * 7);
// チェック
$last_day = date("t", mktime(0,0,0, $month, $ret, $year));
if ($ret < $last_day){
return;
}else{
return $ret;
}
日本の祝日とかで、第二月曜日が祝日だとかよくあるのでそのためだけに。
春分/秋分の日を打開する
カレンダーを作る際、春分/秋分の日が変動して計算が面倒です。
そんな春分/秋分の求め方は以下。
function getSpringHolyday($year){
if ($year <= 1947){
$ret = false;
}elseif ($year <= 1979){
$ret = floor(20.8357 + (0.242194 * ($year - 1980)) -
floor(($year - 1980) / 4));
}elseif ($year <= 2099){
$ret = floor(20.8431 + (0.242194 * ($year - 1980)) -
floor(($year - 1980) / 4));
}elseif ($year <= 2150){
$ret = floor(21.851 + (0.242194 * ($year - 1980)) -
floor(($year - 1980) / 4));
}else{
$ret = false;
}
return $ret;
}
function getAutumHolyday($year){
if ($year <= 1947){
$ret = 99;
}elseif ($year <= 1979){
$ret = floor(23.2588 + (0.242194 * ($year - 1980)) -
floor(($year - 1980) / 4));
}elseif ($year <= 2099){
$ret = floor(23.2488 + (0.242194 * ($year - 1980)) -
floor(($year - 1980) / 4));
}elseif ($year <= 2150){
$ret = floor(24.2488 + (0.242194 * ($year - 1980)) -
floor(($year - 1980) / 4));
}else{
$ret = 99;
}
return $ret;
}
20.8357とか、23.2588とか、0.242194とか、意味不明な数値が出てますが、
20.8357は、1980年の春分の日が、20日の20時14分4秒と発表されているので、そこから計算しているというわけです。23.2588も同様の考え方で・・。
0.242194は、1年365.242194日で扱われていたことから、差分として年数分計算してあげてます。
最後に、floor(($year - 1980) / 4)としているのは、閏年を考慮してます。
何分古いお話で、そんな感じで計算されてます。
表示で長い文字列を丸める!(自力篇)
なんか便乗。
mb_strimwidth関数なんてシラネーって時に自力でやってました。
それ以前にPHPってここまで考慮されてるんだなーと、標準関数の多さにびっくらこきました。
で、自力でやってた感じは文字のバイト数見たりいろいろして変換。
function FN_chktext($text, $byte){
// HTMLタグを取除く
$text = strip_tags($text);
// 文字変換
mb_internal_encoding("SJIS");
$text = mb_convert_kana($text, "RNASKH");
// 文字数取得
$t_num = mb_strlen($text);
if ($t_num > $byte){
$text = mb_substr($text, 0, $byte);
$text .= "..";
$text = mb_convert_kana($text, "s");
}
return $text;
}
たまーに中途半端なところで切れたりして文字化ける始末で、面倒だったりします。
でもって、たぶん普通にmb_strimwidth使った方が早いです、はい。
海外からのアクセスを防ぐ
海外からのアクセスを防ぐ。
そんなお困りな方は、.htaccessで大体のことはできます(サーバが.htaccessに対応している必要がありますが・・)。
order deny,allow deny from all allow from .jp
とすれば、jpドメイン以外からのアクセスを防ぐことはできます。
しかし、これだけでは、apacheの設定具合等によっては普通にアクセスできてしまう場合があるので、IPで直接制限をかけた方が良いかなと。
JPNICが管理しているIPアドレスは以下から確認できるので、それのみアクセスできるようにすれば、一応国内からのみアクセスということができます。
http://www.nic.ad.jp/ja/dns/jp-addr-block.html
設定方法としては以下。
order allow,deny allow from all deny from 210.128.0.0/11 deny from 221.16.0.0/12 ・ ・
.htaccessサンプル(一応2008/11/27付のデータで作成)
ずらっと、大量に記述する必要がありますが、こんなに多量にあってもIPv4はもう喝々で、更に桁数の増えるIPv6にそのうち移行するとか言う話も出てきていたりします。
そんな感じ。
考えた方がいいプログラム その壱
とあるプログラムで気になったことをメモ。
PCか携帯か判断する関数。
DBに1=PC、2=モバイルという風に入っており、1、2の数字は変更できる仕様になっています。
1、2の数字を変更した場合、当然以下のようなプログラムでは正常に動かなくなってしまいます。
DB:
1(変動)=PC(変動)
2(変動)=モバイル(変動)
$typeにDBの1、2が入ってきます。
function getIsMobile($type) {
$mobile = false;
switch($type) {
case 1:
$mobile = false;
break;
case 2:
$mobile = true;
break;
default:
$mobile = false;
}
return $mobile;
}
DB:
1(変動)=PC(固定)=PC(変動)
2(変動)=MOBILE(固定)=モバイル(変動)
$typeにDBのPC(固定)、MOBILE(固定)が入ってきます。
function getIsMobile($type) {
$mobile = false;
switch($type) {
case 'PC':
$mobile = false;
break;
case 'MOBILE':
$mobile = true;
break;
default:
$mobile = false;
}
return $mobile;
}
解決方法としては、1、2の数字が変動しないようにするか、別に固定のIDを振ってあげて、その固定のIDで判別してあげれば、数字が変動しても動作する柔軟なプログラムになると思います。
基本・・ですよね・・(´・(ェ)・`;)
私SQL
mysqlにはmysqldumpとかいう便利なバックアップ機能がついています。
mysqldump --all-databases -uユーザー名 -pパスワード DB名 > 保存ファイル名.sql
とすると、そのサーバーのDB全てが保存ファイル名として保存されます。
--all-databasesと指定すると、DB、テーブル、レコード全てが出力されます。
ここのパラメーターを変更することで、テーブルのみとかレコードのみとか指定できます。
よく使うパラメータは以下のとおり。
-A、--all-databases 全てのデータベースを指定。 -B、--databases 出力するデータベースを指定する。 -t、--no-create-info CREATE TABLE情報を残さない。 -d、--no-data レコードを残さない。
こんな感じで、手軽にバックアップができます。
で、戻す方法は・・
mysql -uユーザー名 -pパスワード DB名 < 保存ファイル名.sql
出力の時に使った「>」を「< 」とするだけで、入力できるお手軽さ。
ちなみに、mysqldumpのデフォルト文字コードはUTF-8のようで、環境によっては文字化けてしまう場合があるので、出力の際に「--default-character-set=文字コード」パラメータを追加することで、指定の文字コードに出来るようです。
そんな感じ。
【まとめ】正規表現
はい。
正規表現について、しょっちゅう忘れるので、適当に覚書をば。
・繰り返し
? : 直前の文字を0回または1回繰り返す
* : 直前の文字を0回以上繰り返す
+ : 直前の文字を1回以上繰り返す
{n} : 直前の文字をn回繰り返す
{n,} : 直前の文字をn回以上繰り返す
{n,m} : 直前の文字をn~m回繰り返す
基本的な繰り返し文
・文字
[abc] : a、b、cのどれか
[a-z] : a~zのどれか
[0-9] : 0~9のどれか
[あ-ん] : あ~んのどれか
[^a] : a以外の文字
[^a-z] : a~z以外の文字
上と組み合わせて、
文字[あ-ん]{2,10}とすると2文字以上~10文字以下のあ~んの単語が引っ掛かります。
[a-zA-Z]というように組み合わせることで、(a~z)の小文字大文字を引っかけることができます。
・選択
(a|b)としると、aかbというようになります。
パイプを増やすこともでき、(a|b|c)とすれば、a、b、cのどれかを対象にすることができます。
上記の[a-c]と同じ文になります。
・メタ文字
*は0回以上の繰り返しなので、何も入力しなくても対象になります。
+だと1回以上なので、マッチしなければ対象になりません。
正規表現って変な文字いっぱいで、しょっちゅう忘れます。
本日は、そんなところで。
preg_replace_callback
今回は、重いとか言うのはおいておいて、個人的に好きな関数「preg_replace_callback」でも。
以下が関数。
mixed preg_replace_callback(mixed $pattern,
callback $callback,mixed $subject)
効能は、正規表現で比較して、マッチしたものを特定の関数に投げることができる便利な関数です。
文字を置き換えるときに、動的に置き換える文字を変更したい時に便利。
1つ目の引数に、検索パターン。
2つ目にコールする関数名。
3つ目の引数に、対象の文字列。
2つ目の引数は、コールする関数名ですが、クラスで扱う場合、クラス名と関数名を配列に入れて指定する必要があるみたいです。
array(’クラス名’, ‘関数名’)
これで、検索パターンにかかったものが関数の戻り値に置き換わります。
ほらね、かんたんででしょ?
多分、重いですが・・
\e