数値形式ではない文字列を使って、数値を期待する演算 (+
-
*
/
**
%
<<
>>
|
&
^
や、これらを用いた代入演算) を行おうとしたときに、 E_WARNING
あるいは E_NOTICE
レベルのエラーが発生するようになりました。 E_NOTICE
が発生するのは、文字列が数値で始まっていながら非数値で終わる場合で、 E_WARNING
が発生するのは文字列中に数値が含まれない場合です。
<?php
'1b' + 'something';
上の例の出力は以下となります。
Notice: A non well formed numeric value encountered in %s on line %d Warning: A non-numeric value encountered in %s on line %d
これまでのバージョンでは、八進表記のエスケープシーケンスがオーバーフローを起こしても、 警告は発生しませんでした。 PHP 7.1 以降では、この場合に E_WARNING
が発生するようになりました (オーバーフローを起こした場合の振る舞いは、これまでのバージョンと変わりません)。
<?php
var_dump("\500");
上の例の出力は以下となります。
Warning: Octal escape sequence overflow \500 is greater than \377 in %s on line %d string(1) "@"
$this
の矛盾の修正 PHP において $this
は特別な変数という扱いですが、 これが他の場所で変数名として使われていたり再代入されていたりしないことを、 きちんとチェックできていませんでした。 これを修正してきちんとチェックするようになったので、 $this をユーザー定義の変数名として使ったり他の値を再代入したり、 グローバル変数にしたりすることはできなくなりました。
セッション ID の生成時にハッシュされないようになりました。 この変更に伴い、以下の INI 項目が削除されました。
session.entropy_file
session.entropy_length
session.hash_function
session.hash_bits_per_character
また、以下のふたつの INI 項目が新たに追加されました。
session.sid_length
- セッション ID の長さを指定します。デフォルトは 32 文字で、 これは過去のバージョンとの互換性を考慮したものです。 session.sid_bits_per_character
- 一文字あたりに格納するビット数を指定します (つまり、これを増やすとセッション ID に使える文字の範囲が拡大します)。 デフォルトは 4 で、これは過去のバージョンとの互換性を考慮したものです。 precision
この値を -1 に設定すると、dtoa モードの 0 が使われます。 デフォルト値は 14 のままです。
serialize_precision
この値を -1 に設定すると、dtoa モードの 0 が使われます。 デフォルト値は -1 になりました。
gd.jpeg_ignore_warning
この php.ini 設定のデフォルト値は 1 になりました。 よって、デフォルトでは libjpeg の警告は無視されます。
opcache.enable_cli
この php.ini 設定のデフォルト値は、PHP 7.1.2 で 1 (有効) に変更され、 PHP 7.1.7 で 0 (無効) に戻されました。
セッションID は、CSPRNG のみから生成されるようになりました。