この記事では、php.ini ファイルの「disable_functions」ディレクティブを編集して、php ネイティブ関数を有効または無効にする手順を段階的に説明します。
場合によっては、システムと運用環境の互換性を考慮して、サーバー上のデフォルトの PHP 構成をカスタマイズする必要があります。
私は、Laravel と Symfony のリアルタイム監視パッケージである Inspector.dev の作者です。このパッケージは、pro_open および proc_close php ネイティブ関数を使用して、サーバーから Inspector API へのデータ転送を非同期的に実行します。
デフォルトで有効になっている PHP のネイティブ CURL 関数を使用するように構成することもできますが、この場合、Sentry、Bugsnag などの他のパッケージと同様に、監視データが同期方法で Inspector に送信されます。これは、クライアントとの接続を終了する前に PHP エンジンが待機する必要があるため、アプリケーションの速度が少し遅くなる可能性があることを意味します。
最近、一部の開発者から、php 設定で proc_open 関数と proc_close 関数が無効になっているため、非同期データ送信を利用するにはロックを解除する必要があるという理由で私に連絡がありました。
非常に珍しいことですが、このユースケースのサポート リソースとしてこのチュートリアルを作成することにしました。
php.ini ファイルは PHP の構成ファイルです。ファイルには、「ディレクティブ」と呼ばれるキーと値のペアのリストが含まれています。ディレクティブはセクションにグループ化されていますが、これらは主に組織化を目的としています。
PHP は起動時にこのファイルを読み取り、内部データ構造をセットアップして構成を保存します。実行中、PHP はこれらの内部データ構造を参照して、エラー処理とログ、リソース制限 (メモリ、実行時間)、ファイル アップロード、データベース接続など、多くの重要な領域でどのように動作するかを決定します。
また疑問に思っている人のために: php.ini ファイルがなくても、PHP は動作します。デフォルト値がすべてのディレクティブに適用されるだけです。
詳しくない人のために、php.ini ファイルの例を次に示します。
https://github.com/php/php-src/blob/master/php.ini-production
php.ini ファイルを編集すると、PHP コード内で呼び出すことができないネイティブ PHP 関数を無効にすることができます。
この機能は、共有ホスティング環境で一部の機能の使用を制限するために使用されることがあります。これは、機能を誤って使用すると他のユーザーにセキュリティ上の問題を引き起こす可能性があるためです。 exec() などの関数は通常無効になっていますが、サーバー プロバイダーが保守的すぎる場合があり、日常のプログラミング タスクで必要な関数を無効にすることがあります。
マシンのターミナルで以下のコマンドを実行して、ファイルの現在の場所を取得します (Win と Unix の両方で機能します):
php --ini
一般的な場所: /etc/php.ini、/etc/php/8.x/php.ini (x をインストールのバージョン番号に置き換えます)
サーバー上のファイルを編集するには、どの Unix マシンでも利用できる vim エディタを使用することを好みます。
// Use the file path from the command above sudo vim /etc/php.ini
「disable_functions」ディレクティブまで下にスクロールします。これはファイルの前半にあり、カンマで区切られた関数のリストが含まれています。
disable_functions=exec,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
新しい設定をロードするには、PHP を再起動する必要があります。以下の手順はほとんどのサーバーで機能するはずです。最終的には、Google で特定の OS を検索できるようになります。
// Change the version of the PHP with what is in use in your machine sudo systemctl restart php8.2-fpm.service
さらに技術的な記事については、Linkedin または X でフォローしてください。
Inspector は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。サーバーレベルで何もインストールする必要はありません。Laravel または Symfony パッケージをインストールするだけで準備完了です。
HTTP モニタリング、データベース クエリの洞察、アラートや通知を好みのメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。
または、Web サイトで詳細をご覧ください: https://inspector.dev
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3