1. 文档
PHP: PHP 选项/信息 - Manual
PHP: ini_set - Manual
PHP: ini_get - Manual
视频教程
[PHP小课堂]关于php的ini文件相关操作函数浅析_哔哩哔哩_bilibili
2. 整理输出 环境
Mac Pro Intel / Mac M1
PHP 8.x
或者
Linux「CentOS」Docker+LNMP 「PHP-FPM 7.2」
前言 2.1 什么是PHP 脚本配置
简单说,就是控制PHP运行的设置。
比如,是否显示错误,设置最大脚本执行的超时时间,设置运行的可使用的最大内存等,
本质上就是控制脚本更好地符合我们的想法去运行,去解决场景问题。
2.2 PHP 脚本配置作用
见上面
2.3 如何设置PHP 脚本配置, 各自特点 方式有两个:
1. 修改配置文件php.ini文件,作用于所有请求的全部生命周期,固定不变,除非使用方式二在运行中洞动态修改。
2. 使用ini_set()等一些其他函数,在PHP脚本运行中「针对具体的请求」,动态修改配置 「临时修改PHP配置文件php.ini的设置,无需打开此文件「有可能就没权限接触到配置文件」,并且在代码执行结束后,就会还原,特别适合虚拟主机上临时修改PHP配置使用」。
如果有些请求,没有执行到php_ini()函数,则依然使用php.ini文件中配置。
ini_set('memory_limit', '64M'); // 配置PHP脚本所使用服务器内存的最大字节数
ini_set('display_errors', 1); // PHP配置输出错误的类别
ini_set('session.auto_start', 0); // PHP配置SESSION设置
ini_set('session.use_cookies', 1); // PHP临时配置COOKIE设置
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
或者 set_time_limit(300);
等等
Note:
1. web 运行方式和cli方式使用的配置文件可能不同「即php.ini文件,又可能存在两个,需要确认」
有可能是同一个,可以通过下面的方式去验证:
cli下:php --ini
浏览器访问:phpinfo.php 内容:
phpinfo();
对比Loaded Configuration File的文件路经「具体的文件」
如下:
可以知道,这里一样的,当然可以设置为不一样的配置, 需要另外设置。
2. php.ini()对于web和cli的约束,生效能力是不同的,
有的配置项只对web方式有作用,有的可能相反,具体需要查看配置文件注释说明或者官方文档。
2.4 查看PHP版本
➜ php-test-temp php -v
PHP 8.1.1 (cli) (built: Dec 17 2021 22:38:05) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.1, Copyright (c) Zend Technologies
with Zend OPcache v8.1.1, Copyright (c), by Zend Technologies
➜ php-test-temp
2.5 查看扩展文件目录
➜ php-test-temp php-config --extension-dir
/usr/local/Cellar/php/8.1.1/pecl/20210902
➜ php-test-temp
2.6 查看配置文件目录
➜ ~ php --ini
Configuration File (php.ini) Path: /usr/local/etc/php/8.1
Loaded Configuration File: /usr/local/etc/php/8.1/php.ini
Scan for additional .ini files in: /usr/local/etc/php/8.1/conf.d
Additional .ini files parsed: /usr/local/etc/php/8.1/conf.d/ext-opcache.ini
➜ ~
➜ 8.1 ls
conf.d pear.conf php-fpm.conf php-fpm.d php.ini
➜ 8.1 pwd
/usr/local/etc/php/8.1
➜ 8.1
➜ php-test-temp php-config --ini-dir
/usr/local/etc/php/8.1/conf.d
Note
这里输出的目录结果是配置文件最底层目录,应是PHP将配置文件做了拆分,大的单一配置文件现在变成了多个小的配置文件,这样拆分,个人认为好处有,可以避免修改某一个配置,而不小心改到其他配置,而且更加各个配置之间分明,不用看很多无关的配置信息。
Nginx/Apache也都是如此。
额外
php-config -h // 下面的信息通常够用了
--extension-dir [/usr/local/Cellar/php/8.1.1/pecl/20210902]
--include-dir [/usr/local/Cellar/php/8.1.1/include/php]
--man-dir [/usr/local/Cellar/php/8.1.1/share/man]
--php-binary [/usr/local/Cellar/php/8.1.1/bin/php]
--php-sapis [ apache2handler cli fpm phpdbg cgi]
--ini-path [/usr/local/etc/php/8.1]
--ini-dir [/usr/local/etc/php/8.1/conf.d]
2.7 查看扩展信息 以swoole为例
php --ri swoole
如下:
➜ swoole-src php --ri swoole
swoole
Swoole => enabled
Author => Swoole Team
Version => 4.8.12
Built => Oct 25 2022 20:49:20
coroutine => enabled with boost asm context
kqueue => enabled
rwlock => enabled
openssl => OpenSSL 3.0.5 5 Jul 2022
dtls => enabled
http2 => enabled
pcre => enabled
zlib => 1.2.11
async_redis => enabled
Directive => Local Value => Master Value
swoole.enable_coroutine => On => On
swoole.enable_library => On => On
swoole.enable_preemptive_scheduler => Off => Off
swoole.display_errors => On => On
swoole.use_shortname => On => On
swoole.unixsock_buffer_size => 262144 => 262144
➜ swoole-src
2.8 设置或者获取配置值的方式 方式有两种:
方式一:更加推荐,统一好记
ini_set() / ini_get()
如:
ini_set(‘error_reporting’, 0);
ini_set('display_errors', 'On');
相同的效果:「但是参数和返回值的类型或可不同」
ini_set('error_reporting', 32767);
ini_set('error_reporting', E_ALL);
error_reporting(E_ALL);
E_ALL 常量value即 32767
-------------------------------------------------------------------------------------
ini_set('error_reporting', 32767);
// 或者
ini_set('error_reporting', E_ALL);
$level = ini_get('error_reporting'); // string(5) "32767"
error_reporting(E_ALL);
$lev = error_reporting();
var_dump($level); // string(5) "32767"
var_dump($lev); // int(32767)
-------------------------------------------------------------------------------------ini_set('display_errors','Off'); ini_set('log_errors', 'On'); ini_set('error_log', RUNTIME_PATH. 'logs/error.log');
和
专门的相关函数
如:
error_reporting(E_ALL); // 设置错误级别为所有错误
error_reporting(); // 获取当前错误级别
error_reporting(E_ALL ^ E_NOTICE) // 除了E_NOTICE报错
error_reporting(E_ERROR | E_WARNING | E_PARSE) // 三或
2.9 常用配置项
一时想不起,通常不需要配置,但是还是结合自身项目,并且借鉴网上的优秀实践进行配置。
1). 配置错误级别
error_reporting(); // 设置 PHP 的报错级别并返回当前级别。
error_reporting(0); // 禁用错误报告
error_reporting(0); // 禁用错误报告 error_reporting(E_ALL ^ E_NOTICE); // 显示除去 E_NOTICE 之外的所有错误信息 error_reporting(E_ALL^E_WARNING^E_NOTICE); // 显示除去E_WARNING E_NOTICE 之外的所有错误信息
error_reporting(E_ERROR | E_WARNING | E_PARSE); // 显示运行时错误,与error_reporting(E_ALL ^ E_NOTICE);效果相同。
error_reporting(E_ALL); // 显示所有错误
error_reporting(E_ALL || ~E_NOTICE); // 应该也是显示所有错误
2). 显示错误
ini_set('display_errors','On'); // 打开
ini_set('display_errors','1'); // 打开
ini_set('display_errors','Off'); // 关闭
ini_set('display_errors','0'); // 关闭
3). 内存使用
tbd
后续补充
...