PHP

PHP は Web 開発向きのスクリプト言語。

wordpressdokuwikiPHP で実装されている。

apache モジュールとして手軽に利用できる。

http://delicious.com/nishimotz/php

関連記事

PHPデベロッパがおかしがちな10のMySQL間違い

対話的な実行

Windows の PHP 5.3.1 でインタラクティブシェル。

C:\php53>php -a
Interactive mode enabled
 
<?php echo "a"; ?>
^Z
a
C:\php53>

エラー処理

TODO: 下記を比較する

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

ereg_replace() を preg_replace() に直す。第一引数は / などの文字で囲む。

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 での作業

ubuntu Linux に emacs 用のパッケージがある:

sudo apt-get install php-elisp

マルチバイトと文字化け

since 2011-01-16

mb_send_mail

EUC-JP でプログラムを書いて mb_send_mail関数でメールを送ると受信側で文字化けしている。

下記を書いておけば解決:

mb_language("Japanese");
mb_internal_encoding("EUC-JP");

参考 http://sb.xrea.com/showthread.php?t=8760

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

タイムゾーン

サーバの設定にかかわらず 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 で数字に。

文献

パーフェクトPHP (PERFECT SERIES 3)
小川 雄大 柄沢 聡太郎 橋口 誠
技術評論社

php.txt · 最終更新: 2011/06/10 13:44 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0