MW211 EXIT

devlog
PHP/タイムスタンプ型(1)
2012年07月06日
タイプスタンプ型は要は「1秒を1とする整数」みたいなもんだから、
「1」を加算すれば、1秒進められる。
┌──────────────────────────────────────┐
│$timestamp = time();                                                        │
│echo date('Y/m/d H:i:s', $timestamp).'<br/>';                               │
│$timestamp += 1;                                                            │
│echo date('Y/m/d H:i:s', $timestamp).'<br/>';                               │
└──────────────────────────────────────┘

「24時間×60分×60秒」(=86400)を足してあげれば、一日進めることができる。
┌──────────────────────────────────────┐
│$timestamp = time();                                                        │
│echo date('Y/m/d H:i:s', $timestamp).'<br/>';                               │
│$timestamp += 24 * 60 * 60;                                                 │
│echo date('Y/m/d H:i:s', $timestamp).'<br/>';                               │
└──────────────────────────────────────┘

日数を計算する上では毎日均等だからいいけど(※)、
月を計算する時には31日の月とか30日の月とかあるからややこしい。
これらを「mktime()」とかが楽チンに計算してくれるわけだ。

※「うるう秒」ってどうなってんだろう。。。
分類:PHP
PHP/【訂正】タイムスタンプ型の値を1ヶ月後にする方法
2012年07月05日
先日1ヶ月後の日時を求める簡単な方法で以下を紹介しましたが、
┌──────────────────────────────────────┐
│$timestamp += (strtotime('+1 month') - time());                             │
└──────────────────────────────────────┘
これだと、これを実行した現在月により加算される日数が
31日だったり、30日だったりして、うまくいかないことが判明しました。

9月に8月1日の変数で上記を実行すると、結果は8月31日になってしまうわけです。

やっぱり、mktime()使って地道にやるのが一番の近道かも。
┌──────────────────────────────────────┐
│$timestamp = mktime(date('H', $timestamp),      // 時                       │
│                    date('i', $timestamp),      // 分                       │
│                    date('s', $timestamp),      // 秒                       │
│                    date('m', $timestamp) + 1,  // 月                       │
│                    date('d', $timestamp),      // 日                       │
│                    date('Y', $timestamp));     // 年                       │
└──────────────────────────────────────┘
分類:PHP
PHP/ゼロサプレイスと8進数(3)
2012年07月04日
気になったのでいろいろvar_dump()してみた。

「var_dump(010)」          →「int(8)」
「var_dump('010')」        →「string(3) "010"」
「var_dump('010' + 0)」    →「int(10)」
「var_dump('010' + '010')」→「int(20)」

やっぱり、数値の「010」は8進数の8で、
文字列の「010」はあくまで文字列で数値に変換する時は
10進数に変換するようだ。
分類:PHP
PHP/ゼロサプレイスと8進数(2)
2012年07月03日
ところで、1月1日を「date('md')」にすれば「0101」だよね。
これに、「7」とか足したら繰り上がって「0110」とかになるのかな?

結果は、「108」。
う~ん、「date('md')」の「0101」はあくまで文字列で
(変数に代入してvar_dump()するとstring型だとわかる)、
数値型8進数ではないようだ
ちなみに、「010」を変数に代入してvar_dump()すると、int型だけど
すでに「8」って扱いになってしまっている。

結論としては、「intval('010')」の結果が「10」になるのと同じってことだね。

「var_dump('010' + '010');」→「int(20)」でした。
分類:PHP
PHP/ゼロサプレイスと8進数(1)
2012年07月02日
整理整頓好きのゼロサプレイスの敵といったら8進数だ。
3桁の中に2桁が混じっているので、ゼロサプレイスして「010」とかした日には
8進数の「10」と認識されて(10進数の)「8」とかにされてしまう。

ところで、時間関係の関数で「date('d')」のように、
ゼロサプレイスしてくれるものがある。
これって、「07」日とかで、「+1」日後にしたら、
「010」日つまり「8」日とかになってしまったりするのでは…
…あっ、7日の次は8日だね。
問題ないというオチでした。。。
そりゃ「+10」日後を「+010」日後にしたりすりゃ8日後になりますけどね。
分類:PHP
PHP/ファイルを読み込む方法
2012年07月01日
リトライ(RETRYとSLEEP)付きで読み込むには以下のような感じで。
┌──────────────────────────────────────┐
│$file = 'パスとファイル名';                                                 │
│$fp = NULL;                                                                 │
│if (file_exists($file)) {                                                   │
│  $success_flag = FALSE;                                                    │
│  for ($i = 0; $i < RETRY; $i++) {                                          │
│    $data = file_get_contents($file);                                       │
│    if ($data !== FALSE) {                                                  │
│      $success_flag = TRUE;                                                 │
│      break;                                                                │
│    }                                                                       │
│    usleep(SLEEP);  // マイクロ秒                                           │
│  }                                                                         │
│  if ($success_flag) {                                                      │
│    $fp = tmpfile();                                                        │
│    fwrite($fp, $data);                                                     │
│    rewind($fp);                                                            │
│  } else {                                                                  │
│    Log::notice('読み込み失敗:'.$file);                                     │
│  }                                                                         │
│} else {                                                                    │
│  Log::notice('みつかりません:'.$file);                                     │
│}                                                                           │
│//$fp  --ファイルポインタ                                                   │
└──────────────────────────────────────┘
分類:PHP
【未解決】formのenctypeの弊害
2012年06月28日
<form enctype="multipart/form-data">
って、アップロードとかの時に必要だけど
これって弊害はないのかな?
なければ常時記述しておけばいいと思うのだけど
記述量が多いっていう弊害以外になんかあるのだろうか?
分類:PHP、【未解決】
PHP/jQueryの$.get()とかを移植しようとしたが…
2012年06月21日
jQueryにおいて「$.get(URL,…);」などを使って、
別CGIからデータを取得したりする場合がある。

これをPHPにそのまま移植しようとして、
「file_get_contents()」を使ってみたのだがハマった。
(っていうかいまだに抜け出していない)

(1) 相対パスのURLが使えない
  jQueryでは相対パスもOKだったが、「file_get_contents()」の場合
  「http://」から書かないとエラーとなるみたい。

(2) 絶対パスで書くとセッション情報が共有できない
  「http://」から書いたら書いたで、あっち側の世界とこっち側の世界は
  別ものとなってしまうらしく、こっちでもっているセッション情報を
  相手に引き継げない

なんかいい方法はないものか。。。

今のところは、PHPに移植せず、PHP完了後、jQueryの初期処理で実行させて
PHPで最初にやってるっぽくすることしか方法はないのかも。
分類:PHP
PHP/タイムスタンプ型の値を1ヶ月後にする方法
2012年06月19日
まずは、「YYYY-MM-DD HH:II:SS +1 month」をstrtotime()で変換するために
文字列を編集する方法。
┌──────────────────────────────────────┐
│$timestamp = strtotime(date('Y-m-d H:i:s', $timestamp) . ' +1 month');      │
└──────────────────────────────────────┘
なんかまわりぐといような。。。

続いて、現在から1ヶ月後のタイムスタンプから現在のタイムスタンプを差し引いて
1ヶ月分のタイプスタンプを求め加える方法。
┌──────────────────────────────────────┐
│$timestamp += (strtotime('+1 month') - time());                             │
└──────────────────────────────────────┘
1ヶ月分のタイプスタンプがダイレクトに取得できればいいのだが。。。

★これはダメなことが後日判明しました
  詳しくは【訂正】で
分類:PHP
PHP/foreach文の誤記(?)
2012年06月01日
┌──────────────────────────────────────┐
│foreach($data as $value) {                                                  │
│  if ($value) {                                                             │
│    echo $value;                                                            │
│  }                                                                         │
│}                                                                           │
└──────────────────────────────────────┘
普通はこんな感じで書く、foreach文を以下のようにも書けるらしい。
┌──────────────────────────────────────┐
│foreach($data as $value):                                                   │
│  if ($value) {                                                             │
│    echo $value;                                                            │
│  }                                                                         │
│endforeach;                                                                 │
└──────────────────────────────────────┘

先日、意図せずしてこんな感じで書いてしまったら動いていた。
(エラーにならないので気づかなかった)
┌──────────────────────────────────────┐
│foreach($data as $value)                                                    │
│if ($value) {                                                               │
│  echo $value;                                                              │
│}                                                                           │
└──────────────────────────────────────┘

ま、以下みたいなもんなんだろうけど、「;」がないif文だからなんかややこしい。
┌──────────────────────────────────────┐
│if ($value)                                                                 │
│  echo $value;                                                              │
└──────────────────────────────────────┘
分類:PHP
前へ 1 … 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 次へ