【解決】 PHP: Deprecated function の解決方法と原因 | PHP トラブルシューティング

PHP: Deprecated function とは?(概要と緊急度)

PHP: Deprecated function は、PHPのコード内で使用されている関数が、将来のバージョンで削除される予定であることを示す「警告」メッセージです。
「エラー」と聞くとシステムが停止してしまうような印象を受けるかもしれませんが、ご安心ください。これはあくまで「警告」であり、今すぐシステムが停止するような緊急性はありません。しかし、放置すると将来のPHPバージョンアップ時にシステムが正常に動作しなくなる可能性があるため、早めの対処が推奨されます。

【最速】今すぐ試すべき解決策

結論から申し上げます。この警告の最も確実で恒久的な解決策は、警告メッセージに示されている「非推奨関数」を、PHPが推奨する「代替関数」にコードを書き換えることです。まずは問題の箇所を特定しましょう。

解決策1:エラーメッセージから非推奨関数を特定し、コードを修正する

PHPのDeprecated function警告は、通常、どのファイル、どの行で、どの関数が非推奨であるかを具体的に教えてくれます。この情報をもとに、コードを修正します。

ステップ1: エラーメッセージの確認と発生源の特定

まず、WebサーバーのエラーログやPHPのログファイルを確認し、具体的な警告メッセージを特定します。メッセージには通常、ファイル名、行番号、非推奨関数名が含まれています。

PHPのエラーログファイルの場所を確認する

php.iniファイルの場所を特定し、error_logディレクティブで指定されているログファイルのパスを確認します。以下のコマンドを実行してください。

php --ini

このコマンドの出力でLoaded Configuration File:に示されるパスがphp.iniの場所です。php.iniを開き、error_log = "C:\path\to\your_php_error.log"のような行を探してください。(パスはご自身の環境に合わせて読み替えてください)

エラーログファイルの内容を表示する(PowerShell)

error_logで指定されたログファイルをPowerShellで表示します。以下のコマンドは、ログファイルの最新の50行を表示します。パスはご自身の環境に合わせて変更してください。

Get-Content -Path "C:\path\to\your_php_error.log" -Tail 50
エラーログファイルの内容を表示する(Cmd)

Cmdの場合、tailコマンドが標準で搭載されていないため、findstrやテキストエディタで直接開くのが一般的です。以下のコマンドでファイルの内容を表示できます。

type "C:\path\to\your_php_error.log" | more

警告メッセージは通常、PHP Deprecated: Function [関数名] is deprecated in [ファイル名] on line [行番号]のような形式です。

ステップ2: 非推奨関数を代替関数に書き換える

特定した非推奨関数をPHPの公式ドキュメント(php.net)で検索し、推奨される代替関数を見つけてください。その後、該当するPHPコードを修正します。

例えば、もしereg()関数が非推奨と表示された場合、これは正規表現関数であり、preg_match()などのpreg系関数に置き換える必要があります。

【コード修正のヒント】
コードベースが大きい場合、特定の関数がどこで使われているかを検索するのにWindowsのコマンドが役立ちます。

PHPファイル内で特定の関数名を検索する(PowerShell)

カレントディレクトリ以下にあるすべてのPHPファイルから「非推奨関数名」を検索します。非推奨関数名は実際の関数名に置き換えてください。

Get-ChildItem -Path . -Filter "*.php" -Recurse | Select-String -Pattern "非推奨関数名"
PHPファイル内で特定の関数名を検索する(Cmd)

同様に、Cmdではfindstrを使用します。

findstr /s /i "非推奨関数名" *.php

これらのコマンドで出力されたファイルと行番号を参考に、コードを直接修正してください。

解決策2:【一時的な応急処置】エラー表示を抑制する(非推奨)

コードの修正に時間がかかる場合や、開発環境でのみ一時的に警告を非表示にしたい場合は、PHPのエラーレポート設定を変更することでDeprecated警告の表示を抑制できます。ただし、これは根本的な解決策ではなく、将来的な問題を見過ごすことになるため、本番環境での長期的な使用は推奨されません。

方法1: php.iniを編集する

前述のphp --iniコマンドで確認したphp.iniファイルをテキストエディタで開き、以下の行を変更します。

; error_reporting の設定を現在の値(例: E_ALL)から変更
; Deprecated 警告を非表示にするには、~E_DEPRECATED を追加します。
error_reporting = E_ALL & ~E_DEPRECATED

変更後、Webサーバー(Apache, Nginxなど)を再起動して設定を適用してください。

方法2: スクリプト実行時に一時的に設定を変更する(開発時向け)

コマンドラインから特定のPHPスクリプトを実行する場合、-dオプションを使って一時的に設定を変更できます。

php -d error_reporting="E_ALL & ~E_DEPRECATED" your_script.php

これは個別のスクリプト実行時のみ有効で、Webサーバー経由のPHP実行には影響しません。

PHP: Deprecated function が発生する主要な原因

  • PHPバージョンのアップデート: 古いPHPバージョンで書かれたコードを、より新しいPHPバージョン(例: PHP 7.x → PHP 8.x)で実行した際に、その古いバージョンで非推奨となった関数が使われている場合に発生します。PHPはバージョンアップの際に古い機能を段階的に廃止し、より良い代替機能を提供することがあります。
  • 古いライブラリやフレームワークの使用: プロジェクトで利用しているサードパーティ製のライブラリやフレームワークが、現在のPHPバージョンに対応しておらず、内部で非推奨関数を使用している場合があります。
  • 開発者の知識不足: 開発者がPHPの最新の推奨事項や非推奨情報を把握していないまま、古い書き方や関数を使用してしまった場合に発生します。

PHPで恒久的に再発を防ぐには

将来的に同様の警告が発生しないようにするためには、以下の対策が有効です。

  • 定期的なコードレビューとPHPバージョンの追従: 使用しているPHPバージョンと、コード内の関数が互換性があるかを定期的に確認し、必要に応じて代替関数への書き換えを計画的に行いましょう。
  • ライブラリ・フレームワークの最新化: 使用しているサードパーティ製のライブラリやフレームワークは常に最新の状態に保ち、PHPの新しいバージョンへの対応状況を確認してください。
  • 静的解析ツール(Linter)の導入: PHPStan, Psalm, PHP_CodeSnifferなどの静的解析ツールを開発フローに組み込むことで、非推奨関数の使用や潜在的な問題をコード実行前に自動的に検出できます。
  • 開発環境と本番環境のPHPバージョン統一: 開発環境と本番環境で異なるPHPバージョンを使用していると、開発段階では発見できなかった警告が本番環境で発生する可能性があります。可能な限りバージョンを統一しましょう。
  • PHP公式ドキュメントの確認: PHPのバージョンアップ情報や非推奨機能に関するアナウンスを定期的に確認し、新しいPHPバージョンへの移行計画を立てる際に参考にしましょう。

これらの対策を通じて、より安定した、将来にわたって保守しやすいPHPアプリケーションの開発を目指しましょう。