青島のしま〜Blue Islands〜


PHP Tips

Smartyで,文字コードの統一をする

prefilterとpostfilterに文字コード変換関数をセットしてやると,元のソースをSJISに統一しておくことが出来ます.
$smarty->register_prefilter("convert_encoding_to_eucjp");
$smarty->register_postfilter("convert_encoding_to_sjis"); 

// SJISからEUC-JPに変換
function convert_encoding_to_eucjp($template_source) {
    // 文字コードを変換する
    return mb_convert_encoding($template_source, "EUC-JP", "SJIS");
}

// EUC-JPからSJISに変換
function convert_encoding_to_sjis($template_source) {
    // 文字コードを変換する
    return mb_convert_encoding($template_source, "SJIS", "EUC-JP");
}

UTF-8にすると警告が出る

UTF-8はファイルの先頭にBOM(byte-order-mark)があるので,ヘッダを出力したといってWarningが出力されてしまいます.

例えば,セッションの初期化をしようとして,session_start();を呼ぶと次のようなWarningがでます.

Warning: Cannot send session cache limiter - headers already sent 

解決策としては,ファイルの保存形式を,UTF-8Nという形式にすると,ファイルの先頭にBOMが付かないので,Warningが出なくなります.

ただし,Eclipseで開発していると,日本語が文字化けたりするので,Shift_JISで保存しておいて,mb_convert_encoding()関数なんかを使って変換して出力するのがよさそうです.

他のURLにリダイレクトする

<?php header("Location: http://www.hogehoge.jp/"); ?>

デバッグに便利なprint_r()関数

print_r($value); とすると,$valueが文字列でも整数でも配列でさえも, 適切に出力してくれる便利な関数です.

PHPでSOAP

PEAR SOAPか,PHP5.0で--enable-soapオプションでbuildしたSOAP extensionで使える.
SOAPが使えると,Google Web APIsなども使うことができます.

$client = new SoapClient("https://yourLogin:yourPassword@foo.com/bar.wsdl", array(
   "login"      => "yourLogin", 
   "password"  => "yourPassword",
   "trace"      => 1, 
   "exceptions" => 0)); 

$client->yourFunction();

print "\n"; 
print "Request: \n".htmlspecialchars($client->__getLastRequest()) ."\n"; 
print "Response: \n".htmlspecialchars($client->__getLastResponse())."\n"; 
print ""; 

コンストラクタの書き方

下のように,functionに続けて,クラス名を書きます.
変数が違うコンストラクタをいくつも作ることができます.
function クラス名()
{
    // 中身
}

文字列の連結

「.」を使います.
$hoge = '';
$hoge .= 'abc' . 'efg';
print $hoge;

文字列の置換

str_replace()または,eregi_replace()などを使います.
eregi_replace()は,正規表現版で,str_replace()は普通の文字列置換です.
str_replace()のほうが処理が高速です.
※戻り値をしっかり変数に入れましょう(けっこう忘れがちです(^_^;))
// str_replace(変換前文字列, 変換後文字列, 変換対象となる文字列変数)
$line = "Hoge hoge !!!REPLACE ME!!! hoge Hoge";
$line = str_replace("!!!REPLACE ME!!!", "HERE!", $line);
print $line;

PHPで配列

// 空の配列作成
$myArray = array();
// 3つの要素の配列作成
$myArray2 = array('abc', 'efg', 'hij');

// 配列の要素追加(最後に)
array_push($myArray, 'hoge');
// 配列の最後の要素削除
array_pop($myArray2);
// 配列の先頭要素削除
array_shift($myArray2);

グローバル変数

関数の中で使うときは,global指定をしないと使えませんので注意
<?php
$g_hoge = 1;

function test()
{
    global $g_hoge;
    print $g_hoge;
}
?> 

メンバ変数

$this->m_hogeというようにアクセスします. $thisをつかないと使えないらしい?
<?php
class TestClass
{
    $m_hoge = 1;

    function test()
    {
        print $this->m_hoge;
    }
}
?> 

ファイルの読み込み

file()を使うと簡単に読み込めます.
$lines = file("hoge.txt"); // 指定ファイルから配列に読み込み
foreach($lines as $line) {
    print $line;
}

CSVファイルの読み込み

$lines = file("hoge.txt"); // 指定ファイルから配列に読み込み
foreach($lines as $line) {
    $datas = explode(",", $line); // ","で区切る
    print '1:' . $datas[0] . ' 2:' . $datas[1];
}

GETやPOSTで受けとったデータを使う

PHP4.2以降(たしかそのくらい)では,$_GET や $_POST という特別な変数が用意されています.
if ($_GET['cmd'] == 'write') {
    // 書き込み処理
} else {
    // 通常表示処理
}


作成日: 2007年10月25日23時43日52秒
更新履歴
2008年07月22日 2008年02月08日 2008年02月06日 2008年02月05日 2007年10月25日 2006年12月20日 2006年12月19日 2006年12月05日 2006年09月20日 2006年06月18日 2006年06月12日 2006年04月22日 2006年03月30日 2006年02月28日 2006年02月23日 2006年02月18日 2006年01月13日 2005年12月21日