ホームページ >バックエンド開発 >PHPの問題 >phpのiniファイル関連の操作機能を詳しく紹介します。

phpのiniファイル関連の操作機能を詳しく紹介します。

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-07-02 15:24:081658ブラウズ

中小企業、特に起業家精神のある企業では、サーバー全体の構築は通常、PHP 開発エンジニアの責任の 1 つです。その中で最も重要なのは、サーバーの php.ini ファイルを構成することです。一部のパラメータはサーバーのパフォーマンスに大きな影響を及ぼし、一部のパラメータは PHP の実行中に動的に指定および取得できます。今日は、php.ini ファイルに関連するいくつかの操作関数を学習します。

phpのiniファイル関連の操作機能を詳しく紹介します。

ini ファイルの構成パラメータを動的に設定する

この関数は誰にとっても馴染みがあると思います。基本的に、PHP 開発を行ったことがある人なら誰でも知っているはずです。それを使った。ただし、一部のパラメーターは変更できません。

ini_set('allow_url_fopen', 0);
echo ini_get('allow_url_fopen'), PHP_EOL; // 1 ,无法修改,PHP_INI_SYSTEM

ini_set('memory_limit', -1);
echo ini_get('memory_limit'), PHP_EOL; // -1,可以修改,PHP_INI_ALL

コメントに注意してください。最初のコメントには PHP_INI_SYSTEM と書かれており、このパラメータは変更できません。はい、あなたは賢いので、これらのパラメータには対応する型があることが理解できたと思います。 PHP_INI_SYSTEM は、php.ini または httpd.conf でのみ変更でき、言語が動的に実行されている場合は変更できないことを意味します。

php.ini 設定パラメータには 4 つのタイプがあります:

  • PHP_INI_USER: ユーザー スクリプト (ini_set() など) または Windows レジストリ ( PHP 5.3 以降) を使用し、.user.ini で

  • PHP_INI_PERDIR を設定します。

  • # は、php.ini、.htaccess、または httpd で設定できます。 conf ##PHP_INI_SYSTEM: php.ini または httpd.conf で設定できます

  • PHP_INI_ALL: どこでも設定できます

つまり、次のようになります。 ini_set() を使用すると、PHP_INI_USER および PHP_INI_ALL タイプのパラメータを設定できますが、他の 2 つは php.ini またはその他の設定ファイルでのみ設定および変更できます。構成パラメータに対応する特定の型については、関連する PHP ドキュメントを参照してください。

https://www.php.net/manual/zh/ini.list.php

ini ファイル内の構成情報を取得します

もちろん、php を読んでください。 . ini ファイル内の構成情報には制限はありません。直接読み取ることができ、get_cfg_var() と ini_get() という 2 つの関数を使用して読み取ることができます。さらに、構成情報を配列コレクションの形式で取得できる関数 ini_get_all() があります。一つずつ見ていきましょう。

get_cfg_var() と ini_get()

どちらも 1 つの構成パラメータ情報を読み取ります。

echo get_cfg_var('error_reporting'), PHP_EOL; // 32759
echo ini_get('error_reporting'), PHP_EOL; // 32759

echo get_cfg_var('request_order'), PHP_EOL; // GP
echo ini_get('request_order'), PHP_EOL; // GP

// php.ini A=TEST_A
echo get_cfg_var('A'), PHP_EOL; // TEST_A
echo ini_get('A'), PHP_EOL; //

上の 2 つの項目については説明の必要はありませんが、注目していただきたいのは最後の項目です。 php.ini ファイルでカスタム構成パラメータ A を定義します。 get_cfg_var() は通常この情報を取得できますが、ini_get() は取得できないことがわかります。別の例を見てみましょう。

ini_set('error_reporting', E_WARNING);
echo get_cfg_var('error_reporting'), PHP_EOL; // 32759,只返回.ini的内容
echo ini_get('error_reporting'), PHP_EOL; // 2,返回当前配置运行时的状态

ini_set() を使用して error_reporting パラメータを動的に設定した後、get_cfg_var() は ini_set() によって設定された値を返しますが、ini_get() は引き続き php.ini ファイルに設定された値を取得します。

上記の 2 つの例から、これら 2 つの関数の違いがわかります。

  • get_cfg_var() では、カスタマイズされた構成パラメータ値を取得できますが、それは php でのみ可能です。 ini ファイルが優先されます。動的に変更されたパラメータ値は取得できません。

  • ini_get() は、カスタマイズされた構成パラメータ値を取得できません。現在の動的スクリプト ランタイム構成が優先されます。つまり、 、ini_set() の変更されたパラメータ値を取得できます

ini_get_all()

インストールしたいくつかの拡張機能、構成情報などのデータのセットを取得しますxDebug や mysqlnd など。

print_r(ini_get_all('swoole'));
echo PHP_EOL;
// Array
// (
//     [swoole.display_errors] => Array
//         (
//             [global_value] => On
//             [local_value] => On
//             [access] => 7
//         )

//     [swoole.enable_coroutine] => Array
//         (
//             [global_value] => On
//             [local_value] => On
//             [access] => 7
//         )

//     [swoole.enable_library] => Array
//         (
//             [global_value] => On
//             [local_value] => On
//             [access] => 7
//         )

//     [swoole.enable_preemptive_scheduler] => Array
//         (
//             [global_value] => Off
//             [local_value] => Off
//             [access] => 7
//         )

//     [swoole.unixsock_buffer_size] => Array
//         (
//             [global_value] => 262144
//             [local_value] => 262144
//             [access] => 7
//         )

//     [swoole.use_shortname] => Array
//         (
//             [global_value] => 
//             [local_value] => 
//             [access] => 4
//         )

// )

Swoole 用に作成したすべての構成情報が配列の形式で返されることがわかります。

設定情報の復元

ini_set() を使用してパラメータ情報を動的に設定した後、php.ini ファイル内のデフォルト設定に復元したい場合は、ini_restore を直接使用できます。 () 関数。それだけです。

ini_restore('error_reporting');
echo ini_get('error_reporting'), PHP_EOL; // 32759

まだ上記のコードを使用していますが、error_reporting は 2 に変更されています。この時点では、ini_restore() を直接使用して復元し、その後、ini_get() を使用して error_reporting パラメータが復元されていることを確認します。 to php .ini ファイルで定義された元の値。

現在ロードされている設定ファイルのパスを取得する

サーバーを引き継ぐとき、多くの場合、最初のステップは、mysql の my.ini や nginx の conf 関連の設定など、関連するアプリケーション設定ファイルを見つけることです。ファイル パス。PHP では、最初のステップは php.ini ファイルの場所を見つけることです。

echo php_ini_loaded_file(), PHP_EOL;
// /usr/local/etc/php/7.3/php.ini

echo php_ini_scanned_files(), PHP_EOL;

php_ini_loaded_file() を直接使用して、現在実行中のスクリプト環境にロードされている php.ini ファイルのパスを簡単に取得します。 php_ini_scanned_files() 関数は、php.ini ファイルをスキャンできるすべてのパスをカンマ区切り形式で返します。

実際、これら 2 つのパラメータは phpinfo() に反映されますが、多くの場合、運用環境では phpinfo() を直接使用できません。これら 2 つの関数または phpinfo() と比較して、より良い解決策は、コマンド ラインで php.ini ファイルの場所を直接見つけることです。

php --ini
# Configuration File (php.ini) Path: /usr/local/etc/php/7.3
# Loaded Configuration File:         /usr/local/etc/php/7.3/php.ini
# Scan for additional .ini files in: /usr/local/etc/php/7.3/conf.d
# Additional .ini files parsed:      /usr/local/etc/php/7.3/conf.d/ext-opcache.ini

php -i | grep "Configuration"
# Configuration File (php.ini) Path => /usr/local/etc/php/7.3
# Loaded Configuration File => /usr/local/etc/php/7.3/php.ini
# Configuration

phpinfo()

phpinfo() については、あまり説明する必要はありませんが、PHP の使い方を学ぶ開発者にとっては必須の内容です。ここでは、phpinfo() 関数のパラメータを紹介するだけです。はい、パラメータがあり、情報のすべてではなく一部のみを表示できます。

  • INFO_GENERAL:配置的命令行、 php.ini 的文件位置、建立的时间、Web 服务器、系统及更多其他信息。

  • INFO_CREDITS:PHP 贡献者名单。参加 phpcredits()。

  • INFO_CONFIGURATION:当前PHP指令的本地值和主值。参见 ini_get()。

  • INFO_MODULES:已加载的模块和模块相应的设置。参见 get_loaded_extensions()。

  • INFO_ENVIRONMENT:环境变量信息也可以用 $_ENV 获取。

  • INFO_VARIABLES:显示所有来自 EGPCS (Environment, GET, POST, Cookie, Server) 的 预定义变量。

  • INFO_LICENSE:PHP许可证信息。参见 » license FAQ。

  • INFO_ALL:显示以上所有信息。

phpinfo(INFO_MODULES);

上面的代码在页面中所显示的信息就只是已加载模式相关的配置信息了。phpinfo() 会直接输出到页面上,如果想将它的内容保存在一个变量中,我们需要使用输出缓冲控制来进行操作。我们将在后面的文章中讲到这方面的内容。这里就简单的给一段代码。

ob_start();
phpinfo();
$v = ob_get_contents();
ob_end_clean();

echo $v;

总结

不看不知道,一看吓一跳。原来只是使用过 ini_set() 去修改运行时内存大小,但直到今天才知道原来 ini_set() 并不是所有的配置都可以修改的,每个参数是否能动态修改还要看它的参数类型。

而且上面还忘了说了,我们并不能使用 ini_set() 去增加配置参数。也就是说,使用 ini_set("B", "TEST_B") 增加一个 B 参数,然后直接使用 ini_get() 也是无法获取的。

而且简单的获取参数信息的两个函数也有这么多的不同,phpinfo() 原来也有这么多参数。果然,文档才是最好的学习资料。旅程还没有停止,我们刷文档的脚步依然不能停,一起加油冲冲冲!!

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202005/source/%E5%85%B3%E4%BA%8Ephp%E7%9A%84ini%E6%96%87%E4%BB%B6%E7%9B%B8%E5%85%B3%E6%93%8D%E4%BD%9C%E5%87%BD%E6%95%B0%E6%B5%85%E6%9E%90.php

推荐学习:php视频教程

以上がphpのiniファイル関連の操作機能を詳しく紹介します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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