PHPのお勉強!

PHP TOP

その他の変更

パフォーマンスの向上

PHP コア

array_key_exists() 関数で使うための特別な VM opcode が追加されました。これにより、これが静的に解決される場合のパフォーマンスが向上します。名前空間内にあるコードは、 \array_key_exists() を書くか、明示的に関数を import する必要があるかもしれません。

正規表現 (Perl互換)

UTF-8モード("u" 修飾子) が同じ文字列に対して繰り返し呼ばれた(但し異なるオフセットで呼ばれる)場合、UTF-8 として正しいかどうかの確認は一度だけ行われるようになります。

INIファイルのハンドリングに対する変更

zend.exception_ignore_args は、 例外から生成されたスタックトレースに引数を含めたり、除外したりするための新しい INIディレクティブです。

opcache.preload_user は、指定されなければ root として実行されてしまう場合(これはセキュリティ上の理由で禁止されています) に、事前ロードされたコードを実行するユーザーアカウントを指定するための新しいINIディレクティブです。

pkg-config への移行

たくさんの拡張モジュールが、ライブラリへの依存性を検知するために、明示的に pkg-config に移行しました。一般的には、このことは 以前 --with-foo-dir=DIR に似た指定をしていたのが、--with-foo が使うだけで済むようになるということです。 カスタムライブラリのパスは PKG_CONFIG_PATH にディレクトリを追加するか、明示的に FOO_CFLAGSFOO_LIBS でコンパイルオプションを指定することができます。

以下の拡張モジュールや SAPI が影響を受けます:

  • CURL:
    • --with-curl は、ディレクトリを受け入れません。
  • Enchant:
    • --with-enchant は、ディレクトリを受け入れません。
  • FPM:
    • --with-fpm-systemd オプションは、pkg-config が libsystem をチェックする用途だけに使われるようになりました。libsystemd の最小バージョンは 209 です。
  • GD:
    • --with-gd オプションは --enable-gd (拡張モジュール全部を有効にする場合) と --with-external-gd (バンドルされたものではなく、外部のlibgdを使う場合) になりました。
    • --with-png-dir は削除されました。libpng はビルドに必須です。
    • --with-zlib-dir は削除されました。zlib はビルドに必須です。
    • --with-freetype-dir は、--with-freetype になりました。
    • --with-jpeg-dir は、--with-jpeg になりました。
    • --with-webp-dir は、--with-webp になりました。
    • --with-xpm-dir は、 --with-xpm になりました。
  • IMAP:
    • --with-kerberos-systemd は、ディレクトリを受け入れません。
  • Intl:
    • --with-icu-dir は削除されました。 --enable-intl が渡された場合、libicu が常に必須になります。
  • LDAP:
    • --with-ldap-sasl は、ディレクトリを受け入れません。
  • Libxml:
    • --with-libxml-dir は削除されました。
    • --enable-libxml は、 --with-libxml になりました。
    • --with-libexpat-dir--with-expat にリネームされ、ディレクトリを受け入れなくなりました。
  • Litespeed:
    • --with-litespeed は、 --enable-litespeed になりました。
  • Mbstring:
    • --with-onig オプションは削除されました。 --disable-mbregex が指定されない限り、libonig が必須です。
  • ODBC:
    • --with-iodbc は、ディレクトリを受け入れません。
    • ディレクトリを指定せずに --with-unixODBC を使うと、pkg-config を利用するようになります(望ましい)。libodbc.pc がない古いバージョンのために、ディレクトリもまだ受け入れ可能です。
  • OpenSSL:
    • --with-openssl は、ディレクトリを受け入れません。
  • PCRE:
    • --with-pcre-regex オプションは削除されました。 代わりに、バンドルされたものではなく、外部のPCREライブラリを使うために --with-external-pcre が提供されます。
  • PDO_SQLite:
    • --with-pdo-sqlite は、ディレクトリを受け入れません。
  • Readline:
    • --with-libedit は、ディレクトリを受け入れません。
  • Sodium:
    • --with-sodium は、ディレクトリを受け入れません。
  • SQLite3:
    • --with-sqlite3 は、ディレクトリを受け入れません。
  • XSL:
    • --with-xsl は、ディレクトリを受け入れません。
  • Zip:
    • --with-libzip は削除されました。
    • --enable-zip は、 --with-zip になりました。

CSV のエスケープ

fputcsv(), fgetcsv(), SplFileObject::fputcsv(), SplFileObject::fgetcsv() および SplFileObject::setCsvControl() は、 $escape パラメータに空文字列を受け入れるようになりました。 空文字列を指定すると、(RFC 4180 に準拠していない) 独自仕様の PHP のエスケープ機構が無効になります。

str_getcsv() 関数の振る舞いが適切に調整されました(正確には、空文字列がデフォルトを使うことに等しくなります)

SplFileObject::getCsvControl() は、3番目の配列要素で空文字列を返すように適切に調整されました。

データのフィルタリング

filter 拡張モジュールは、 Unix でビルドする際に --with-pcre-dir が不要になり、 ./configure コマンドで共有ライブラリとして確実にビルドされるようになりました。

GD

libgd にバンドルされた imagecropauto() 関数の振る舞いが、システムの libgd と同じになりました。

  • IMG_CROP_DEFAULT は、 IMG_CROP_SIDES にフォールバックしなくなりました。
  • Threshold-cropping は、システムの libgd のアルゴリズムを使うようになりました。

imagecropauto() 関数の $mode 引数のデフォルト値が IMG_CROP_DEFAULT に変更されました。つまり、 -1 を渡すことは推奨されなくなりました。

imagescale() 関数が、$new_width-1 を渡すことによって、 固定の高さのアスペクト比をサポートするようになりました。

HASH メッセージダイジェストフレームワーク

hash 拡張モジュールを無効にすることはできなくなり、PHP ビルドに必須の部分として扱われます。 date 拡張モジュールも同様です。

国際化関数

intl 拡張モジュールは、ICU 50.1 以降が必須になりました。

ResourceBundle は、Countable を新たに実装しました。

LDAP