PHP

PHPの数字文字列の比較は16進数でも有効

PHP

PHPの数字だけで構成された文字列の比較が暗黙のうちに整数の比較になる話は有名ですが、16進数の文字列でもそうなります。

PHP 5.3.15 の CVE-2012-2688 と bug #62432

PHP

PHP の 5.4.5 と 5.3.15 がリリースされましたが、幾つか気になる変更点について内容を確認してみました。 Fixed potential overflow in _php_stream_scandir, CVE-2012-2688 修正差分は次の通りです。PHP Git Repositories - php-src.git/blobdiff - main/s…

PHP からバックグラウンド起動させたプロセスを Apache の停止や再起動後も続行させる ← 失敗

PHP

mod_php(Apache/PHP)で、ページの表示時にバックグラウンドで別プロセスを起動して並列に処理したい場合、次のように書くことが出来ます。 /dev/null 2>&1 &'); ただし、この方法だと Apache の子プロセスの停止や再起動時に、起動したプロセス(上の例な…

PHP を Windows でビルド

PHP

前々回 に拡張モジュールを Windows でビルドするついでに PHP 本体を拡張機能を全て無効にしてビルドしましたが、今度は拡張機能を出来るだけ有効にして PHP をビルドします。 なお、前々回とディレクトリ構成を変えていますが深い意味はありません*1。 依…

PHP の set_error_handler で設定した関数が例外を投げた場合の動作(with 拡張モジュール)

PHP

ErrorException という例外クラスがあり set_error_handler で PHP エラーを例外にして送出する方法がよく紹介されていますが、拡張モジュールの1回の関数呼び出しで複数回の PHP エラーが発生した場合にどのような動作になるのか気になったので調べてみま…

PHP拡張モジュールを Windows でビルド

PHP

参考URL https://wiki.php.net/internals/windows/stepbystepbuild 必要なもの とりあえず下記のものを準備します。 Microsoft Visual C++ 2010 Express*1 PHP ソースファイル ... PHP: Downloads php-sdk ... windows.php.net - /downloads/php-sdk/ php-sd…

Windows版の pdo-mysql で MYSQL_ATTR_READ_DEFAULT_FILE が未定義だった

PHP

PHP の PDO でキャラクタセットを指定するときは次の様に行なっています。 $pdo = new PDO("mysql:host=127.0.0.1;dbname=test", $username, $password, array( PDO::MYSQL_ATTR_READ_DEFAULT_FILE => '/etc/my.cnf', PDO::MYSQL_ATTR_READ_DEFAULT_GROUP =>…

PHP 5.3.14 の CVE-2012-2143

PHP

php-5.3.14 の「Fixed CVE-2012-2143」ですが、以下のように文字列中に 0x80 が含まれているとその後の文字が無視されてしまうようです(その他にも問題があるかもしれませんが)。 $ php -r 'echo crypt("r", "rl") . "\n";' rlQzQWiSUOMKQ $ php -r 'echo …

Eclipse PDT でのリモートデバッグの整理

PHP

xdebug.remote_mode や xdebug.remote_autostart の設定がよくわからなかったので整理しました。 xdebug.remote_mode req リクエスト開始時にデバッグセッションが開始されます jit 最初にエラーが発生したときにデバッグセッションが開始されます jit の場…

array_map と等価な array_walk なら array_walk の方が早いっぽい

$rows が 7 件の場合・・・ // 1秒で約290000回程度実行 array_walk($rows, function(&$row){ $row['xxx'] = 123; }); // 1秒で約180000回程度実行 $rows = array_map(function($row){ $row['xxx'] = 123; return $row; }, $rows);

PHP で forkするときの注意点

PHP

以下のコードは子プロセスの終了時に親プロセスのMySQL接続が閉じられてしまうため意図した通りに動作しません。 子プロセスで明示的に mysql_close を行わなくても php プロセスの終了時の後処理で暗黙的に mysql_close されてしまうためです。SIGTERM など…