zz log

zaininnari Blog

PHP5.3.25 / PHP5.4.15 変更点

PHP公式アナウンス

変更点

Core

  • Fixed bug set_error_handler内でdebug_backtraceを使用すると、Segmentation fault が発生するのを修正
<?php
set_error_handler(function() { debug_backtrace(); });

function x($s) { $s['a'] = 1; };
$y = '1';
x($y);
print_r($y);
// -> 1Segmentation fault (core dumped)
  • Fixed bug dns_get_record で返されるTXTの切り出す文字列の長さを修正
    • 現時点でチケットがプライベートにされているが、文字列の長さに関係なく、「文字列の長さ - 1」していたのを、文字列の長さが 0 場合は、0 となるよう修正されている
  • Fixed bug レスポンスコードが 300, 301, 302, 303, 307 以外の場合、follow_location のパラメータを無視するよう修正(PHP5.4.15のみ)
  • Fixed bug Solaris 上におけるファイルディスクリプタリークを修正

Fileinfo

  • Upgraded libmagic 5.14 にアップグレード(PHP5.4.15のみ)

Streams

  • Fixed Windows x64 環境の stream_socket_pair のエラー処理の改善

Zip

  • Fixed bug ZipArchive::addFile() ファイルの存在をチェックするよう修正
    • 存在しないファイルを追加した場合、ZipArchive::addFile()true を返し、ZipArchive::close()falseを返す挙動が、ZipArchive::addFile()false を返し、ZipArchive::close()trueを返すように修正された。
<?php
$zip = new ZipArchive;
$res = $zip->open(dirname(__FILE__) . '/bug64342.zip', ZipArchive::CREATE);
if ($res === TRUE) {
    $f = 'aaaaaaaaaaaaaa.txt';
    echo "$f\n";
    $res = $zip->addFile($f);
    if (true == $res) {
        echo "add ok\n";
    } else {
        echo "add failed\n";
    }
    $res = $zip->close();
    if (true == $res) {
        echo "close ok\n";
    } else {
        echo "close failed\n";
    }
} else {
    echo "open failed\n";
}

// -> Output for 5.2.7 - 5.4.14, 5.5.0alpha1 - 5.5.0alpha4, 5.5.0alpha5 - 5.5.0beta2 (PHP5.3.25は含まない)
// -> aaaaaaaaaaaaaa.txt
// -> add ok
// -> close failed

// -> Output for 5.2.0 - 5.2.6, 5.4.15, 5.5.0beta4
// -> aaaaaaaaaaaaaa.txt
// -> add failed
// -> close ok

様々なバージョンをオンラインで一度にチェックできる 3v4l.org が便利

3v4l.org - online PHP codepad for 80+ PHP versions

  • 同じ結果をまとめてくれる
  • ベンチマークの結果をグラフにしてくれる
  • 外部通信はできない
  • 最新の状態ではない場合がある(現時点では、5.4.15 はあるが、5.3.25 はない)

→例 ZipArchive::addFile()