目次
PHP
PHP は Web 開発向きのスクリプト言語。
wordpress や dokuwiki も PHP で実装されている。
apache モジュールとして手軽に利用できる。
http://delicious.com/nishimotz/php
関連記事
文献
<html> <div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774144371/r4wh-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51nR2UFiAAL._SL160_.jpg" alt="パーフェクトPHP (PERFECT SERIES 3)" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774144371/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">パーフェクトPHP (PERFECT SERIES 3)</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4774144371/r4wh-22/ref=nosim/" title="パーフェクトPHP (PERFECT SERIES 3)" target="_blank">amazlet</a> at 10.12.05</div></div><div class="amazlet-detail">小川 雄大 柄沢 聡太郎 橋口 誠 <br />技術評論社 <br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774144371/r4wh-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div> </html>
対話的な実行
Windows の PHP 5.3.1 でインタラクティブシェル。
C:\php53>php -a Interactive mode enabled <?php echo "a"; ?> ^Z a C:\php53>
エラー処理
TODO: 下記を比較する
- set_exception_handler()
- エラー制御演算子 @
- E_WARNING
WARNING を例外処理で扱う:
set_error_handler( function($errno, $errstr, $errfile, $errline) { throw new ErrorException($errstr, 0, $errno, $errfile, $errline); } );
PHP 5.3
http://php.net/manual/ja/migration53.php
PHP 5.3 から user.ini というディレクトリ単位でのINIファイルが使えるという話
MacOS X で使う
since 2011-06-10
Mac OS X 10.6.5 にて確認。
http://www.php.net/manual/ja/install.macosx.bundled.php に書かれている手順のうち、
sudo nano /private/etc/apache2/httpd.conf
にて
# LoadModule php5_module libexec/httpd/libphp5.so
のコメントアウトを解除。
システム環境設定 → 共有 → Web共有を(onになってるならまずoffして)on にする。
これで拡張子 *.php のファイルで phpinfo() が動いた。PHP Version 5.3.3 だった。
TODO: apachectl graceful がエラーになる(下記):
$ sudo apachectl graceful Password: /usr/sbin/apachectl: line 82: ulimit: open files: cannot modify limit: Invalid argument
ereg 系から preg 系へ
PHP 5.3 で非推奨になった ereg 系を使っているスクリプトの warning
- "Deprecated: Function ereg_replace() is deprecated"
ereg_replace() を preg_replace() に直す。第一引数は / などの文字で囲む。
- 上記に書かれている「余分な空白削除」の例: $str = preg_replace('/\s\s+/', ' ', $str);
User Agentの振り分け
since 2010-12-05
http://www.ezinfo.jp/tips/divide 携帯端末の振り分け
iPhone, iPod touch を考慮するとこんな感じ?
<?php function get_browser_env() { if (strstr($_SERVER['HTTP_USER_AGENT'],"DoCoMo")) { $env = 'i'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'],"Vodafone")) { $env = 'i'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'],"SoftBank")) { $env = 'i'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'],"MOT-")) { $env = 'i'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'],"J-PHONE")) { $env = 'i'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'],"KDDI")) { $env = 'ez'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'],"UP.Browser")) { $env = 'i'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'],"WILLCOM")) { $env = 'ez'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'],"Mozilla/5.0 (iPod;")) { $env = 't'; } elseif (strstr($_SERVER['HTTP_USER_AGENT'],"Mozilla/5.0 (iPhone;")) { $env = 't'; } else { $env = 'pc'; } return $env; } if (get_browser_env() == 't') { $meta = '<meta name="viewport" content="width=device-width" />'; } else { $meta = '<link rel="stylesheet" href="css/pc.css" type="text/css" />'; } ?> <head> <?php echo $meta ?> </head>
emacs での作業
マルチバイトと文字化け
since 2011-01-16
mb_send_mail
EUC-JP でプログラムを書いて mb_send_mail関数でメールを送ると受信側で文字化けしている。
下記を書いておけば解決:
mb_language("Japanese"); mb_internal_encoding("EUC-JP");
ISO-2022-JP-MS 対応
since 2013-12-16
機種依存文字対応の mb_send_mail っぽい関数の実装。
①②Ⅲⅳなどの文字が化けないで送信できる。
mb_internal_encoding('UTF-8'); mb_language('ja'); function my_send_mail( $mailto, $subject, $msg_body, $from_addr, $cc_addr) { $subj = mb_encode_mimeheader( $subject, 'ISO-2022-JP-MS', 'UTF-8' ); $body = mb_convert_encoding( $msg_body, 'ISO-2022-JP-MS', 'UTF-8' ); $add_headers = "Content-Type: text/plain; charset=ISO-2022-JP" . "\r\n" . 'From: ' . mb_encode_mimeheader( $from_addr, 'ISO-2022-JP-MS', 'UTF-8' ) . "\r\n" . 'cc: ' . mb_encode_mimeheader( $cc_addr, 'ISO-2022-JP-MS', 'UTF-8' ) . "\r\n"; return mail( $mailto, $subj, $body, $add_headers ); }
HTML出力の文字化け対策
WebKit 系は EUC-JP を自動認識しないらしい。
プログラムの最初に:
mb_http_output('EUC-JP');
そして HTML meta も書いておく:
<head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head>
mb_detect_encoding が怪しい
mb_detect_encoding() を使わない方がよいらしい:
// $enc = mb_detect_encoding($text); // $text = mb_convert_encoding($text, "EUC-JP", $enc); $text = mb_convert_encoding($text, "EUC-JP", 'auto');
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1013242835
全角と半角の変換
mb_convert_kana は文字エンコードを指定しないとうまくいかない(場合がある):
$ php -a php > echo '[' . mb_convert_kana('10()abc* ', 'as', 'utf-8') . ']'; [10()abc* ] php >
タイムゾーン
サーバの設定にかかわらず JST で時刻をとりたい:
date_default_timezone_set('Asia/Tokyo'); $s = date("Ymd_His"); // 20050801_133035
日付と時刻はこういう方法も。
echo strftime("%Y-%m-%d", time()); # 2011-02-24
型キャスト
(int)$string_value で数字に。
ヒアドキュメント
変数名の埋め込みで、後続する文字と区切る方法。こんな感じでやるらしい。
$year = 2012; $month = 7; $dayofmonth = 2; $body = <<<EOF {$year}年{$month}月{$dayofmonth}日 EOF ;