PHPの設定メモ

PHPの設定に関して対応に困った点やトラブルが発生した項目、PHP更新時の注意点等を備忘としてまとめています。

※目次をクリックすると目次の下部にコンテンツが表示されます。

php.iniの保存場所
php.iniファイルの保存場所は以下の方法で確認できます。
 
〇CentOS6.9、PHP 7.1.8(RPM版)での確認例

$ rpm -qc php | grep php.ini
$ rpm -qc php-common | grep php.ini
/etc/php.ini

phpパッケージ内にあるファイルかと思ったのですが、php-commonというパッケージ内にありました。

PHP実行中に”Maximum execution time of 30 seconds exceeded”
PHPのプログラム実行中に下記エラーが発生しました。
Fatal error: Maximum execution time of 30 seconds exceeded
 
PHPの処理時間が30秒を超えるとこのようなエラーが出るようです。
 
この30秒の設定は、php.iniで設定されています。
0を指定すると、タイムアウトせずにずっと待ち続けるようです。
 
(php.iniの設定変更)
変更前
max_execution_time = 30;
 
変更後
max_execution_time = 0;

PHP7.2への更新時に下位互換性のない変更点
PHP7.1以前のバージョンは、以下の記事参照
CentOS6でPHP5.3からPHP7.1へアップデート
 
※PHP7.2: 下位互換性のない変更点 – Manual
 
〇number_format() は負のゼロを返さない
・以前は”-0″を返せた。
例)
var_dump(number_format(-0.01)); // string(2) “-0” ではなく string(1) “0” となります
 
〇オブジェクトと配列の型変換における数値キーの扱い
・数値キーの配列をオブジェクトにキャストしたときに、その要素にアクセスできるようになった。
・オブジェクトに数値のキーが含まれる場合に、 配列にキャストしてもその要素にアクセスできるようになった。
 
〇get_class() に null を渡せない
・以前のバージョンでは、get_class() に null を渡すと、そのコンテキストの外側のクラスを返していた。
→この機能は削除され、null を渡すと E_WARNING が発生するようになった。
・以前と同様の挙動を実現したい場合は、null を渡すのではなく単にパラメータを省略するようにする。
 
〇countable ではない型をカウントしたときの警告
・countable ではない型に対して count() (およびそのエイリアスである sizeof()) を使ったときに E_WARNING が発生するようになった。
 
〇is_object() と __PHP_Incomplete_Class
・以前のバージョンでは、 __PHP_Incomplete_Class クラスに対して、 is_object() を使うと false が返されていた。
→これからは true が返される。
 
〇定義されていない定数のエラーレベル変更
・定義されていない定数への参照を行った場合、 E_WARNING を生成するようになった。 (今までは E_NOTICEを生成していました。)
 
〇array_unique() 関数を SORT_STRING と使う場合
・array_unique() 関数を SORT_STRING と使う場合、以前は配列をコピーし、重複した要素を削除 (配列を後にパックせずに) していた。
→このバージョンからは 新しい配列作られ、ユニークな要素を追加するようになった。
 
〇bcmod() の小数点に対する挙動変更
・bcmod() 関数が小数点切り捨てをしないようになた。
→これからは、挙動は % 演算子ではなく、 fmod()に準拠する。
例)
bcmod(‘4’, ‘3.5’) はいままでの1ではなく、 0.5 を返す。
 
〇ハッシュ関数と非暗号化ハッシュ
・hash_hmac()、 hash_hmac_file()、 hash_pbkdf2()、 および hash_init() ( HASH_HMAC) は非暗号化ハッシュを受け入れないように変更された。
 
〇json_decode() 関数のオプション
・json_decode() 関数のオプション、 JSON_OBJECT_AS_ARRAY は、2番めのパラメータ (assoc) が null の場合に使用されるようになった。
・JSON_OBJECT_AS_ARRAY はこれまで無視されていた。
 
〇date_parse() と date_parse_from_format() 関数への変更
・date_parse() 関数 と date_parse_from_format() 関数 が返す zone 要素は、 分ではなくて秒を表現するようになり、符号も逆になった。
例)
-120 分は 7200 秒を意味するようになった。

PHP7.3への更新時に下位互換性のない変更点
※PHP7.3: 下位互換性のない変更点 – Manual
 
〇ヒアドキュメント/Nowdoc の終了ラベルの解釈
・ヒアドキュメント/Nowdoc の文法が柔軟になった ことにより、本体の内部に終了ラベルが含まれた ドキュメンテーション文字列は、エラーが発生するか、解釈の振る舞いが変わる可能性がある。
 
〇switch の制御フローを変更する continue 文は警告が出る
・switch の制御フローを変更することを狙った continue 文は、警告が出るようになった。
・PHP では、このような continue 文は break と同等で、他のプログラミング言語では continue 2 と同じように振る舞うのとは対照的。
 
〇ArrayAccess を実装したオブジェクトに対する、 数値形式の文字列キーの解釈が厳密に
・$obj が ArrayAccess を実装したオブジェクトで、 “123” が数値の文字列リテラルだった場合、 この “123” は暗黙のうちに整数型に変換されなくなった。
 
〇static なプロパティが参照の代入によって分裂しなくなった
・PHP では、子クラスで明示的にオーバーライドされない限り、static なプロパティが継承関係にあるクラスの間で共有されるが、 実装上の副作用により、参照を代入することによって、static なプロパティが異なる値になる可能性があった。こうした抜け穴がこのバージョンでは修正された。
 
〇配列から返される参照とプロパティのアクセスは、即座に分割される
・配列から返された参照と、プロパティのアクセスは、 アクセスの一部として別に扱われるようになった。
→配列へのアクセスと、配列の値を使う間に、値を変更できなくなった。
 
〇TypeError
・integer と boolean ではなく、 それぞれ int と bool を誤った型として報告するようになる。
 
〇外部から入力されるCookie
・PHP 7.3.23 以降は、セキュリティ上の理由により、 外部から入力される Cookie の 名前 はurlデコードされなくなった。

PHP7.4への更新時に下位互換性のない変更点
※PHP7.4: 下位互換性のない変更点 – Manual
 
〇配列でない値を配列スタイルでアクセスした場合
・null, bool, int, float または resource 型を ($null[“key”] のように) 配列としてアクセスしようとすると、警告が生成されるようになった。
 
〇get_declared_classes() 関数
・まだインスタンス化されていない無名クラスを返さなくなった。
 
〇fread()、fwrite() 関数
・操作に失敗した場合に false を返すようになった。
・以前は空文字列か 0 を返していた。
・EAGAIN/EWOULDBLOCK は、失敗と見做されない。
・読み取り専用のリソースに書き込もうとして失敗したような場合に E_NOTICE を発生させるようになった。
 
〇Regular Expressions (Perl互換)
・PREG_UNMATCHED_AS_NULL モードが使われた場合、後に続くマッチしなかったキャプチャグループにも null (offset キャプチャが有効になっていた場合は [null, -1] になる) が設定されるようになった。
→$matches のサイズが常に同じになることを意味する。
 
〇外部から入力されるCookie
・PHP 7.4.11 以降は、セキュリティ上の理由により、 外部から入力される Cookie の 名前 はurlデコードされなくなった。

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください