MW211 EXIT

devlog
PHP/Apacheバージョンの取得
2012年08月23日
┌──────────────────────────────────────┐
│apache_get_version()                                                        │
└──────────────────────────────────────┘
上記のApache関数を使うと「Apache/2.2.22 (Win32) PHP/5.3.13」のような
文字列を取得できる。

後は、正規表現で…。
┌──────────────────────────────────────┐
│preg_replace('/^Apache\/| .*$/', '', apache_get_version())                  │
└──────────────────────────────────────┘
→「2.2.22」

┌──────────────────────────────────────┐
│preg_match('/(?<=Apache\/)\d(?:\.\d+)*/', apache_get_version(), $v);        │
│$v[0]                                                                       │
└──────────────────────────────────────┘
→「2.2.22」
分類:PHP
Apache/localhostと自身のIPアドレスの違い
2012年08月12日
localhostが127.0.0.1、自身のIPアドレスが192.168.x.xだとして、
サーバ(PHP)からCGI(Cとか)をjQueryのAjaxで呼び出す場合、
組み合わせによって、うまくいかない場合がある。

  ○サーバ=127.0.0.1    CGI=127.0.0.1
  ○サーバ=192.168.x.x  CGI=192.168.x.x
  ×サーバ=127.0.0.1    CGI=192.168.x.x
  ×サーバ=192.168.x.x  CGI=127.0.0.1

127.0.0.1と192.168.x.xには高い壁があるようだ。

なぜだろう。
分類:PHP、jQuery、Apache、【未解決】
Apache/セッションファイル
2012年08月11日
同一ブラウザで同一サイトを見ている場合には、
タブやウインドウがいくつ上がっても、同じセッションファイルを共有する。

だが、それに例外が。

localhost(127.0.0.1)を経由した場合と
自身のIPアドレス(192.168.x.x)を経由した場合とでは、
別のセッションファイルとなるのである。

………、同一サイトじゃないということか。。。
分類:PHP、Apache
PHP/セッションファイルの境界線
2012年08月08日
セッションファイルはブラウザ毎に一つのセッションファイルを共有する

つまりセッションファイルの共有状況の境界線は以下のような感じとなる。

  タブが異なる        │セッションファイルが同じ
  ウインドウが異なる  │セッションファイルが同じ
  ──────────┼─────────────
  ブラウザ種別が異なる│セッションファイルが異なる
  使用PCが異なる      │セッションファイルが異なる

なお、ブラウザ(のウインドウ全て)を終了した場合、
クッキーの方がクリアされてしまうため、同じブラウザを再度起動しても
終了前のセッションは(セッションファイル自体はあるが無関係となってしまうので)
再度使うことはできない。
分類:PHP
PHP/parse_ini_fileの注意点(2)
2012年07月17日
PHPでは「parse_ini_file()」を使ってiniファイルを解析したりするが、
この場合、以下の注意が必要。

iniファイルでは「?{}|&~![()^"」が使えないらしい。
分類:PHP
PHP/parse_ini_fileの注意点(1)
2012年07月16日
PHPでは「parse_ini_file()」を使ってiniファイルを解析したりするが、
この場合、以下の注意が必要。

・以下の文字列は「文字列""」と認識される(大文字のみ、大文字混在も含む)
    false、no、none、null、off
・以下の文字列は「文字列"1"」と認識されるもの(大文字のみ、大文字混在も含む)
    on、true、yes

なお、「one」みたいに文字列の一部の場合は「1e」とかにはならないから大丈夫。

ということで、「FLAG=true」とか指定した場合には、
「配列['セクション']['FLAG']="1"」みたいな感じになる。

ただし、「if (配列['セクション']['FLAG']) {…} else {…}」(…①)って
判定してしまえば、trueの場合は真の処理を、falseの場合は偽の処理をしてくれる。

間違って「if (配列['セクション']['FLAG'] === 'true') {…」とかやると
ハマってしまう(trueを指定しても偽になってしまう)。

ただ、①の場合、「hoge」とかでも(何らかの文字があれば)、真になってしまうので、
trueかfalseのどちらかを厳密に指定するように推奨した方がよいかも。
(ちなみに指定なし(FLAG=)だと偽になる)
分類:PHP
PHP/定義済み定数一覧
2012年07月15日
┌──────────────────────────────────────┐
│print_r(get_defined_constants());                                           │
└──────────────────────────────────────┘
お、多い…。

ちょっと乱暴すぎるのでソートする場合は以下のような感じで。
┌──────────────────────────────────────┐
│$define = get_defined_constants();                                          │
│ksort($define);                                                             │
│foreach ($define as $key => $value) {                                       │
│  printf("%s = %s\n", $key, $value);                                        │
│}                                                                           │
└──────────────────────────────────────┘
でも、お、多い。。。
分類:PHP
PHP/タイムスタンプ型(4)うるう秒
2012年07月09日
うるう秒ってあるよね(って途中で思い出した)。

どうなんだろうと思って、40年後あたりの日時を出してみた。
┌──────────────────────────────────────┐
│echo date('Y/m/d H:i:s', 40 * 365 * 86400);            →2009/12/22 09:00:00│
└──────────────────────────────────────┘
12月31日じゃないのはうるう年の関係だから気にしないとして、
気にするのは分と秒。
1972年~2009年で、24秒うるう秒があるらしい。

まったく反映されていない、きれいな00分00秒です。(9時ってのは例によって日本時間)

基本的に反映しないものらしいね。反映したらややこしいし。

なんか調べてたら「strptime()」とかにぶち当たったが、またそれは別の話。
分類:PHP
PHP/タイムスタンプ型(3)
2012年07月08日
1970年01月換算で1月=31日と、1970年02月換算で1月=28日になる
分水嶺をみつけたくなった。

地道に値が変わるところを調べた結果、以下で値が変わった。
┌──────────────────────────────────────┐
│echo (strtotime('1 month', 86400 * 30 + 53999) - (86400 * 30 + 53999));     │
│echo (strtotime('1 month', 86400 * 30 + 54000) - (86400 * 30 + 54000));     │
└──────────────────────────────────────┘
てっきり「86400 * 31±1」かなと思っていただけに意外だった。

1月30日+何か。いったい、なんだろう?

で、文字列に再変換。
┌──────────────────────────────────────┐
│echo date('Y/m/d H:i:s', 86400 * 30 + 53999);          →1970/01/31 23:59:59│
│echo date('Y/m/d H:i:s', 86400 * 30 + 54000);          →1970/02/01 00:00:00│
└──────────────────────────────────────┘
………。ローカル時間を日本時間にしていたから値が違うだけで、
結局1/31と2/1の間だったのね(ちゃんとローカル時間を考慮してくれてるんだ)。

結論、「strtotime('1 month')」は、その第二引数でしているする
基準時間の月数で31日や30日に変化する。
第二引数はたいてい省略し、現在時刻となるので現在月が反映されやすい。
ローカル時間をちゃんと考慮してくれる。
う~ん、いろいろわかった。
分類:PHP
PHP/タイムスタンプ型(2)
2012年07月07日
┌──────────────────────────────────────┐
│echo strtotime('1 day', 0);                                                 │
└──────────────────────────────────────┘
ってやると、結果は「86400」。

┌──────────────────────────────────────┐
│echo date('Y/m/d H:i:s', strtotime('1 day', 0))                             │
└──────────────────────────────────────┘
ってやると、既定を日本時間にしてると「1970/01/02 09:00:00」とかとなって
なんだかわけがわからなくなるが、「1970/01/02 00:00:00」のことで
しっかりスタートから一日分加算されているのだ。

ということで、つ・ま・り…、あのn日後とかの日付計算ができるってわけ。

┌──────────────────────────────────────┐
│$timestamp = time();                                                        │
│echo date('Y/m/d H:i:s', $timestamp).'<br/>';                               │
│$timestamp += strtotime('1 day', 0);                                        │
│echo date('Y/m/d H:i:s', $timestamp).'<br/>';                               │
└──────────────────────────────────────┘
これで1日進められる。

┌──────────────────────────────────────┐
│$timestamp += (strtotime('+1 day') - time());                               │
└──────────────────────────────────────┘
やった!これみたいなまわりくどいことをしなくてもよくなった!

ただね、月に関しては相変わらずダメ。
┌──────────────────────────────────────┐
│echo strtotime('1 month', 0);                                               │
└──────────────────────────────────────┘
この結果が「2678400=31日×86400秒」でつまり、31日固定のようだ。
ま、1970年の01月は31日あるもんね。

ちなみに1ヶ月ずらしてみると…。
┌──────────────────────────────────────┐
│echo strtotime('1 month', 2678400) - strtotime('1 month', 0);               │
└──────────────────────────────────────┘
結果は「2419200=28日×86400秒」。やはり2月で28日(うるう年じゃないし)となる。
分類:PHP
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 … 18 次へ