内容物のヴァージョンの遷移1

Posted by muchag | XAMPP | 2008-05-31 (土) 17:13:09

【環境】
[XAMPP for Windows]
XAMPP リリース日 Apache 2.x MySQL 4.x MySQL 5.x PHP 4.x PHP 5.x
1.6.8 2008-09-28 2.2.9   5.0.67 4.4.9 5.2.6
1.6.7 2008-07-06 2.2.9   5.0.51b 4.4.8 5.2.6
1.6.6a 2008-02-21 2.2.8   5.0.51a 4.4.8 5.2.5
1.6.6 2008-02-04 2.2.8   5.0.51 4.4.8 rc2 5.2.5
1.6.5 2007-12-23 2.2.6   5.0.51 4.4.6 5.2.5
1.6.4 2007-10-07 2.2.6   5.0.45 4.4.7 5.2.4
1.6.3a 2007-07-26 2.2.4   5.0.45 4.4.7 5.2.3
1.6.3 2007-07-22 2.2.4   5.0.45 4.4.7 5.2.3
1.6.2 2007-05-28 2.2.4   5.0.41 4.4.7 5.2.2
1.6.1 2007-04-17 2.2.4   5.0.37 4.4.6 5.2.1
1.6.0a 2007-02-21 2.2.4   5.0.33 4.4.5 5.2.1
1.6.0 2007-02-18 2.2.4   5.0.33 4.4.5 5.2.1
1.5.5 2006-11-26 2.2.3   5.0.27 4.4.4 5.2.0
1.5.4a 2006-10-04 2.2.3   5.0.24a 4.4.4 5.1.6
1.5.4 2006-09-10 2.2.3   5.0.24a 4.4.4 5.1.6
1.5.3 2006-05-28 2.2.2   5.0.21 4.4.2-pl1 5.1.4
1.5.2 2006-04-26 2.2.0   5.0.20 4.4.2-pl1 5.1.2
1.5.1 2006-01-08 2.2.0   5.0.18 4.4.1-pl1 5.1.1
1.5.0-pl1 2006-01-08 2.0.55   5.0.15 4.4.1-pl1 5.0.5
1.5.0 2005-11-06 2.0.55   5.0.15 4.4.1 5.0.5
1.4.16 2005-10-03 2.0.54 4.1.14   4.4.0 5.0.5
1.4.15 2005-08-14 2.0.54 4.1.13   4.4.0 5.0.4
1.4.14 2005-06-19 2.0.54 4.1.12   4.3.11 5.0.4
1.4.13 2005-04-10 2.0.54 4.1.11   4.3.11 5.0.4
1.4.12 2005-02-20 2.0.53 4.1.9   4.3.10 5.0.3
1.4.11 2004-12-25 2.0.52 4.1.8   4.3.10 5.0.3
1.4.10 2004-12-05 2.0.52 4.1.7   4.3.9 5.0.2
1.4.9 2004-10-02 2.0.52 4.0.21   4.3.9 5.0.2
1.4.8 2004-09-25 2.0.51 4.0.21   4.3.9 5.0.2
1.4.7 2004-09-18 2.0.51 4.0.21   4.3.8 5.0.1
1.4.6 2004-08-16 2.0.50 4.0.20   4.3.8 5.0.1
1.4.5 2004-07-14 2.0.50 4.0.20   4.3.8 5.0.0
1.4.4 2004-07-03 2.0.50 4.0.20   4.3.7  
1.4.3 2004-06-12 2.0.49 4.0.20a   4.3.7  
1.4.2 2004-04-06 2.0.49 4.0.18   4.3.6  
1.4 2004-03-25 2.0.49 4.0.18   4.3.4  
1.3 2004-02-10 2.0.49 4.0.18   4.3.6  
1.2 2003-11-04 2.0.48 4.0.16   4.3.4  
1.1 2003-10-13 2.0.47 4.0.16   4.3.3  
1.0 2003-09-03 2.0.47 4.0.14   4.3.3  
0.9 2003-07-22 2.0.47 4.0.14   4.3.3 rc2  
XAMPP リリース日 Apache 2.x MySQL 4.x MySQL 5.x PHP 4.x PHP 5.x

XAMPP 内容物のバージョンの遷移2

参考元:cl.pokari.org XAMPP に含まれる Apache,MySQL,PHP のバージョンの遷移

XAMPP | 2008-05-31 (土) 17:13:09 |

文字列検索 -> LIKE, REGEXP

Posted by muchag | MySQL | 2008-05-24 (土) 21:34:55

個人名を検索するSQL文を利用してみて、困ったことが起きた。

「山本 太郎」 に対して

  1. SELECT * name LIKE "%太郎%"

ならヒットするのだが
「トーマス・エジソン」 に対して

  1. SELECT * name LIKE "%エジソン%"

だとヒットしない…

で、ググググzzz

REGEXP なんていう比較演算子があった。

  1. SELECT * name REGEXP "エジソン"

とし、試してみると、うまくヒットした。

しかーし!
問題点もあるようで

※但し、REGEXPはレスポンスが遅い
 (例)レコードが100万件あった場合の検索処理時間
   LIKE→6秒
   REGEXP→30秒

引用元:不良社員のアフターファイブ MySQLでLIKE検索

この差はでかすぎる…

いつか他の方法を探さないといけないなぁ。

MySQL | 2008-05-24 (土) 21:34:55 |

headers_sent(バグ発見器)

Posted by muchag | PHP | 2008-05-15 (木) 2:44:51

PHP でフォーム処理をするにあたって
POST 送信先を処理用ファイルにして、
最後に元ファイルへ飛ばして、更新がちゃんとされているか確認できるようにすることが多い。

この際、header 関数を用いて

  1. header('Location: http://www.example.com/’);

などとするのだが、
header 関数は結構曲者で、

・header 関数より以前に HTML で出力している
・header 関数より以前にecho or print 文を使用している
・< ? の前に空白がある

に当てはまると

  1. header already sent

とエラーが出る。

以上とは別に

・header 関数より以前に include or require 文を使用している

これもエラーになるという記事をあちこちで見たが、
私自身が利用する場合に、include or require 文を使用していても
header 関数を利用可能な場合があり、どうもおかしいと思っていた。

本日も同じ症状にはまっていたのだが、PHP マニュアルにて素敵なものを発見した。
headers_sent() 関数である。

  1. // オプションの file と line パラメータの使用例(PHP4.3.0以降)
  2. // $filename と $linenum が後で使用されていることに注目。
  3. // これらの変数に事前に値を与えたりしてはいけません。
  4. if (!headers_sent($filename, $linenum)) {
  5.     header('Location: http://www.example.com/');
  6.     exit;
  7.  
  8. // おそらく、ここでエラー処理を行うでしょう。
  9. } else {
  10.  
  11.     echo "$filename$linenum 行目でヘッダがすでに送信されています。\n" .
  12.           "リダイレクトできません。代わりにこの <a " .
  13.           "href=\"http://www.example.com\">リンク</a> をクリックしてください。\n";
  14.     exit;
  15. }

引用元:PHP Manual headers_sent

これを利用すると、既に header 送信している場所を特定してくれるのだ。

本日、これを利用してみたところ、
require 先のファイルの最終行 ?> の後ろに、まんまと半角スペースが1つ見つかった。
これを削除したところ、require文の後ろに置いたheader関数が、希望通り動作してくれた。

PHP | 2008-05-15 (木) 2:44:51 |

DateTime

Posted by muchag | PHP | 2008-05-14 (水) 18:48:47


php:DateTime クラス

mktime

今まで、日付操作をする場合は、mktime を用いて

  1. <?php
  2. $today = mktime( 0, 0, 0, date('m'), date('d'), date('Y') );
  3. $myDate = $today + 86400 * 7; // 1週間後の日付を取得
  4. $myDate = date('Y-m-d', $myDate);
  5. echo $myDate;
  6. ?>

なんて、シリアル値で操作をしていたけど、
今日、DateTime クラスなるものを用いる方法をめっけた。

DateTime
  1. <?php
  2. $date = new DateTime("2006-12-12");
  3. $date->modify("+1 day");
  4. echo $date->format("Y-m-d");
  5. ?>

ほーほー、こういう方法もあるのか~。

更に

面白いのはmodify()で指定できる日付の形。普通は”+1 day”とか”+1 week”なんかを指定するけど、”last Monday”なんてのも指定できて便利。
この書式については、PHPのstrtotime()GNU tar 1.15.1: Relative items in date stringsに詳しく書いてある。
“2days ago”と複数形でも指定できるし、”tomorrow”なんてのもできて、ソースコードがここだけちょっと普通の文章っぽく出来るね。
引用元:floatingdays PHPの日付操作はDateTimeが簡単

らしい。

まだまだ、PHP初心者から抜け出られないな。。。
 

2015-02-08 追記
【環境】
php:5.4.7
文言指定

面白い使い方を見つけた♪
CREATIVETIPS:【php】現在日時と来月1日までの正確な時間を表示する

  1. <?php
  2. // 翌月の1日(処理を行った時刻)
  3. $next_month = new DateTime('first day of next month' );
  4. echo $next_month->format( 'Y-m-d H:i:s' );
  5.  
  6. // 翌月の1日(切り替わり時刻)
  7. $next_month = new DateTime('midnight first day of next month' );
  8. echo $next_month->format( 'Y-m-d H:i:s' );
  9. ?>
  10.  
  11. // 出力結果
  12. 2015-03-01 12:44:44
  13. 2015-03-01 00:00:00
PHP | 2008-05-14 (水) 18:48:47 |

ファイル共有

Posted by muchag | Windows | 2008-05-13 (火) 16:51:35

XXXXXXX にアクセスできません。このネットワーク リソースを使用するアクセス許可がない可能性があります。アクセス許可があるかどうかこのサーバーの管理者に問い合わせてください。

Windows XP で出た、上記のエラーについて調べてみた。

ググって最初に出てきた、Microsoft のオンラインサポートの記事を見てみた。
Windows XP で、共有ファイルやフォルダにアクセスできない、またはワークグループ内のコンピュータを参照できない
Windows XP ベースのネットワーク コンピュータにアクセスするとエラー メッセージ “このネットワーク リソースを使用するアクセス許可がない可能性があります” が表示される

しかし、どちらを試してみても解決しない。。。

で、他にあれこれ見ているうちに、こんなところを見つけた。
Windows.FAQ – ネットワークの共有フォルダに接続できない場合のチェックリスト

ここの「チェック9:共有名は適切ですか?」にある

また、日本語を含む共有名も問題を起こすことがあるため、問題が起きた場合は 12 文字以内の英数字だけの共有名でテストすることをお勧めします。

これがビンゴ!

Windows | 2008-05-13 (火) 16:51:35 |

UTF-8 と UTF-8N

Posted by muchag | PHP | 2008-05-09 (金) 21:55:45

経緯

以前作った Shift-JIS サイトを utf-8 に変換してみたら

  1. Cannot send session cache limiter - headers already sent

という Warning が出た。

headers already sent というのは、以前引っかかった

  1. session_start();

より先に余計な項目を置いているとアカンってやつだ。

でも、今回はそんなことはしていない。。。
そこでまたしてもグググググっと。。。。

すると、あった。。。

UTF-8 の罠

Windowsのメモ帳などでUTF-8で保存すると、ソースの最初にBOM (EF BB BFの3バイト)が
挿入されてしまうので、PHPから既にデータが出力された状態になっています。
使用しているエディタで最初にBOMを付けないUTF-8Nで保存する設定にできれば
UTF-8Nにしてください。不可能な場合はSJISでやってみるといいと思います。

引用元:YAHOO! JAPAN 知恵袋 PHPのセッションについて教えてください!!

解決方法

試しに、TeraPad で、UTF-8N で保存し直して UL してみると、解決。

最初は、以前のバージョンの DW で作成したファイルを、TeraPad で UTF-8 で保存したわけだが、
これではアカンらしい。。。

PHP | 2008-05-09 (金) 21:55:45 |