2008年09月17日

MySQLで長いSQL文を実行したらエラーになった場合の解決方法

INSERT処理を速くする為に、マルチプルINSERT(※1)を使用すると、SQL文が極端に長くなってしまい、実行するとエラーになることがあります。

※1.マルチプルINSERTとは、一括してINSERTのSQL文を実行します。
例:  INSERT INTO tbl_name VALUES (1,23),(2,34),(4,33);

エラーメッセージの例:
SQLSTATE[08S01]: Communication link failure: 1153 Got a packet bigger than 'max_allowed_packet' bytes
これは、SQL文が「max_allowed_packet」に設定した値を超えてしまったことを現しています。


設定ファイルを編集し、「max_allowed_packet」の値を大きくします。
# vi /etc/my.cnf
max_allowed_packet = 32M

MySQLを再起動して完了です。


ラベル:どなん
posted by ラクサス at 12:15| Comment(0) | TrackBack(0) | DB | このブログの読者になる | 更新情報をチェックする

2008年09月16日

PHPの文法〜その1〜

■基本構文
 
(1)PHPコード開始終了タグ
 <?php>〜<?> (もしくは <script language="php">〜</script>)
(2)行コメント
 //〜 (もしくは #〜)
(3)複数行コメント
 /* 〜 */
 
■データ型
(1)論理値 (boolean)
(2)整数 (integer)
(3)浮動小数点 (float,double)
(4)文字列 (string)
(5)配列 (array)
(6)オブジェクト (object)
(7)リソース (resource)
(8)ヌル (NULL)
 
■変数
(1)ルール
・先頭一文字目はドル記号「$」。 変数名は大文字小文字を区別。例 $abc $_abc
・$の後は数字からはエラー 例:× $1abc
・変数に利用できる文字
  英文字(a〜z,A〜Z)
  アンダーバー(_)
  数字(0〜9)※先頭には利用できない
  0x7F 〜 0xFFのコード文字

■変数のスコープ
(1)基本
※関数外宣言はグローバル変数、関数内宣言はローカル変数
--------------------------------------------------------------
<?php
 $global = "グローバル";//グローバル変数
 function func(){
  $local = "ローカル";//ローカル変数
 }
?>
--------------------------------------------------------------
 
(2)グローバル変数へのアクセス方法
--------------------------------------------------------------
<?php
 print "変数のスコープ ";
 $global = "グローバル";
 function func2(){
  
  $local = "ローカル";
  
  //関数内でグローバル変数を呼び出すにはglobal宣言する必要がある。$globalだけでは駄目。
  global $global;
  echo $global;
 }
 func2();
?>
--------------------------------------------------------------
 
(注意)Java言語,C言語のようなアクセス方法はできない。
--------------------------------------------------------------
<?php
 $global = "グローバル";
 function func1(){
  echo $global;//エラー
 }
 func1();
?>
--------------------------------------------------------------
 
※参考文献・URL一覧
PHP マニュアル<http://php.benscom.com/manual/ja/>

ラベル:明鏡止水
posted by ラクサス at 12:55| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする

2008年09月12日

SSD(フラッシュメモリードライブ)

SSDとは"Solid State Drive"の略で別名フラッシュメモリードライブと呼ばれ、ハードディスクドライブ(以下HDD)と同じ規格のインターフェイスを持っています。
今このSSDがHDDに代わる高速記憶媒体として注目されています。

SSDはHDDのようにディスクを持ちません。
なので、データの読み書き時HDDのような物理的な手間(読み取り装置をディスク上で移動させ、ディスク上の目的のデータがヘッド位置まで回転させる手間)が必要ありません。
このため、HDDに比べてデータの読み書きが高速化されています。
どれくらい高速かというと順次読み出しで、HDDが約100MB/秒なのに比べてSSDは一番速い物で約250MB/秒。ランダム読み出しだとHDDが約70MB/秒なのに比べてSSDは約170MB/秒。
現在でもHDDに比べて倍以上の速度が出ますが、まだSSDはさらに読み込み速度が高速化されるかと思います。
また消費電力の面でもHDDのようにディスクを回転させる必要がないため、大幅に少なくなっています。
さらに、ディスクを回す駆動部分やディスクの読み書きのためのヘッドが存在しないため、耐衝撃性もHDDに比べて高いです。

「じゃあSSDにすればいいじゃないか」という話になりそうですが、フラッシュメモリはハードディスクに比べて非常に高価なため、今現在では市販されているもので最大容量で128GBほど。
値段はというと5万円から10万円するものまであります。
500GBが1万円ほどで買えてしまうHDDに比べるとコストパフォーマンスは非常に悪いです。
つまり、今現在ではSSD単体での活用が難しく、頻繁にアクセスするデータはSSDに保存しておき、使う頻度が少ないデータや普段使わないデータなどはHDDに保存しておくといった、HDDとSSDを併用で使用するような方法が今一番SSDを活かせる使い方だと思います。
ラベル:六本木店長
posted by ラクサス at 11:04| Comment(0) | TrackBack(0) | 技術情報 | このブログの読者になる | 更新情報をチェックする

2008年09月10日

実行・開発環境構築

■実行環境
 Windows XP Professional(32bit)
 
■XAMPPとは
XAMPPとは、Apache、MySQL、PHP、Perlをひとつにまとめ、簡単にインストールできるようにしたアプリケーションで下記のソフトが含まれております。
Apache HTTPD 2.2.9 + Openssl 0.9.8h
MySQL 5.0.51b
PHP 5.2.6
PHP 4.4.8
phpMyAdmin 2.11.7
FileZilla FTP Server 0.9.25
Mercury Mail Transport System 4.52
 
■Eclipse PDTとは
Eclipse上のPHP開発環境ツール
 
■XAMPPのインストール
 [手順1]下記のソフトウェアをダウンロードし、XAMPPのインストーラをダブルクリックで起動。後はウィザードに沿ってインストールします。
  
  xampp-win32-1.6.7-installer.exe
  →ダウンロード元 http://www.apachefriends.org/en/xampp-windows.html
  →参考 http://phpspot.net/php/pgXAMPP.html
  
 [手順2]ブラウザにて、http://localhostにアクセスし、http://localhost/xampp/splash.phpがページすればイントール完了です。
 
■Eclipse PDTのインストール(本体)
 [手順1]Javaのruntimeがインストールされていない場合、JRE(or JDK)バージョンは、1.4以上インストール。
  →ダウンロード元 http://www.java.com/ja/
  
 [手順2]下記のソフトウェアをダウンロードし、解凍します。
  pdt-1.0.3.R20080603_debugger-5.2.14.v20080602-all-in-one-win32.zip
  →ダウンロード元 http://downloads.zend.com/pdt/all-in-one/
  
 [手順3]下記のソフトウェアをダウンロードし、解凍後、plugins、features ディレクトリーを<ECLIPSE_HOME> ディレクトリーにコピーします。
  pleiades_1.2.0.zip(日本語化パッチ)
  →ダウンロード元 http://sourceforge.jp/projects/mergedoc/files/
  →Readme.txt参照
  
 [手順4]eclipse.ini の最終行に以下の記述を追加
  -javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
ラベル:明鏡止水
posted by ラクサス at 12:31| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする

2008年09月09日

ご挨拶

はじめに

このページでは、XAMPPを使ったプログラミング入門・実践講座として環境構築からECの設計開発までを記載していきたいと考えております。
多忙な合間による作業ゆえ、滞ることが多くなるかもしれませんが、よろしくお願いします。



※本記載の内容は、筆者の備忘録的なものです。各ツールや情報は個人の責任でお願いします。
ラベル:明鏡止水
posted by ラクサス at 12:44| Comment(0) | TrackBack(0) | 【プログラミング】PHP編 | このブログの読者になる | 更新情報をチェックする

2008年09月05日

forループを高速化する方法

forループを高速にする方法は、ループ内で処理をどれだけ少なくするかが重要ですが、逆に処理を遅くしている処理がないか確認してみましょう。

よく、配列の分だけforでループする処理を行いますが、ループする回数はcount関数を使って数えます。
このとき、ありがちな書き方として、forの条件文の中でcount関数を使ってはいないでしょうか。

for($i=0; $i<count($ary); $i++)
{
    処理
}

この書き方ですと、forがループするたび配列の数を数えることになり、非常にコストがかかります。


実際に実験してみます。

// 配列を作成
for($i=0; $i<100000000; $i++)
{
    $ary[$i] = $i;
}

echo "開始->" . date("H:i:s") . "<br>\n";

// forの条件で毎回countした場合
for($i=0; $i<count($ary); $i++)
{
    $a++;
}

echo "終了->" . date("H:i:s") . " $a 回<br>\n";


echo "開始->" . date("H:i:s") . "<br>\n";

// 先にcountした場合
$cnt = count($ary);
for($i=0; $i<$cnt; $i++)
{
    $b++;
}

echo "終了->" . date("H:i:s") . " $b 回<br>\n";


開始->16:11:05
終了->16:11:10 10000000 回

開始->16:11:10
終了->16:11:12 10000000 回



今回の環境では、count関数の書く場所により2倍以上の差が出ました。
ちょっとした書き方の違いで性能が大きく変わるので、気をつけましょう。
ラベル:どなん
posted by ラクサス at 12:39| Comment(0) | TrackBack(0) | 技術情報 | このブログの読者になる | 更新情報をチェックする

2008年09月03日

タスクバー操作

仕事中や作業中にWindowsのタスクバーの表示の順番を入れ替えたいとか思ったことはありませんか?
ウィンドウを閉じてから開きなおすと入れ替わりますが面倒・・・
グループ化すると一応並べ代わりますが、開く個数が多いとまとめられて、何を開いてるのか分からないとか自分は良く起こります。

そういう時非常に役立つのが『Taskbar Shuffle』というソフトです。
このソフトは単純でドラッグアンドドロップでタスクバーの表示順を入れ替えることができます。
フリーソフトな上に非常に強力なので同じ悩みを持っている方にはぜひ使って欲しいです。
ソフト名で検索を掛ければDLサイトが出てくると思いますので、ぜひ使ってみてください。
ラベル:六本木店長
posted by ラクサス at 15:16| Comment(0) | TrackBack(0) | 技術情報 | このブログの読者になる | 更新情報をチェックする

2008年09月02日

PHPでソースがUTF-8でも、全角文字を2バイトで認識する方法

PHPのソースがUTF-8の場合、全角文字をstrlen関数でバイト数を求めると3バイトと認識してしまいます。

特に、HTML_QuickFormの「addRule」は、「maxlength」をstrlen関数でチェックしているので、全角文字を2byteでチェックしたい場合などは困ります。

しかし、全角=2バイトでバイト数を表したい場合、は以下のような設定をすることで、EUC-JPのバイト数として計算されます。

※この設定は、strlen関数をmb_strlen関数にオーバーロードしているので環境によっては注意が必要です。

「php.ini」もしくは、「.htaccess」に記入する

# デフォルトの言語を設定
mbstring.language = Japanese

# デフォルトの内部エンコーディングを設定
mbstring.internal_encoding = EUC-JP

# PHP関数をmb_*に上書きする
# 0: No overload
# 1: Overload mail() function
# 2: Overload str*() functions
# 4: Overload ereg*() functions
mbstring.func_overload = 2

実際にテストしてみると・・・
$data = "あいうえお";
$a = strlen($data);
$b = mb_strlen($data);
echo "a=$a";
echo "b=$b";

全角文字を2バイトと認識しました。
■設定前
a=15
b=15

■設定後
a=10
b=10
ラベル:どなん
posted by ラクサス at 17:37| Comment(0) | TrackBack(0) | web | このブログの読者になる | 更新情報をチェックする

2008年08月29日

パイオニアが16層400Gの光ディスクを開発

パイオニアがBlu-rayと同じ25G容量の光ディスクを16層に重ねて400Gの大容量再生専用光ディスクを開発しました。
再生していない他の記録層からのノイズを低減する構造を採用し、1層から16層までの読み込み精度もかなり高いと見られます。
しかも対物レンズの光学的仕様はBlu-rayの規格と同じであるため、互換性を持つことも可能だそうです。

しかし、問題なのは読み込み速度です。
Blu-rayドライブが市販の最速5倍速などですので、この速度で400G読み込んだとして最速で(60/5)*16=192分かかる計算になります。
3時間以上かかりますが、これは理想値で現実的にはさらに倍の6時間以上かかるのではないかと思います。
読み込み速度の問題で実用化はまだまだ先と思われます。

また、今回開発されたのは再生専用のディスクですが、記録型ディスクにもこの技術は使えるという発表もあり、パイオニアは今後大容量光ディスクの実現に向けて研究開発を進めるということです。

次世代光ディスクではないですが、記憶媒体として面白い技術だと思いますので、今後の動向に注目したいです。
ラベル:六本木店長
posted by ラクサス at 11:11| Comment(0) | TrackBack(0) | 技術情報 | このブログの読者になる | 更新情報をチェックする

2008年08月28日

続:Amazonで購入する時、過去に購入した商品は警告を出してほしい

以前、アマゾンで過去に購入した商品は、購入するとき警告を出して欲しいと記事を書きましたが、最近その機能がアマゾンに導入されたようです。(携帯版はまだ導入されていないようです。)

過去に買った商品の詳細ページを開くと、メニューの下あたりに以下のようなメッセージが表示されます。さらに、その注文へのリンクも表示されます。


○○さんのご注文状況のお知らせ  お客様は、2008/○/○にこの商品を購入しました。 注文をみる

ただし、このメッセージを見逃すと、カートなどでは一切表示されないので注意が必要ですが、消耗品など何回も同じものを買う場合は、逆にメッセージを出しすぎるのも問題です。

アマゾンでようやく実装された機能ですが、もう少し早く実現して欲しかったです。
ラベル:どなん
posted by ラクサス at 10:26| Comment(0) | TrackBack(0) | web | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。