php-master-changes 2019-03-19

今日は文字列が UTF-8 として有効かのフラグ IS_STR_VALID_UTF8 の追加、PCRE での幾つかの最適化と改善、テストの修正、json_encode() の局所最適化、com_dotnet で終了時にクラッシュする問題の修正、ドキュメントの更新、開発者向けツールの不要コード削除、empty() / isset() の一部ケースでの局所最適化、filter でビルド時の PCRE チェック削除、phpdbg のヘルプメッセージが誤っていた問題の修正、FTP ストリームラッパーでディレクトリに stat() する際のパーミッション修正、preg_replace_callback() と preg_replace_callback_array() でのフラグサポートの実装、FFI パーサの空白文字の扱い修正があった！

# 2019-03-19
## nikic: Fixed bug [#72685](https://bugs.php.net/bug.php?id=72685)
- https://github.com/php/php-src/commit/2b9acd37f0a13572684dde80e3e56d5c1b2ec045
- 文字列が UTF-8 として有効かのフラグ IS_STR_VALID_UTF8 の追加
- これまで [preg_match()](http://php.net/manual/ja/function.preg-match.php) で "u" フラグが使われる際、呼び出しごとに文字列全体について UTF-8 のバリデーションが行われていて、何度も呼び出すと非常に遅かった
- が、PCRE2 にはチェックをスキップするためのフラグ PCRE2_NO_UTF_CHECK がある
- PHP の文字列の値のフラグとして検証済かどうかの状態 IS_STR_VALID_UTF8 を持つことで、一度検証したら次は PCRE2_NO_UTF_CHECK でスキップするようになった
- 基本的には文字列がバイト列に過ぎない PHP で Unicode を特別扱いというの、わりとアドホックな局所最適化な感じもしつつ、言うてきょうび UTF-8 以外前提にしなくていいだろうし別にいいか、みたいな感じもしつつ

## nikic: Don't use random mode in mysqli_query test
- https://github.com/php/php-src/commit/967037bb8d52755b810b1c23403a93a6c3069251
- [7.4~]
- ext/mysqli で、テストでランダムなモードを使わないよう修正
- これされたら静かにキレていいと思う

## dstogov: Optimization for ASCII data
- https://github.com/php/php-src/commit/46d5551fc345140711bec41c04d93197152d21d0
- [7.4~]
- ext/json で、[json_encode()](http://php.net/manual/ja/function.json-encode.php) の処理の ASCII データ用の最適化
- このパスにくるまでの分岐が一段減るのかな

## cmb69: Fix [#77578](https://bugs.php.net/bug.php?id=77578): Crash when php unload
- https://github.com/php/php-src/commit/41bc51ce2d217aa7aca85b4be289bebf91813423
- [7.2~]
- ext/com_dotnet で、終了時にクラッシュする問題の修正

## cmb69: Fix order
- https://github.com/php/php-src/commit/5ead86a35e21eff9504d1a52f4b2641817d1a781
- [7.3~]
- NEWS で、拡張の並び順が辞書順でなかったのを修正

## petk: Leave bundled generated files untouched
- https://github.com/php/php-src/commit/abfab2148ddae50a1f26d313299d273a2f254c7a
- [7.4~]
- 開発者向けツール genfiles と makedist で、不要なファイル削除処理を削除

## dstogov: micro-optimization
- https://github.com/php/php-src/commit/9357953babf7863e27d6e42897f636f443819a8e
- [7.4~]
- empty() / isset() の一部ケースでの局所最適化

## KalleZ: Remove the PCRE checks from ext/filter. pecl/filter is obsolete and since PCRE is a hard dependency for PHP, it will always be available.
- https://github.com/php/php-src/commit/d63b442778d1069335892cc957d9bf79d214adf7
- ext/filter で、ビルド時の PCRE のチェックを削除
- 本体側でいつもあることになっているので

## KalleZ: This should be redundant too as we use a centralized PCRE install
- https://github.com/php/php-src/commit/bab621c7882ef78479ab78b61d1ed0e54e88ea16
- ext/filter で、どの PCRE を使うかは本体側に設定があるため、↑と同様削除

## : Fix [#77767](https://bugs.php.net/bug.php?id=77767): phpdbg break command help message shows incorrect aliases
- https://github.com/php/php-src/commit/09e522322af7268f53d340cbff3d109fab058539
- [7.2~]
- sapi/phpdbg で、break のヘルプメッセージが誤っていた問題の修正
- at、del のエイリアスがそれぞれ A と d になっていたが、@ と ~ が正しい

## vtemian: Fixed bug [#77765](https://bugs.php.net/bug.php?id=77765)
- https://github.com/php/php-src/commit/fe2885d80a76db84fd3a8e1556aff2221be195e1
- [7.2~]
- FTP ストリームラッパーでディレクトリに [stat()](http://php.net/manual/ja/function.stat.php) する際、パーミッションに実行許可属性を立てるよう修正
- CD できたらディレクトリだ！という扱いなので、ということらしい

## nikic: Fix [#77094](https://bugs.php.net/bug.php?id=77094): Add flags support for pcre_replace_callback(_array)
- https://github.com/php/php-src/commit/12bcdd68b421a9da50f7f56ea361003997819675
- [7.4~]
- ext/pcre で、[preg_replace_callback()](http://php.net/manual/ja/function.preg-replace-callback.php) と [preg_replace_callback_array()](http://php.net/manual/ja/function.preg-replace-callback-array.php) のフラグサポートを実装
- [PREG_OFFSET_CAPTURE と PREG_UNMATCHED_AS_NULL](http://php.net/manual/ja/pcre.constants.php) が使えるっぽい

## nikic: Avoid copying subpat twice if named subpats are used
- https://github.com/php/php-src/commit/f2438a57ff3b8667f538f8a29a0c492b192c0d2b
- [7.4~]
- ext/pcre で、↑の実装で重複処理を避けるよう修正

## dstogov: Improve white-space handling
- https://github.com/php/php-src/commit/defd421c0f605a29de2edf3b903a9bf2607b940d
- [7.4~]
- ext/ffi で、パーサの空白文字の扱いを修正

## nikic: Use zend_string for subpat_names table
- https://github.com/php/php-src/commit/525f19bef55387085e056891840dde344eb04338
- [7.4~]
- ext/pcre で、サブパターン用のテーブルに char* でなく zend_string を使うよう修正
- [preg_match_all()](http://php.net/manual/ja/function.preg-match-all.php)、[preg_replace_callback()](http://php.net/manual/ja/function.preg-replace-callback.php)、[preg_replace_callback_array()](http://php.net/manual/ja/function.preg-replace-callback-array.php) で使う際に何度も参照されるのでアロケーションが減らせる、ということらしい

## nikic: Revert unintended change
- https://github.com/php/php-src/commit/38b16274d16f3a90dd42e340b8429041c6aa7365
- [7.4~]
- ↑でちょっとミスった部分の修正

## nikic: Don't create a new array for empty/null match every time
- https://github.com/php/php-src/commit/4fe3d108af2b0a1e8810959fe1ea7a0b52291ad7
- [7.4~]
- ext/pcre で、empty/null マッチ用に毎回新たな配列を作らないよう修正
- またサブパターンが空文字列か一文字の場合は interned string でアロケーションを抑えるよう修正

## nikic: Fixed bug [#76127](https://bugs.php.net/bug.php?id=76127)
- https://github.com/php/php-src/commit/661bce47aebdc67bda1616e1b6979803765173a6
- [7.3~]
- ext/pcre で、[preg_split()](http://php.net/manual/ja/function.preg-split.php) が失敗時に "u" の UTF-8 文字列検証に失敗したら false を返すよう修正

## nikic: Respect OFFSET_CAPTURE when padding preg_match_all() results
- https://github.com/php/php-src/commit/f53e7394eb61085c09928b47f84123bd90b64dfb
- [7.4~]
- ext/pcre で、[preg_match_all()](http://php.net/manual/ja/function.preg-match-all.php) を PREG_SET_ORDER を使う際、結果に PREG_OFFSET_CAPTURE が反映されなかったのを修正
- [#73948](https://bugs.php.net/bug.php?id=73948)