記事一覧 †
メインサイト †セキュリティについて †http://www.asahi-net.or.jp/%7Ewv7y-kmr/memo/php_security.html なんか上読んでると穴だらけで実運用したくない気がする。 インストール †
エラーメッセージはphp4apache.dllのモジュールが見つかりませんとでるので紛らわしい。要はphp4ts.dllをc:\windowsに置いてないと依存関係が解決できずにエラーが出てしまう。php5に関しても同様。
PHPIniDir "C:/php" 開発環境 †昔はテキストエディタだけだったが、今やeclipseなどが利用できる時代。ZendStuidoというのがリモートデバッグも出来るらしいのだが、有料なので却下。無料といえばEclipseというわけでPHPEclipseが今のところ一番のお勧め。プラグイン入れるのが面倒な御仁には全部いりパッケージのEasyEclipseForPHPをお勧めしておく。 Tips †print_rの内容を画面に出力せず変数に格納する。 †ob_start(); //ここでprint_rやvar_dumpしても画面に出力されずにバッファにたまる print_r($_SERVER); //バッファ取得 $tmp = ob_get_contents(); //バッファクリアしてバッファリングも終わり ob_end_clean();
一行完結Tips †
出力にSJISを利用する †基本PHPはソースEUCかつ出力もEUCで利用するのが一番トラブルが少ないが、携帯サイトなどで泣く泣くSJISを利用しなければいけない場合のTIPS 下記の手順でやれば文字化けもない
php.iniで設定するのはお勧めできないのでスクリプト単位で設定するのがお勧め。 ini_set('mbstring.http_output','SJIS');
ini_set('mbstring.http_input','SJIS');
ini_set('output_buffering','On');
ini_set('output_handler','mb_output_handler');
参考サイト http://www.hizlab.net/app/phppg.html エラー表示をOn/Off †本番環境などではOffになっていてその場合はエラーがまったく表示されないので画面が真白になってもあわてないこと。PHPのエラーログにはちゃんと出力される display_errors = On 文法 †可変変数 †$a = "test"; $b = "a"; $c = $$b;
ポインタ変数 †$a = "before"; $b = &$a; $b = "after"; $bを通して$aの内容を変更できる。要は参照渡し PEAR †
PECL †拡張ライブラリでC言語でコンパイルされているので早い。 php.iniについて †
ハマリポイント †一見するとエラーないのにパースエラー †全角スペースはいってませんか?たまに意図せず紛れ込んで頭抱えます。 画面が真白 †基本的に上記エラー表示をonにすればよい windows+Apache2の時のreqiure_onceの挙動 †requeire_onceは一度だけ読込む命令だが、同じファイルを相対パス表記と絶対パス表記でrequire_onceしていると別ファイルとみなされる。同じクラス名を宣言しているので二度目の読込で Cannot redeclare class のエラーがでる。上記を避けるにはrequire_onceの表記を絶対パスか相対パスかのどちらかに統一すること。どうやらDLLのバグらしい sessionにオブジェクトを格納するときの注意点 †セッションに格納したオブジェクトを取り出すところでもrequire_onceしとかないとクラス定義が未定のためメソッドが利用できない。PHPでは1リクエストで完結するの考えてみれば当然のことである。 Cannot modify header information - headers already sent by †上記エラーはヘッダー情報を操作した後にechoやprintなどの画面出力命令を行うとでてしまう。require_onceしているクラスファイルの<?php ?>タグ外の空行も画面出力とみなされるので注意 サンプルプログラム †メール送信サンプル †<?php
mb_language("Ja");
$headers = "From: xxxxx@nifty.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n";
$to = 'takeru.fujii@infinium.jp';
$subject = mb_convert_encoding('日本語テスト','iso-2022-jp','euc-jp');
$body = mb_convert_encoding('はるのうーたー','iso-2022-jp','euc-jp');
$result = mb_send_mail($to,$subject,$body,$headers);
if (!$result) {
echo "mail send failure!";
} else {
echo "mail send to $to";
}
?>
出力エンコーディングについて †
一括で指定する。ただし下記のソースコード指定で上書き可能 †php.iniのdefault_charset を変更してapache再起動 ソースコードで指定する †今までEUC-JPがデフォルトのOSでやってきたのであまりはまることは無かったが、基本的にHEADER関数で出力エンコーディングを指定した方が安全。CentOS4以降ではデフォルトUTF-8なのでEUC-JP前提のソースコードではそのままだと化ける header("Content-type: text/html; charset=EUC-JP");
Counter: 9047,
today: 1,
yesterday: 0
|