1.应用场景

了解php运行配置,各项参数, 常用参数设置, 帮助快速调试或实际开发需要.

2.学习/操作

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 内容:

<?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 <team@swoole.com>

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

后续补充

...

3.问题/补充

TBD

后续补充

..。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐