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秒
![[トップページ]](../lib/img//top.gif)
![[一覧]](../lib/img//list.gif)
![[検索]](../lib/img//search.gif)
![[ヘルプ]](../lib/img//help.gif)
![[ログイン]](../lib/img//login.gif)