phpの最近のブログ記事

extension_dirの設定
extension_dir = "c:/php5/ext"

Dynamic Extensionsの設定

例:

extension=php_mbstring.dll

extension=php_exif.dll
extension=php_gd2.dll

extension=php_mysql.dll
extension=php_mysqli.dll

extension=php_pgsql.dll

extension=php_pdo.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_mysql.dll
extension=php_sqlite.dll

extension=php_xsl.dll

zend_extension_ts="c:/php5/ext/php_xdebug.dll"

必要なextensionライブラリをextにコピー

最新のmysql、mysqli extensionをextにコピー(アップデート)

最新のlibmysql.dllをphpディレクトリにコピー

include_pathの設定
設定がなかったり間違っている場合、go-pear.batを実行すると、pearの環境が変になるので注意。
include_path="."

変になったら、関連エントリーの手順で復旧。

go-pear.bat

5.2.0はgo-pear.pharにバグがあるので、go-pear.pharの修正ファイルをダウンロードして、pearディレクトリにコピー。(関連エントリー参照)
実行前に、C:\Windows\pear.iniを削除しておく。

php go-pear.php local

http://go-pear.org/http://pear.php.net/go-pearをgo-pear.phpに保存して実行。

PEAR_ENV.regを実行

include_pathを確認

通常はgo-pearで追加されるが、念のため確認。
include_path=".;c:\php5\pear"

apacheの設定
httpd.confに以下を追加
# php5 setting
LoadModule php5_module c:/php5/php5apache2_2.dll
AddType application/x-httpd-php .php .phtml
PHPIniDir "c:/php5"

カテゴリー:

[PHP-users 23600] Re: バージョンアップ後にunlinkでエラー


> オープンしたままのファイルに対して削除(unlink)するなんて
> ルール違反ですしOS、バージョン、タイミングによって
> 挙動が変化するのは当然です。

まさにおっしゃる通りで、基本的には OS によって挙動が変化するのは当り
前ですが、UNIX 系の OS では一時的に作成したテンポラリファイルを確実に
消す方法としては

open 直後に unlink して、そのまま使いつづける

というのは定番的な tips だったりします。

というのは、どれかのプロセスがそのファイルをオープンしていた場合、そ
のオープンしている最後のプロセスがファイルを close するまで、そのファ
イルは存在しつづけることが保証されるからです。確か POSIX でもそう決まっ
ていたはず。

どういうときに嬉しいかというと、先ほども書いたようにプログラム内で一
時ファイルを作るときです。プログラム内で一時ファイルを使用終了したら
unlink するという処理でも良いのですが、それではエラーで終了するときに
もいちいち unlink しなければなりませんし、予想外の異常終了の場合は一時
ファイルが残ったままになってしまいます。open 直後に unlink しておけば、
例えどんなケースであれ、プロセスが終了したら確実にファイルは消去されま
す。

カテゴリー:

PHP: array_walk - Manual

bool array_walk ( array &array, callback funcname [, mixed userdata] )
通常、 funcname は引数を二つとります。 array パラメータの値が最初の引数、 キー/添字は二番目の引数となります。 オプションの userdata パラメータが指定された場合、 コールバック関数 funcname への三番目の引数として渡されます。

※このuserdataはarrayで受け渡しする。

カテゴリー:

内部エンコーディングと出力エンコーディングが異なる場合は、php.iniでは入力エンコーディング変換をせず、mb_convert_variablesなどで、自力で変換する。

※mb_convert_variablesでは、だめな場合がある。

これは、

mb_convert_variables() は、エンコーディング検出の ためにArrayまたはObjectの文字列を結合します。これは、 エンコーディング検出は短い文字列では失敗する傾向があるためです。このため、 1 つの配列またはオブジェクトにエンコーディングを混ぜることはできません。

だからだろうか?

なので、
array_walkとmb_convert_encodingで再帰処理する。

また、
変換するのは$_POSTのみにする。$_GET、$_COOKIE、$_REQUESTは変換しない。

例:


function convert_encoding(&$item, $key, $encoding){
  if (is_array($item)){
    array_walk($item, 'convert_encoding', $encoding['to'], $encoding['from']);
  } else {
    $item = mb_convert_encoding($item, $encoding['to'], $encoding['from']);
  }
}

//array_walk($_GET, 'convert_encoding', array('to' => $internal_encoding, 'from' => $http_output));
array_walk($_POST, 'convert_encoding', array('to' => $internal_encoding, 'from' => $http_output));
//array_walk($_COOKIE, 'convert_encoding', array('to' => $internal_encoding, 'from' => $http_output));
//array_walk($_REQUEST, 'convert_encoding', array('to' => $internal_encoding, 'from' => $http_output));


mb_convert_variables

PHP/tips/日本語環境php.ini設定 - PukiWiki

カテゴリー:

入出力にShift_JISを使用する場合は、以下のmbstring設定が必要。
※このやり方はよくない。下記を参照。

mbstring.encoding_translation = On (php.ini または .htaccess)
mbstring.http_input = auto (php.ini または .htaccess)
mbstring.language = Japanese (php.ini または .htaccess またはスクリプト)

[php.ini]
;; HTTP 入力変換を有効にする
mbstring.encoding_translation = On
;; HTTP 入力エンコーディング変換を auto に設定
mbstring.http_input = auto

[.htaccess]
# shift_jis の場合のためのmbstring設定
# HTTP 入力変換を有効にする
php_value mbstring.encoding_translation 1
# HTTP 入力エンコーディング変換を auto に設定
php_value mbstring.http_input auto

[スクリプト]
mb_language($language);
mb_internal_encoding($internal_encoding);
mb_http_output($http_output);
//mb_detect_order('auto');
mb_substitute_character('none');

PHP: マルチバイト文字列関数 (mbstring) - Manual

※このやり方はよくない。
Shift_JISの場合はこれでいけるが、エンコードを動的に切り替える場合、UTF-8で入力エンコードがおかしくなる。
php.iniや.htaccessで、入力エンコーディング変換をせず、スクリプトで変換が必要な場合だけ、自力で変換する方がよい。関連エントリーを参照。

カテゴリー:

このエラーは、制限値を超える割り当てを要求した場合に出される。
/etc/php.ini ので変更可能。

最大実行時間を60秒、メモリ制限を12MBに変更する例:

変更前
max_execution_time = 30 ; Maximum execution time of each script, in seconds
memory_limit = 8M ; Maximum amount of memory a script may consume (8MB)
変更後
max_execution_time = 60
memory_limit = 12M

カテゴリー:

symfonyのplugin-install local を実行すると、pearの環境がおかしくなる。(※)
PEARの環境がおかしくなって、uninstallできなくなったりした場合は、以下の方法で復旧する。

■手動で環境を再設定する
例: phpディレクトリが C:\php5 の場合

pear config-set bin_dir C:\php5
pear config-set doc_dir C:\php5\pear\docs
pear config-set php_dir C:\php5\pear
pear config-set data_dir C:\php5\pear\data
pear config-set test_dir C:\php5\pear\tests
■設定を確認
pear config-show

http://pear.php.net/bugs/bug.php?id=3614
http://www.symfony-project.com/forum/index.php/m/13711/

カテゴリー:

自分の SAPI は何か?: シェルで php -v をタイプすると、 php が CGI なのか CLI なのかわかります。

http://jp2.php.net/manual/ja/features.commandline.php

カテゴリー:

php.iniに以下を追加。
zend_extension_ts="d:/php5/ext/php_xdebug.dll"
http://xdebug.org/install.php

※symfonyのドキュメントでは
extension=php_xdebug.dll
とあるが、これだとsymfonyコマンドで以下のワーニングが出る。
PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0
※zend optimizorとの互換性に注意

http://www.symfony-project.com/book/trunk/debug

カテゴリー: