MW211 EXIT

devlog
PHP/環境変数による現在地の認識
2011年08月28日
┌───────┬──────────────────────────────┐
│URL名         │http://www.mw211.com/sub/index.php?key=val                  │
├───────┼──────────────────────────────┤
│ファイルパス名│C:\www\htdocs\sub\index.php                                 │
└───────┴──────────────────────────────┘
上記例において、「index.php」にて、それぞれの位置情報を得るPHPの記述。
┌──────────────┬───────────────────────┐
│index.php                   │basename($_SERVER['SCRIPT_NAME'])             │
├──────────────┼───────────────────────┤
│index                       │basename($_SERVER['SCRIPT_NAME'], '.php')     │
└──────────────┴───────────────────────┘
┌──────────────┬───────────────────────┐
│key=val                     │$_SERVER['QUERY_STRING']                      │
└──────────────┴───────────────────────┘
┌──────────────┬───────────────────────┐
│sub/index.php?key=val       │$_SERVER['REQUEST_URI']                       │
├──────────────┼───────────────────────┤
│sub/index.php               │$_SERVER['PHP_SELF']                          │
├──────────────┼───────────────────────┤
│sub/index.php               │$_SERVER['SCRIPT_NAME']                       │
└──────────────┴───────────────────────┘
┌──────────────┬───────────────────────┐
│C:\www\htdocs\sub\index.php │___FILE___                                    │
├──────────────┼───────────────────────┤
│C:\www\htdocs\sub           │realpath('.');                                │
│                            │realpath(NULL);                               │
│                            │dirname(___FILE___);                          │
├──────────────┼───────────────────────┤
│C:\www\htdocs               │realpath('..');                               │
│                            │dirname(realpath('.'));                       │
└──────────────┴───────────────────────┘
分類:PHP
PHP/特定の文字を含むかの判定
2011年08月24日
PHPである文字列中に、ある特定の文字(列)を含むかを判定する方法。
┌────────────┐
│substr_count('ABC', 'A')│(「ABC」中に「A」を含むか判定する場合)
└────────────┘
上記が「1以上」(=真)なら、「含む」と判定。
ちなみに、これは(「ABC」中の「A」の)文字数をカウントする関数である。
分類:PHP
PHP/PDOのSELECT文実行
2011年08月23日
PHPのPDOのSELECT文実行で、以下と以下は同じ(みたい)。
┌──────────────────────────────────────┐
│foreach ($dbh->query($sql) as $row) {                                       │
├──────────────────────────────────────┤
│$stmt = $dbh->query($sql);                                                  │
│while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {                             │
└──────────────────────────────────────┘
以下と以下も同じ(みたい)。
┌──────────────────────────────────────┐
│$stmt = $dbh->query($sql);                                                  │
├──────────────────────────────────────┤
│$sth = $dbh->prepare($sql);                                                 │
│$sth->execute();                                                            │
└──────────────────────────────────────┘
分類:PHP、PDO
PHP/セッション数を数える方法
2011年08月21日
セッション数(セッションファイル数)を数える方法は以下の通り。
┌──────────────────────────────────────┐
│count(glob(session_save_path().'/sess_*'))                                  │
└──────────────────────────────────────┘
glob関数って便利だね。

ちなみにセッションファイルは、「'sess_'+セッションID」というファイル名である。
分類:PHP
PHP/ループ時の注意点
2011年08月19日
┌──────────────────────────────────────┐
│for (ループ条件) {                                                          │
│  if (ループの先頭に戻る条件) {                                             │
│    continue;                                                               │
│  }                                                                         │
│  // 実行しない処理                                                         │
│}                                                                           │
└──────────────────────────────────────┘
for文(ループ文)を途中で元に戻る(後続をスキップする)場合には
「continue」文を使うが、
switch-case文で条件分岐してこれを行う場合、
PHPではswitch-case文もループ文の一種とみなされるので
(二重にcontinueするように)「continue 2」としなければならない。
┌──────────────────────────────────────┐
│for (ループ条件) {                                                          │
│  switch (ループの先頭に戻る条件) {                                         │
│    case  '(該当する条件)':                                                 │
│      continue 2;                                                           │
│  }                                                                         │
│  // 実行しない処理                                                         │
│}                                                                           │
└──────────────────────────────────────┘
分類:PHP
PHP/タイムゾーンの設定
2011年08月18日
php.iniファイルに以下のような感じで設定する。
┌──────────────────────────────────────┐
│[Date]                                                                      │
│date.timezone = Asia/Tokyo                                                  │
└──────────────────────────────────────┘

プログラム中で設定する場合は以下のような感じ。
┌──────────────────────────────────────┐
│date_default_timezone_set('Asia/Tokyo');                                    │
└──────────────────────────────────────┘
分類:PHP
PHP/if-else文をswitch-case文に書き換える
2011年08月16日
┌───────────┐
│if (判定文1) {        │
│  処理1;              │
│} else if (判定文2) { │
│  処理2;              │
│} else if (判定文3) { │
│  処理3;              │
│} else {              │
│  処理4;              │
│}                     │
└───────────┘
上記は下記のように書き換えられる。
┌───────────┐
│switch (TRUE) {       │
│  case (判定文1):     │
│    処理1;            │
│    break;            │
│  case (判定文2):     │
│    処理2;            │
│    break;            │
│  case (判定文3):     │
│    処理3;            │
│    break;            │
│  default:            │
│    処理4;            │
│    break;            │
│}                     │
└───────────┘
分類:PHP
UTF-8のマルチバイト文字の文字長
2011年07月29日
全角文字(マルチバイト文字)は、
(非プロポーショナルフォントでは)半角文字2つ分の横幅をとる。

「Shift-JIS」などたいていの文字コードにおいては、
半角文字は「1バイト」、全角文字は「2バイト」であり、
この横幅の比率と一致する
つまり「文字長(横幅)=バイト長」である。

しかし、「UTF-8」において、全角文字は「3バイト」である(要は情報量が多い)。
つまり「文字長(横幅)<バイト長」となる。

一方、たいていのプログラム言語においては、
「文字数を求める関数」と「バイト長を求める関数」が
それぞれ用意されている。
PHPにおいては、文字数を求める関数は「mb_strlen(,'UTF-8')」で、
バイト長を求める関数は「strlen()」である。

「文字長(横幅)」を求めたい場合、全角文字が「2バイト」なら
「文字長=バイト長」なので、「バイト長」を求めるだけでよい。

しかし、全角文字は「3バイト」の「UTF-8」の場合はそうはいかない。

「文字数」と「バイト長」を駆使して「文字長」を求めようとすると
「(文字長+バイト長)/2」で求めることができることがわかる。

方程式を解けば導きだせる答えなのだが、
不思議なことに「足して2で割れば」文字長が算出できてしまうのである。
(1の比率のものと3の比率のものを足して2で割れば2の比率になるだけだが)

…と満足してたら、PHPには「mb_strwidth(,'UTF-8')」という文字長を
ダイレクトに求めることができる関数があったのであった。

  例)「ああAAA」の場合
    (1) strlen('ああAAA')               →  9(=全角2文字×3バイト+半角3文字)
    (2) mb_strlen('ああAAA','UTF-8')    →  5(=5文字)
    (3) mb_strwidth('ああAAA','UTF-8')  →  7(=全角2文字×2+半角3文字)
        ((1)+(2))/2=(9+5)/2=7=(3)
分類:PHP
前へ 1 … 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 次へ