2009-11-19T19:03:49の更新内容

programming/php/tips/index.wiki.txt

current previous
0,0 1,87
-
${smdncms:title,Tips}
-
${smdncms:keywords,Tips}
-
*ハッシュテーブルのすべてのキーと値を列挙する
-
#code(php){{
-
while( list( $key, $value ) = each( $vars ) )
-
{
-
  echo "$key => $value\n";
-
}
-
}}
-

          
-
*可変長引数を持つ関数
-
#code(php){{
-
function print_all() {
-
  $count = func_num_args();
-
  for {
-
    echo func_get_arg( $index ) . "\n";
-
  }
-
}
-

          
-
print_all( "test", "hoge", "puni" );
-
}}
-

          
-
*foreach構文
-
foreach構文を使う例。
-
#code(php){{
-
$arr = array( "test", "hoge", "hanyaa" );
-

          
-
foreach {
-
  print "$elem\n";
-
}
-
}}
-

          
-
whileとeachを組み合わせて使う例。
-
#code(php){{
-
$arr = array( "test", "hoge", "hanyaa" );
-

          
-
while {
-
  print "$elem\n";
-
} 
-
}}
-

          
-
もう一度最初からループしたい時。
-
#code(php){{
-
reset( $arr );
-

          
-
while {
-
  print "$elem\n";
-
}
-
}}
-

          
-
*正規表現にマッチするかチェック
-
#code(php){{
-
if {
-
   print "matched\n";
-
}
-
else {
-
   print "not matched\n";
-
}
-
}}
-
大文字小文字を無視してチェックする場合はeregi、マルチバイト文字列に対して使用する場合はmberegを用いる。
-

          
-
正規表現にマッチする文字列を置換する場合は、ereg_replaceを使用する。 正規表現を用いた置換処理についても、大文字小文字を無視するeregi_replace、マルチバイト対応のmberegi_replaceが存在する。
-
#code(php){{
-
ereg_replace( $regex, $replace, $str )
-
}}
-

          
-
*ディレクトリにあるファイルを列挙する
-
ディレクトリにあるすべてのファイルを列挙する。 通常ファイル・ディレクトリの他に、カレントディレクトリ「.」と親ディレクトリ「..」も列挙される。
-
#code(php){{
-
$dir = opendir( "/home/santamarta" );
-

          
-
while {
-
    echo $filename . "\n";
-
}
-

          
-
closedir( $dir );
-
}}
-

          
-
*ファイルの内容すべてを変数に代入する
-
ファイルの内容すべてを読み込むため、読み込もうとしているファイルのサイズが非常に大きい一方で、参照したいデータ量が少ないといった場合にはムダが多い。
-
#code(php){{
-
$textfile = file( "sample.txt" );
-
while {
-
    print $value;
-
}
-
}}
-

          

programming/php/pear_xml_tree/index.wiki.txt

current previous
0,0 1,48
-
${smdncms:title,Pear XML_Tree}
-
${smdncms:keywords,Pear,XML_Tree}
-
Pear XMLを使ってXML文書を処理するまでの準備。
-

          
-
*XML_ParserとXML_Tree
-
まずは、XML_ParserとXML_Treeがインストールされているかチェックします。
-
#prompt{{
-
# pear list
-
...
-
XML_Parser           1.2.7   stable
-
XML_RPC              1.4.0   stable
-
XML_Tree             1.1     stable
-
...
-
}}
-
無いようならば、インストールします。
-
#code(sh){{
-
pear install XML_Parser
-
pear install XML_Tree
-
}}
-

          
-
ちなみに、ここまでの状態でXML_Treeを使おうとすると、PHP 5.0では下記のようなエラーが出てしまいます。 また、マルチバイト文字への考慮がなされていないらしく、文字化けします。
-
#prompt{{
-
PHP Parse error:  parse error, unexpected T_CLONE, expecting T_STRING in /usr/share/pear/XML/Tree.php on line 297
-
}}
-

          
-
*XML_Tree_Ex
-
エラーの対処はひとまず置いておいて、先にマルチバイト文字も処理できるようにします。 [[Hawk's W3 Laboratory : PHP : PEAR :: XML_Treeを使う:http://www.hawk.34sp.com/stdpls/php/pear_xml_tree.html]]にて配布されている、XML_Tree_Ex.zipをダウンロードしてきます。
-
#code(sh){{
-
wget http://www.hawk.34sp.com/phps/XML_Tree_Ex.zip
-
unzip XML_Tree_Ex.zip 
-
chmod 644 *.php
-
mv *.php /usr/share/pear/XML
-
}}
-
続いて、エラーの対処をします。 どうやら、PHP 4.0からPHP 5.0にかわってクラスまわりの記述方法が変わったらしく、それが原因でエラーになってしまっているようなので、その部分をPHP 5.0風になおします。 具体的には、以下の三つのファイルについて、インスタンスのクローンを作るメソッドcloneを__cloneに改名します。
-
#code(php){{
-
// pear/XML/Tree.php on line 297
-
//function clone() { ←この行を書き換える
-
function __clone() {
-

          
-
// pear/XML/Tree/Node.php on line 112
-
//function &clone() { ←この行を書き換える
-
function __clone() {
-

          
-
// pear/XML_Tree_Node_Ex.php on line 86
-
//function &clone() { ←この行を書き換える
-
function __clone() {
-
}}
-
これでエラーも出なくなり、マルチバイト文字もちゃんと処理できるようになります。

programming/php/index.wiki.txt

current previous
0,0 1,4
-
${smdncms:title,PHP}
-
${smdncms:keywords,PHP}
-
PHPに関すること。
-
#ls2_1

programming/php/modules/index.wiki.txt

current previous
0,0 1,16
-
${smdncms:title,モジュールの追加}
-
${smdncms:keywords,モジュール,追加,php/modules,php-mbstring,php-mysql}
-
PHPのモジュールは/usr/lib/php/modulesに保存されている(モジュールの場所は、/etc/php.iniのextension_dirで設定できる)。 ここにモジュールを追加して、php.iniを編集すればそのモジュールが使えるようになる。
-
*モジュールのインストール
-
例えば、mysqlとmbstringをインストールする場合。
-
#code(sh){{
-
 yum install php-mysql
-
 yum install php-mbstring
-
}}
-
成功した場合、/usr/lib/php/modulesディレクトリにmysql.so(とmysqli.so)とmbstring.soが存在することを確認する。 続いて、php.iniを編集してモジュールを読み込むように設定する。 [Dynamic Extensions]のセクションに次のような行を追加する。
-
#code{{
-
extension=mysqli.so
-
extension=mysql.so
-
extension=mbstring.so
-
}}
-
これでモジュールの使用準備ができた。 あとはWebサーバーを再起動してやればこのモジュールを使えるようになる。