検索
ホームページバックエンド開発PHP7Php 7.4 のアップグレードによって引き起こされる 2 つの大きな落とし穴

私のマシンは Archlinux のローリングアップデートを使用しているため、知らないうちに Php が 7.4 にバージョンアップされていましたが、このアップデートによって大きなトラブルが発生するとは予想していませんでした。まず、Php-fpm の新しいオプション ProtectHome により、古典的なファイルが見つからないエラーが発生し、次に Php インタープリタは、null 型の添え字アクセスに対して、null 型の値の配列オフセットにアクセスしようとしているというエラーを直接報告します。

最近、私は友人の Web サイト構築を手伝っていたので、テストのためにオンライン コードをローカルのミラーに戻しました。 Web アプリケーションには奇妙な依存関係があるため、ローカル環境を汚さないように、テストのために Docker にデプロイしました。 Docker の基本イメージは、先月末にリリースされた Php7.4 と組み合わせた急進的な Archlinux を選択します。そのため、私はデバッグピットで丸一日を過ごしました...

まず第一に、シャトルで環境をセットアップした後、それを実行し、Php で最も古典的で最も悲惨なエラーの 1 つを報告しました。 fpm: ファイルが見つかりません。 Php-fpm を設定したことのある人なら誰でも、このエラーは通常、ファイルのアクセス許可が間違っているか、ファイル パスが間違っていることが原因で発生し、これらのエラーはどちらも見つけるのが比較的難しいことを知っています。そこで改めて大きな目と小さな目で経路検査を体験しましたが、問題ありませんでした。ファイルのパーミッションチェック、うーん、問題ないでしょうか?戻って道を確認したら、まだ大丈夫でした! chmod 777 で問題が解決しないことにとてもイライラし、自分の人生に少し疑問を感じました...

Php-fpm のファイルが見つからないエラーをネットで検索したところ、結果はたくさんありましたが、理由はこの2つだけでした。そして、これら 2 つの理由が 1 つずつ解消され、事態は突然魔法のような角度から発展しました...

これが PHP のバージョンに関連しているのではないかと考えるまでにどれくらい時間がかかったのか分かりません (なぜなら、私のローカル コンピューターでは他の Php アプリケーションも実行していたので、最初は Php に問題があるとは思いませんでした)。そこで、新しいバージョンの Php7.4 と Php-fpm7.4 の変更点を検索したところ、原因はすぐに見つかりました。

Php7.4 Commit

(https:/ /github.com/php/php-src/commit/40c4d7f1820df1872a71ab07fd26da45a203e37f#diff-c0605c0e7e1db864472acf66a9812d33R22)

このコミットには、ProtectHome オプションが追加されました。名前が示すように、オンにすると、PHP はホーム ディレクトリ内のファイルを実行しなくなり、この新しいオプションのデフォルト値がたまたまオンになっています。 systemctl edit php-fpm.service を使用してオプション オーバーライドを追加します。サービスを再起動すると、最終的にすべてが正常になり、2 番目の大きなエラーが発生します:

Inlcude、require などは、インクルードするために Php でよく使用されます。他のファイル。デバッグの結果、特定のインクルードの後、PHP は実行を直接停止し、null 型の値の配列オフセットにアクセスしようとしているというエラーを報告したことがわかりました。しかし、オンラインコードは問題なく動作するのですが、これが非常に不思議で、インクルードファイルをたどってみると、配列要素にアクセスしている箇所があるのに、配列自体はnullになっていることが分かりました。この構文は通常、Php のような弱い型指定言語でサポートされており、全体として null を返しますが、新しいバージョンの Php7.4 では、この構文はエラーとして報告されます。 Phpも言語の特徴を少しずつ標準化しているようですが、仕方がありません、自分でコードを変えるしかありません。 (私は現在、古いバージョンの Php を使用することを選択していますが)

Php7.4 がリリースされてからそれほど時間が経っていないため、広く更新および使用されていないと推定され、さまざまなアプリケーションの開発者が利用していない可能性があります。 Php7.4 と互換性のある変更をテストしました。インターネットでこの情報を検索しても、貴重な提案を見つけることができなかったのはまさにこの理由です。この記事は、この新機能にだまされた午後全体を記録することに加えて、他の人に解決策のアイデアも提供します。同様の問題。バー。

以上がPhp 7.4 のアップグレードによって引き起こされる 2 つの大きな落とし穴の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はsbw.soで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター