みなさんこんにちは。
PHPの脆弱性問題が世界的に騒がれていますよね。
私たちのサーバーも影響を受ける対象でしたが、PHP 8.x系およびPHP 7.x系における「php2shell」の対策(パッチ適用)はすでに完了しています。
しかし、ここで問題となるのが、すでにサポートが終了しているPHP 7以前の古いバージョンです。
これらのバージョンでは、今後新たな脆弱性が発見されても公式な修正パッチは提供されません。
そのため、どれほど慎重に書かれたプログラムであっても、実行環境自体に大きなセキュリティリスクが伴います。
一方で、逆のジレンマも存在します。
どれほど優れたプログラムであっても、PHPのバージョンを新しくすると、非推奨となった構文や仕様変更の影響で一部のソースコードがそのままでは動作しなくなることがあります。
その結果、バージョンアップを行ったことで予期せぬエラーが発生したり、システムが停止してしまったりするケースがあるのです。
例えば、Wordpressを例にみてみよう。
この写真は 致命的なエラーが出た際に画面に表示されたもの。
PHOTO 01クリック・タップで拡大
こうなってしまうと、WordPressサイト自体がエラーを引き起こし、ホームページが一切閲覧できなくなってしまう事態に陥ります。
その理由は様々です。
・開発を依頼した制作会社と連絡がつかない
・サポート終了後の改修費用が予算に見合わない
・プラグインのアップデートがすでに停止している
・使っているWordPressテーマが新しいPHPに対応していない などなど……
これらの理由から、古いバージョンのまま使い続けざるを得ないという深刻な問題が発生してしまうわけです。
しかし、もしこうしたバージョン依存のトラブルが簡単に解消できたらどうでしょう?
私たちは、動かなくなった古いソースコードを直接解析し、問題となる構文を見つけ出し、新しいPHPバージョンに対応した正しい構文へと書き換えるサポートを行っています。
例えば、今回のケースを挙げてみましょう。
「PHP 7.4系では問題なく動いていたWordPressのテーマを、PHP 8.5系に切り替えたとたんエラーが発生した。調べてみると、特定のプラグイン(あるいはテーマ)が原因だった」
ソースコードを調べていくと、次のような記述が見つかりました。
PHP
add_filter(‘filter_name’, create_function(‘$a’, “return ‘************’;”));
実はこの create_function という関数は、PHP 7.2で非推奨となり、PHP 8.0の時点で完全に削除された古い構文です。これが原因でエラーが起きていたのです。
原因が分かれば、これを現代のPHPに合わせた正しい書き方に修正します。
PHP
add_filter(‘filter_name’, function ($a) {
return ‘************’;
});
このように現代的な無名関数(クロージャ)へと書き換えてファイルを保存し、サーバーへアップロードすれば完了です。
ほら、諦めかけていたホームページが、最新のPHP 8.5環境でも再び正常に動き出すようになりました!
これで完璧とは言えませんが、またひとつ問題が解決できた事になります。
このようにデザインを変えることなく問題の部分のみを修正する事ができました。
もしこのような問題がある場合には、遠慮なくお問い合わせくださいね。

