Category Archives: PHP

在IIS中部署WordPress

在IIS中部署Wordpress

1.准备工作

1.Windows系统
2.PHP程序
下载网址:
https://windows.php.net/download/
或者
https://windows.php.net/downloads/releases/php-8.2.11-nts-Win32-vs16-x64.zip

Alt text

2.配置PHP

解压下载的PHP压缩包,找到php.ini-development文件,复制一份,重命名为php.ini。
修改该php.ini配置文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
;放置PHP扩展的目录,去掉下面前面的注释,启用扩展功能
extension_dir = "ext"
 
;启用扩展。不需要一个一个的找,这一块的扩展全部启用都可以。
extension=bz2
extension=ldap
extension=curl
extension=ffi
extension=ftp
extension=fileinfo
extension=gd
extension=gettext
extension=gmp
extension=intl
extension=imap
extension=mbstring
extension=exif      ; Must be after mbstring as it depends on it
extension=mysqli
extension=odbc
extension=openssl
extension=pdo_firebird
extension=pdo_mysql
extension=pdo_oci
extension=pdo_odbc
extension=pdo_pgsql
extension=pdo_sqlite
extension=pgsql
extension=shmop
extension=soap
extension=sockets
extension=sqlite3
extension=tidy
extension=xsl
extension=zip
 
;启用并修改session文件的存储目录。
session.save_path = "C:\tmp"
 
;修改PHP上传最大限制
post_max_size = 200M
upload_max_filesize = 200M

修改完保存一下。设置一下C:\tmp的文件夹权限。添加IIS_IUSRS用户,设置所有权限。

Alt text

3.安装IIS

安装IIS

打开Windows 11 的应用界面->可选功能->更多Windows功能。进入启用或关闭Windows功能界面。
展开Internet Information Services,勾选Web管理工具中的IIS管理控制台和万维网服务中的CGI、ASP.NET,还有常见HTTP功能中的静态内容、默认文档、目录浏览,然后点击确定。
如果不勾选ASP.NET,IIS管理器里面没有默认文档设置。
如果不勾选静态内容,IIS管理器里面没有MIME类型设置。

Alt text

稍等片刻,安装完后。打开IIS管理器。在Windows 11开始菜单上搜索IIS,打开即可。最好把IIS管理器固定在开始菜单,方便下次使用。

Alt text

配置PHP

打开IIS管理器,找到处理程序映射。

Alt text

打开处理程序映射界面,点击有右边的添加模块映射。添加PHP相关信息,然后点击确定。如下。

Alt text

如果提示:要为此可执行文件创建FastCGI应用程序吗?点击“是”将此项添加到FastCGI集合中,以及允许此可执行文件作为FastCGI应用程序运行。
点击是即可。

添加默认文档

默认文档即index.html、index.htm、default.htm。这里我们要使用PHP,就要把idnex.php设置为默认文档。
找到默认文档设置。

Alt text

添加index.php为默认文档。

Alt text

添加MIME类型

这里的操作主要是一些文件如CSS、JS、ISO等在IIS中默认不下载。会提示错误。

Alt text

添加文件扩展名为星号(*),MIME类型为application/octet-stream。表示所有文件皆可下载。

Alt text

4.安装Wordpress

注:Wordpress需要数据库支持,默认链接数据库是MySQL或MariaDB。这里使用的是SQLite,具体使用SQLite操作方法请查阅上一篇。

将下载下来的Wordpress压缩包放在网站目录里。可以放在默认网站C:\inetpub\wwwroot,也可以新建的网站目录里面。

在浏览器中打开http://localhost/wordpress,可以即可安装Wordpress。

注意:
还需要给网站目录设置IIS_IUSRS权限,否则Wordpress无法安装插件。

Alt text

5.Wordpress伪静态

到微软网站下载URL重写模块(URL Rewrite)。
https://www.iis.net/downloads/microsoft/url-rewrite

Alt text

安装完成后。
将以下内容保存为web.config文件,放在wordpress跟目录中。
如果网站根目录就是Wordpress的根目录,那就放置再网站根目录。
一定要先安装然后再存放web.config文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
                <rule name="category">
                    <match url="category/?(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="/index.php?category_name={R:1}" appendQueryString="false" logRewrittenUrl="false" />
                </rule>
                <rule name="tags">
                    <match url="tag/?(.*)" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
                    <action type="Rewrite" url="index.php?tag={R:1}" />
                </rule>
                <rule name="Main Rule" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:0}" />
                </rule>
                <rule name="wordpress" patternSyntax="Wildcard">
                    <match url="*" />
                    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php" />
                </rule></rules>
    </rewrite>
  </system.webServer>
</configuration>

完成后,就可以设置Wordpress的伪静态链接了。

Alt text

结束,愉快的玩耍吧。

使用SQLite部署WordPress

Install WordPress with SQLite

使用SQLite部署Wordpress

使用SQLite部署Wordpress,不需要安装MYSQL(MARIADB),只需要一个能执行PHP的环境就行。

1. 准备工作

1.PHP运行环境
2.下载Wordpress
https://cn.wordpress.org/download/
3.下载SQLite Database Integration
https://wordpress.org/plugins/sqlite-database-integration/

2.处理插件文件

1.解压Wordpress和SQLite Database Integration压缩包。
2.将sqlite-database-integration文件夹复制到wordpress\wp-content\plugins文件夹中。
3.将wordpress\wp-content\plugins\sqlite-database-integration文件夹中的db.copy文件,剪切到wordpress\wp-content文件夹。并且重命名为db.php

3.修改wordpress的wp-config.php文件

1.将wordpress文件夹中的wp-config-sample.php文件复制一份,重命名为wp-config.php
2.修改wp-config.php中以下内容。
将DB_NAME、DB_USER、DB_PASSWORD、DB_HOST的值设置为空。

1
2
3
4
5
6
7
8
9
10
11
12
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', '' );
 
/** Database username */
define( 'DB_USER', '' );
 
/** Database password */
define( 'DB_PASSWORD', '' );
 
/** Database hostname */
define( 'DB_HOST', '' );

4.部署

完成上述操作,将wordpress文件夹中整体上传到网站上即可开始安装。

5.无聊的废话

WordPress 默认只支持 MySQL 数据库,MySQL 是世界上最流行的关系型数据库,WordPress 采用 MySQL 作为数据库也是自然而然的事情。不过除了 MySQL,我们还可以使用 SQLite 作为 WordPress 的数据库系统来安装使用。

SQLite Database Integration 是一个「Drop-in」类型的插件,是用来替换 WordPress 内置功能的,只要文件存在,插件就自动启用。

然后打开 WordPress 站点安装页面,我们会发现,没有要求输入 MySQL 数据库信息的步骤,直接进入了安装界面,接下来就和使用 MySQL 安装的 WordPress 是一样的。经过在wordpress6.3.2版本上测试,在使用上没有任何区别。

使用 SQLite 安装 WordPress 的好处

为什么 MySQL 使用的好好的,我们要使用 SQLite 来安装 WordPress 呢?有以下几点好处:

  • 对服务器要求低:SQLite 是基于文件的数据库,只要服务器上有 Nginx 和 PHP 就可以使用了,相对于默认的安装方法,少了一个 MySQL 服务。
  • 方便备份:直接打包站点目录就把整个站点备份好了。
  • 方便迁移:如果需要迁移服务器,直接把站点目录打包,上传到另外一个服务器上就可以了,不用再导出、导入数据库。

什么时候可以使用 SQLite

既然有了上面说的诸多好处,那我们是否可以在所有情况下都使用 SQLite 来安装 WordPress 呢?当然不是,WordPress 默认采用 MySQL而不是 SQLite 作为数据库是有原因的。

从名称就可以看出,SQLite 是一个轻量级的数据库,某些复杂的特性是支持不了的。所以,如果我们开发的是一个很简单的企业站点,只有为数不多的几个页面,不涉及复杂的数据库交互的情况下,使用 SQLite 是完全没有问题的。

因为 WordPress 是一个开源的生态系统,在站点架构上,会有很多可能,不只是 SQLite,WordPress 甚至也可以使用 PostgreSQL 进行安装,具体方法大家可以自行搜索,在这里就不在多说了。

在SQLite上运行WP有什么限制?为什么不将其用于所有站点?

缺点之一是SQLite在具有多个作者的站点中表现不佳。如果多个作者正在编辑网站上的帖子并同时更新它们,那么他们的保存请求将一个接一个地运行,而不是同时运行——因此会有一小段延迟(可能是毫秒,但仍然是延迟)。

SQLite是一个很棒的工具,但它不是灵丹妙药 - 就像MySQL一样。MySQL是并且应该继续成为默认的,因为如果你有成为下一件大事的愿望,那么MySQL可以更好地扩展。另一方面,如果您只想要一个博客,一个带有您的关于页面和联系表单的公司网站,或者任何类型的小型网站(可以说是WordPress上的大多数网站),那么SQLite就是您所需要的,它会表现得更好。

php.ini 中文版 (PHP7,PHP8)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
;;;;;;;;;;;;;;;;;;
;; 关于 php.ini ;;
;;;;;;;;;;;;;;;;;;
; 对于服务器模块,仅在服务器启动时读取一次 php.ini 。对于 CGI 和 CLI ,每次调用都会读取 php.ini 。
 
; PHP 会在初始化时按如下顺序搜索此文件(搜到即停):
; 1. SAPI 模块指定的位置:
;     (a) Apache 2.x 中的 PHPIniDir 指令
;     (b) CGI/CLI 模式下 -c 命令行选项
;     (c) NSAPI 中的 php_ini 参数
;     (d) THTTPD 中的 PHP_INI_PATH 环境变量
; 2. PHPRC 环境变量指定的位置
; 3. Windows注册表指定的位置(依次搜索、搜到即停):
;     (a) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z] 内的 IniFilePath 的值(特定于php-x.y.z版本)
;     (b) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] 内的 IniFilePath 的值(特定于php-x.y.*系列版本)
;     (c) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x] 内的 IniFilePath 的值(特定于php-x.*.*系列版本)
;     (d) [HKEY_LOCAL_MACHINE\SOFTWARE\PHP] 内的 IniFilePath 的值(不特定于php的版本)
; 4. 当前工作目录(不适用于 CLI 模式)
;    [提示] Apache 会在启动时把当前工作目录转到根目录,这将导致 PHP 可能会尝试在根目录读取 php.ini 。
; 5. web 服务器目录(适用于 SAPI 模块)或 PHP 所在目录(Windows 下其它情况)
; 6. 编译时选项 --with-config-file-path 指定的位置 或 Windows目录( %SystemRoot% 通常是"C:\Windows")
 
; 如果存在 php-SAPI.ini (例如 php-apache2handler.ini, php-fpm-fcgi.ini, php-cli-server.ini, php-cli.ini 等),
; 那么 php.ini 将会被 php-SAPI.ini 取代。
 
; 最新版本:
; php.ini-production
; php.ini-development
 
;;;;;;;;;;;;
;;  语法  ;;
;;;;;;;;;;;;
; 该文件的语法非常简单。空白行和以分号开始的行被简单地忽略。
; 普通配置段标题(例如: [PHP])也被简单地忽略(即使将来它们可能有某种意义)。
 
; 形如 [PATH=/www/mysite] 的配置段表示仅作用于 /www/mysite 目录下的 PHP 文件。
; 形如 [HOST=www.example.com] 的配置段表示仅作用于 www.example.com 站点的 PHP 文件。
; [提示]对于拥有多个域名的站点,应该使用 SERVER_NAME 参数的值(也就是域名列表中的第一个域名)。
; 这两种配置段中的设置既不能在运行时修改、也不受 .user.ini 文件的影响。
; 这两种配置段仅工作于 CGI/FastCGI 模式[FastCGI 协议规范中文版],且不能包含 extension 与 zend_extension 指令。
 
; 设置指令的格式如下:
; 指令 = 值
; "指令"是大小写敏感的!所以"foo=bar"不同于"FOO=bar"。
; 不能识别的"指令"将会被直接忽略、未设置的指令将会使用其默认值。
; "值"可以是:
; 1. 一个字符串(可以用引号界定,如:"foo")
; 2. 一个数字(整数或浮点数,如:0, 1, 34, -1, 33.55)
; 3. 一个PHP常量(如:E_ALL, M_PI)(不能在 php.ini 之外使用[例如 httpd.conf])
; 4. 一个INI常量(On, Off, Yes, No, None)
; 5. 一个表达式(如:E_ALL & ~E_NOTICE)
; [注1]可以在"值"中引用环境变量,如:"${AUTHOR}.log" 、 ".:${USER}/pear/php"
; [注2]可以在"值"中引用先前设置的指令值,如:"${open_basedir}:/new/dir"
 
; 仅可在表达式中使用 位运算符、逻辑非、圆括号:
; | 位或(OR)
; ^  位异或(XOR)
; & 位与(AND)
; ~ 位非(NOT)
; ! 逻辑非(NOT)
 
; 布尔标志用 1, On, True, Yes 表示打开,用 0, Off, False, No 表示关闭。
 
; 空字符串可以用在等号后不写任何东西表示,或者用 None 关键字:
; foo =         ; 将foo设为空字符串(推荐的方式)
; foo = None    ; 将foo设为空字符串
; foo = "None"  ; 将foo设为字符串'None'
 
; 如果要在指令值中使用动态扩展(PHP扩展或Zend扩展)中的常量,
; 那么只能在加载这些动态扩展的指令行(extension 或 zend_extension)之后使用这些常量。
 
;;;;;;;;;;;;;;;;;;;;;;;;;;
;;  生产环境与开发环境  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;
; PHP 面向生产环境与开发环境分别提供了 php.ini-production 与 php.ini-development 两套参考配置。
; 两套参考配置的差异如下:
 
;display_errors
;   Default Value: On
;   Development Value: On
;   Production Value: Off
 
;display_startup_errors
;   Default Value: On
;   Development Value: On
;   Production Value: Off
 
;error_reporting
;   Default Value: E_ALL
;   Development Value: E_ALL
;   Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
 
;log_errors
;   Default Value: Off
;   Development Value: On
;   Production Value: On
 
;max_input_time
;   Default Value: -1 (Unlimited)
;   Development Value: 60 (60 seconds)
;   Production Value: 60 (60 seconds)
 
;output_buffering
;   Default Value: Off
;   Development Value: 4096
;   Production Value: 4096
 
;register_argc_argv
;   Default Value: On
;   Development Value: Off
;   Production Value: Off
 
;request_order
;   Default Value: None
;   Development Value: "GP"
;   Production Value: "GP"
 
;session.gc_divisor
;   Default Value: 100
;   Development Value: 1000
;   Production Value: 1000
 
;session.sid_bits_per_character
;   Default Value: 4
;   Development Value: 5
;   Production Value: 5
 
;short_open_tag
;   Default Value: On
;   Development Value: Off
;   Production Value: Off
 
;variables_order
;   Default Value: "EGPCS"
;   Development Value: "GPCS"
;   Production Value: "GPCS"
 
;zend.exception_ignore_args
;   Default Value: Off
;   Development Value: Off
;   Production Value: On
 
;zend.exception_string_param_max_len
;   Default Value: 15
;   Development Value: 15
;   Production Value: 0
 
;;=========================================================================================
;;=====================================配置指令详解========================================
;;=========================================================================================
; 以下每个指令的值都与 PHP-8.0 内建的默认值相同(也兼顾 PHP-7.2 PHP-7.3 PHP-7.4 版本)。
; 也就是说,如果'php.ini'不存在,或者你删掉了某些行,默认值与之相同。
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;   SAPI ( Server API )   ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
[apache2handler]
; 此配置段中的指令仅在以 Apache2处理器模块(php_module) 方式使用PHP时才有意义。
; [提示]可以在 httpd.conf 中使用 php_value/php_flag 与 php_admin_value/php_admin_flag 指令覆盖 php.ini 中的设置。
 
engine = On
; 是否启用PHP解析引擎。一般用于基于目录或虚拟主机来开关PHP解析引擎。
 
last_modified = Off
; 是否在"Last-Modified:"应答头中放置PHP脚本的最后修改时间。
 
xbithack = Off
; 是否不管文件的扩展名是什么,只要带有可执行位,就都作为PHP脚本解析。
 
[fpm-fcgi]
; 此配置段中的指令仅在以 FPM/FastCGI 方式使用PHP时才有意义。
 
cgi.check_shebang_line = On
; 是否检查脚本顶部以 #! 开始的行(shebang)。
; 如果脚本想要既能够单独运行又能够在 PHP CGI 模式下运行,那么这个起始行(shebang)就是必须的。
; 设为 On 表示在CGI模式下将会自动忽略这一行。
 
cgi.discard_path = Off
; 是否允许把 PHP CGI 目录放置在 web 目录树之外以增强安全性,这样客户端将无法避开 .htaccess 安全防护。
 
cgi.fix_pathinfo = On
; 是否为CGI提供真正的 PATH_INFO/PATH_TRANSLATED 值(遵守cgi规范)。
; 先前的行为是无论 PATH_INFO 是什么,一律将 PATH_TRANSLATED 设为 SCRIPT_FILENAME 。
; 打开此指令将使PHP修正其路径以遵守CGI规范,否则仍将使用旧式的不合规范的行为。
; 鼓励你打开此指令,并修正脚本以使用 SCRIPT_FILENAME 代替 PATH_TRANSLATED 。
; [提示]即使将 PHP-FPM 与 Nginx 配合使用,也应该保持此指令为 On (网上有许多老旧文章)。
; 有关 PATH_INFO 的更多信息请参见cgi规范。
 
cgi.force_redirect = On
; 是否打开cgi强制重定向。强烈建议打开它以提高安全性。
; 注意:在IIS上必须关闭它!
 
cgi.nph = Off
; 在CGI模式下是否强制对所有请求都发送"Status: 200"状态码。
 
cgi.redirect_status_env =
; 如果 cgi.force_redirect = On 并且与非Apache配合运行PHP,
; 可能需要设置一个cgi重定向环境变量名,PHP将根据此环境变量决定是否继续执行下去。
; 设置这个变量会导致安全漏洞,请务必在设置前搞清楚自己在做什么。
 
cgi.rfc2616_headers = Off
; 指定PHP在发送HTTP响应码时使用何种状态头。
; 设为 Off 表示使用符合RFC3875标准的头(例如"Status: 404 Not Found"),Apache和其它web服务器都支持。
; 设为 On  表示使用符合RFC2616标准的头(例如"HTTP/1.0 404 Not found")。
; 务必保持默认值 Off ,除非你确实知道自己在做什么。
 
fastcgi.error_header =
; 如果 display_errors = Off 并且被访问的php脚本包含语法错误,
; 那么默认情况下,用户将会收到一个状态行为"HTTP/1.1 500 Internal Server Error"的空页面。
; 如果你认为默认的状态行不合理,那么可以使用此指令自定义一个状态行(例如 "HTTP/1.1 550 Server Exploded")。
 
fastcgi.impersonate = Off
; IIS中的FastCGI支持模仿客户端安全令牌的能力,这使得IIS能够定义运行时请求所基于的安全上下文。
; 但Apache不支持此特性。如果在IIS中运行则应设为 On ,否则应设为 Off 。
 
fastcgi.logging = On
; 是否开启FastCGI日志。
 
fpm.config =
; 明确指定 FPM 配置文件(php-fpm.conf)的路径
 
[cli-server]
; 此配置段中的指令仅在使用PHP内建的 CLI Web Server 时才有效。
 
cli_server.color = Off
; 是否让 CLI Web Server 在终端输出中使用彩色。
 
[cli]
; 此配置段中的指令仅在使用PHP命令行模式时才有意义(实际是在设置 readline 模块)。
 
cli.pager =
; 显示命令行输出的外部分页程序。
 
cli.prompt = "\b \>"
; 以交互方式使用时的命令行提示符。
 
;;;;;;;;;;;;;;;;;;;
;;     核心      ;;
;;;;;;;;;;;;;;;;;;;
 
[Core-Language]
 
short_open_tag = On
; 是否允许使用"<? ?>"短标记。
; 除非你的php程序仅在受控环境下运行,且只供自己使用,否则请不要使用短标记。
; 如果要和XML结合使用PHP,可以选择关闭此选项以方便直接嵌入"<?xml ... ?>"。
; 本指令不影响缩写形式"<?=",它始终和"<?php echo"等价。
 
precision = 14
; 浮点型数据的显示精度(有效位数)。
 
serialize_precision = -1
; 将浮点型和双精度型数据序列化存储时的精度(有效位数)。
; 默认值 -1 表示自动选择最佳精度,能够恰好确保浮点型数据被解序列化程序解码时不会丢失数据。
; 此值还影响 json_encode() 编码双精度型数据的精度。
 
disable_functions =
; 该指令接受一个用逗号分隔的函数名列表,以禁用特定的函数。
; 该指令仅能禁用内置函数,不能禁用用户自定义函数。
 
disable_classes =
; 该指令接受一个用逗号分隔的类名列表,以禁用特定的类。
 
expose_php = On
; 是否暴露PHP被安装在服务器上的事实(在http头中加上其签名)。
; 它不会有安全上的直接威胁,但它使得客户端知道服务器上安装了PHP。
 
hard_timeout = 2
; 当脚本执行时间达到 max_execution_time 限制之后会被"柔软且安全"的结束,
; 此指令就是设置这种"柔软且安全"的方式结束脚本的最大允许用时(秒)。
; 一旦超时(默认为2秒),就会被进一步以粗暴的方式结束(不释放任何未释放的资源)。
 
zend.assertions = 1
; 如何编译断言:
; -1 完全不编译(生产模式)
;  0 编译但是在运行时跳过
;  1 编译并执行(开发模式)
 
zend.exception_ignore_args = Off
; 是否从异常生成的堆栈跟踪中排除参数。
; 建议在生产服务器上设为 On 以防止在堆栈跟踪中输出敏感信息。
 
zend.exception_string_param_max_len = 15
; 堆栈跟踪参数中允许的最大字符串长度(取值范围=0~1000000)。
; 仅在 zend.exception_ignore_args = Off 时有意义。
; 建议在生产服务器上设为 0 以减少敏感信息的输出。
 
zend.multibyte = Off
; 是否允许PHP脚本使用例如 CP936, Big5, CP949, Shift_JIS 这样的不安全字符编码。
; 与 ISO-8859-1 兼容的安全字符编码(UTF-8, EUC, ...)不需要开启此指令。
; 若要使用此特性,必须加载 mbstring 扩展模块。
 
zend.script_encoding =
; 当PHP脚本第一行没有"declare(encoding=...)"声明时,默认使用的字符编码。
; 设置此指令之后,脚本就像自动使用了 mb_convert_encoding() 函数一样,
; 将所有字符串从 zend.script_enconding 编码自动转换为 mbstring.internal_encoding 编码。
; 仅在 zend.multibyte = On 时有意义。
; 如果脚本使用了与 ISO-8859-1 不兼容的字符编码,建议明确设置此指令。
 
zend.detect_unicode = On
; 是否通过检查脚本的BOM(字节顺序标记)来检测脚本是否包含多字节字符。
; 仅在 zend.multibyte = On 时有意义。
 
zend.signal_check = Off
; 是否在关闭时检查被替换的信号处理程序(仅存在于Unix平台)
 
[Core-ResourceLimits]
 
memory_limit = 128M
; 脚本所能够申请到的最大内存(字节)(可以使用K和M作为单位)(必须大于 post_max_size 的值)。
; 这有助于防止劣质脚本消耗完服务器上的所有内存。设为 -1 表示取消内存限制。
; 设置了该指令后,memory_get_usage() 函数将变为可用。
 
[Core-Performance]
 
realpath_cache_size = 4M
; 指定PHP使用的 realpath(规范化的绝对路径名) 缓冲区大小。
; 缓冲区大小=路径字符串的总长度+缓存项关联数据。主要缓存长路径时,缓存必须更大。
; 此值并不能直接控制缓存中的路径数量。在PHP打开大量文件的系统上应当增大该值以提高性能。
; 注意:开启 open_basedir 之后 realpath 缓存将会被禁用。
 
realpath_cache_ttl = 120
; realpath 缓存有效期(秒)。对文件很少变动的系统,可以增大该值以提高性能。
 
[Core-DataHandling]
 
arg_separator.output = "&"
; PHP输出的URL中用来分隔参数的分隔符。
; 另外还可以设为"&amp;"或","或";"等等。
 
arg_separator.input = "&"
; PHP解析URL中的变量时使用的分隔符列表。字符串中的每一个字符都会被当作分割符。
; 另外还可以设为";,&"等等。
 
variables_order = "EGPCS"
; 注册哪些超全局数组。分别用 E, G, P, C, S 表示 $_ENV, $_GET, $_POST, $_COOKIE, $_SERVER 。
; 因为注册这些数组会带来性能损失,并且 $_ENV 也不常用,所以不建议注册 $_ENV 。
; [提示]在FastCGI模式下 $_SERVER 中始终包含有环境变量(也就是 S 永远相当于 ES )。
; 推荐设为"GPCS",并使用 getenv() 访问环境变量。
 
request_order =
; 如何将 G, P, C 超全局数组中的元素注册到 $_REQUEST 超全局数组中。
; 此设置不但决定了注册 G, P, C 中的哪几个,还决定了注册时的覆盖顺序(后值会覆盖前值)。
; [注意]设为空表示继承 variables_order 的值,而不是让 $_REQUEST 为空。建议设为"GP"。
 
auto_globals_jit = On
; 是否仅在实际使用到 $_ENV, $_REQUEST, $_SERVER 变量时才创建(而不是在脚本一启动时就自动创建)。
; 如果并未在脚本中使用这些数组,打开该指令将会获得性能上的提升。
 
register_argc_argv = On
; 是否注册 $argv 与 $argc 全局变量(可能包含GET方法的信息)。
; $argv 数组包含所有传递给脚本的参数。$argc 变量保存了参数的个数。
; 建议并关掉该指令以提高性能。
; [提示]对于 CLI 模式,此指令被硬编码为 On
 
enable_post_data_reading = On
; 是否允许读取 POST 数据。设为 Off 之后 $_POST 与 $_FILES 将永远为空。
; 唯一的办法是通过 php://input 流包装器来获取POST数据。
; Off 仅适用于代理请求或以内存高效的方式处理POST数据。
 
post_max_size = 8M
; 允许接受的最大POST数据长度(字节)("0"表示无限)。仅在 enable_post_data_reading = On 时有意义。
; 此设定也影响到文件上传(必须大于 upload_max_filesize 的值),如果POST数据超出限制,那么 $_POST 和 $_FILES 将会为空。
; 如果启用了内存限制,那么该值应当小于 memory_limit 的值。
 
auto_prepend_file =
auto_append_file  =
; 自动在PHP脚本之前/之后插入的文件名。设为空表示禁用该特性。
; 指定的文件就像被 include() 函数包含进来一样,因此会使用 include_path 指令的值。
; 注意:如果脚本通过 exit() 终止,那么自动后缀将不会发生。
 
default_mimetype = "text/html"
default_charset = "UTF-8"
; 设置HTTP头 "Content-Type:" 的默认值。都设为空表示不输出"Content-Type:"头。
; 默认值表示输出"Content-Type: text/html; charset=UTF-8"。
; 反对将 default_charset 设为空。
 
input_encoding =
; PHP输入使用的字符编码。设为空表示使用 default_charset 的值。
 
output_encoding =
; PHP输出使用的字符编码。设为空表示使用 default_charset 的值。
 
internal_encoding =
; PHP内部使用的字符编码。设为空表示使用 default_charset 的值。
 
[Core-Paths]
 
include_path = ".;/path/to/php/pear"
; 指定一组目录用于 require(), include(), fopen(), file(), readfile(), file_get_contents() ... 等函数定位文件。
; 格式和系统的PATH环境变量类似(UNIX下用冒号分隔,Windows下用分号分隔):
; UNIX: "/path1:/path2"
; Windows: "\path1;\path2"
; 直接使用'./path/to/file'方式表示相对于当前目录的文件是一种效率更高的方式(不推荐在此指令中使用'.')。
; 更进一步,将此指令设为空有助于提高在文件系统上定位文件的性能。
; 可以使用 set_include_path() 在运行时修改此指令的值。
 
open_basedir =
; 将PHP允许操作的所有文件都限制在此组目录列表下以提升安全性(设为空表示允许打开所有文件)。
; 当脚本试图打开指定目录树之外的文件时,将遭到拒绝。
; 所有的符号连接都会被解析,所以不可能通过符号连接来避开此限制。
; 特殊值'.'表示存放该脚本的目录将被当做基准目录,但这样做很不安全(脚本可以用chdir()更改工作目录)。
; 对于共享服务器,在 httpd.conf 中针对不同的虚拟主机或目录灵活设置该指令将变得非常有用。
; 作为Apache模块时,父目录中的 open_basedir 路径将自动被继承。
; 在Windows中用分号分隔目录,UNIX系统中用冒号分隔目录,建议使用 PATH_SEPARATOR 常量编写可移植代码。
; 注意:开启此特性之后 realpath 缓存将会被禁用。
 
doc_root =
; PHP的"CGI根目录"。仅在非空时有效。
; 在web服务器的主文档目录(比如"htdocs")中放置可执行程序/脚本被认为是不安全的,
; 比如因为配置错误而将脚本作为普通的html显示。
; 因此很多系统管理员都会在主文档目录之外专门设置一个只能通过CGI来访问的目录,
; 该目录中的内容只会被解析而不会原样显示。
; 如果设置了此指令,那么PHP就只会解释 doc_root 目录下的文件,
; 并确保目录外的脚本都不会被PHP解释器执行( user_dir 除外)。
; 如果编译PHP时没有指定 FORCE_REDIRECT ,那么必须设置此指令。
; 如果在非IIS服务器上以CGI方式运行,务必阅读手册中的安全部分。
; 确保安全的替代方案是使用 cgi.force_redirect 指令。
 
user_dir =
; 告诉php在使用 /~username 打开脚本时到哪个目录下去找,仅在非空时有效。
; 也就是在用户目录之下使用PHP文件的基本目录名,例如:"public_php"
 
user_ini.cache_ttl = 300
; 重新读取 .user.ini 文件的间隔秒数( .user.ini 文件的生存期)。
 
user_ini.filename = ".user.ini"
; 基于每个目录的用户自定义 php.ini 文件的名称(仅支持 CGI/FastCGI 模式)。设为空表示关闭此功能。
; 开启此功能之后,除了主 php.ini 之外,还会从被执行的 PHP 脚本所在目录开始,一直向上扫描到 web 根目录。
; 如果被执行的 PHP 脚本在 web 根目录之外,那么只扫描该 PHP 脚本所在的目录。
; 仅允许在 .user.ini 文件中使用 PHP_INI_PERDIR 和 PHP_INI_USER 类型的指令。
; 开启此功能会让 PECL 的 htscanner 扩展作废。
 
extension_dir = "/path/to/phpext"
; 存放扩展库(模块)的目录,也就是PHP用来寻找动态扩展模块的目录。
; Windows下默认为"C:\php\ext"
; Unix下的默认值取决于编译时的配置。
 
sys_temp_dir = "/path/to/tmp"
; 存放临时文件的临时目录。默认为系统的临时目录(参见 sys_get_temp_dir() 函数)
 
;extension=PHP模块名(不含前后缀,例如 mbstring )
;zend_extension=Zend模块名(不含前后缀,例如 opcache )
; 对于不在 extension_dir 目录中的模块可以直接写上模块文件的完整绝对路径。
; [注意] exif 模块必须在 mbstring 之后加载
 
[Core-FileUploads]
 
file_uploads = On
; 是否允许HTTP文件上传。参见 upload_max_filesize, upload_tmp_dir, post_max_size 指令。
 
upload_tmp_dir =
; 存放上传文件的临时目录(必须是PHP进程可写的目录)。设为空表示使用系统默认的临时目录。
; 如果指定的目录不可写,将会自动使用系统默认的临时目录。
; 如果设置了 open_basedir ,那么其中必须包含系统默认的临时目录,否则上传功能将无法使用。
 
upload_max_filesize = 2M
; 允许上传的文件最大尺寸(必须小于 post_max_size 的值)。
 
max_file_uploads = 20
; 一次HTTP请求允许同时上传的最大文件数量。
 
[Core-Windows]
 
windows.show_crt_warning = Off
; 是否显示C运行时的警告消息(仅存在于Windows平台)
 
;;;;;;;;;;;;;;;;;;;;;
;;    核心扩展    ;;
;;;;;;;;;;;;;;;;;;;;;
 
[DateTime]
; 前四个配置选项目前仅用于 date_sunrise() 和 date_sunset() 函数。
 
date.default_latitude = 31.7667
; 默认纬度
date.default_longitude = 35.2333
; 默认经度
date.sunrise_zenith = 90.833333
; 默认日出天顶
date.sunset_zenith = 90.833333
; 默认日落天顶
 
date.timezone =
; 未设定TZ环境变量时用于所有日期和时间函数的默认时区。
; 中国大陆应当使用"PRC"或"Asia/Shanghai"
; 应用时区的优先顺序为:
; 1. 用 date_default_timezone_set() 函数设定的时区(如果设定了的话)
; 2. TZ 环境变量(如果非空的话)
; 3. 该指令的值(如果设定了的话)
; 4. PHP自己推测(如果操作系统支持)
; 5. 如果以上都不成功,则使用 "UTC"
 
[ErrorHandling]
 
error_reporting = E_ALL
; 错误报告应该包含的内容(位字段的叠加):
;     1  E_ERROR             致命的运行时错误
;     2  E_WARNING           运行时警告(非致命性错误)
;     4  E_PARSE             编译时解析错误
;     8  E_NOTICE            运行时提醒(经常是bug,也可能是有意的)
;    16  E_CORE_ERROR        PHP启动时初始化过程中的致命错误
;    32  E_CORE_WARNING      PHP启动时初始化过程中的警告(非致命性错)
;    64  E_COMPILE_ERROR     编译时致命性错
;   128  E_COMPILE_WARNING   编译时警告(非致命性错)
;   256  E_USER_ERROR        用户自定义的致命错误
;   512  E_USER_WARNING      用户自定义的警告(非致命性错误)
;  1024  E_USER_NOTICE       用户自定义的提醒(经常是bug,也可能是有意的)
;  2048  E_STRICT            编码标准化警告(建议如何修改以向前兼容)
;  4096  E_RECOVERABLE_ERROR 接近致命的运行时错误,若未被捕获则视同 E_ERROR
;  8192  E_DEPRECATED        对在未来版本中可能无法正常工作的代码给出警告
; 16384  E_USER_DEPRECATED   用户自定义的警告(对在未来版本中可能无法正常工作的代码给出警告)
; 32767  E_ALL               上述所有错误与警告
; [注意]不能在 php.ini 之外使用这些常量(必须使用数值)。
; 开发环境可设为 2147483647(所有二进制位全为1) 打开现在或将来可能出现的各种错误与警告。
; 在生产服务器上建议设为 E_ALL & ~E_DEPRECATED & ~E_STRICT 以避免过多的性能损失。
; 若想进一步提升性能,可以考虑设为 E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (仅包含错误)
 
display_errors = On
; 是否将错误信息作为输出的一部分显示。
; 在最终发布的web站点上,强烈建议你关掉这个特性,并使用错误日志代替。
; 在最终发布的web站点打开这个特性可能暴露一些敏感信息。
; 特殊值 STDOUT 与 STDERR 仅可用于 CGI/CLI 模式(CLI模式默认值=STDOUT)。
 
display_startup_errors = On
; 是否显示PHP启动时的错误(PHP7默认值=Off)。
; 即使 display_errors = On ,关闭此参数也不显示PHP启动时的错误。
; 在生产服务器上建议关掉这个特性以避免泄漏敏感的配置信息。
 
log_errors = Off
; 是否将错误信息记录到 error_log 指定的目标。
; 强烈建议你在生产环境使用日志记录错误而不是直接输出,
; 这样可以让你既知道那里出了问题,又不会暴露敏感信息。
;  FPM/FastCGI 模式的默认值=On
 
log_errors_max_len = 1024
; 允许记录错误信息的最大字节长度。设为 0 可以允许无限长度。
 
ignore_repeated_errors = Off
; 是否忽略重复的错误信息。
; 错误信息必须出现在同一脚本的同一行才被被视为重复(除非 ignore_repeated_source = On)。
 
ignore_repeated_source = Off
; 当 ignore_repeated_errors = On 时,是否忽略错误消息的来源(忽略来自不同代码的相同错误消息)。
 
report_memleaks = On
; 是否报告内存泄漏。这个参数只在以调试方式编译的PHP中起作用,
; 并且必须在 error_reporting 指令中包含 E_WARNING
 
report_zend_debug = Off
; 尚无说明文档 (PHP7 的 Apache/FPM/FastCGI 模式默认值=On)
 
html_errors = On
; 是否在出错信息中使用HTML标记。
; 在需要记录错误日志的时候不要使用这个特性!
; [提示]对于 CLI 模式,此指令被硬编码为 Off
 
xmlrpc_errors = Off
; 是否将错误报告的格式设置为XML-RPC错误信息的格式(关闭正常的错误报告)。
 
xmlrpc_error_number = 0
; XML-RPC faultCode 元素的值(仅在 xmlrpc_errors = On 时有意义)。
 
docref_ext =   ;".php"
; 如果 html_errors = On 并且设置了 docref_root ,那么PHP将会在出错信息上显示超连接。
; 直接链接到一个说明这个错误或者导致这个错误的函数的页面。
; 你可以下载php手册之后,将 docref_root 指令指向你本地的手册所在的URL目录。
; 你还必须设置 docref_ext 指令来指定文件的扩展名(必须含有'.')。
; [注意]不要在生产服务器上使用这个特性。
 
error_prepend_string =  ;"<span style='color: #ff0000'>"
error_append_string =   ;"</span>"
; 附加在错误信息前后的字符串(一般用于添加颜色)
 
error_log =
; 设置记录错误日志的目标。如果是一个文件(推荐做法),那么必须拥有写权限。
; 设为 syslog 表示记录到系统日志中(NT下的事件日志, Unix下的syslog(3))
; 设为空表示:Apache错误日志(apache2handler)、标准错误(CLI)、不记录(FPM)。
;  FPM/FastCGI 模式的默认值="/var/log/php-fpm/www-error.log"(RHEL/CentOS)
 
syslog.facility = LOG_USER
; 系统日志中的 facility 字段值(产生日志的子系统)。
; 仅在 error_log = syslog 时有意义。
 
syslog.filter = no-ctrl
; 过滤(转义为"\x???")日志消息中的哪些不安全字符:
;    ascii (仅允许 ASCII 字符与 NL 字符)
;    no-ctrl (允许所有非控制字符)
;    all (允许所有字符)
;    raw (允许所有字符,但不在换行符处分割日志消息)
; 仅在 error_log = syslog 时有意义。
 
syslog.ident = php
; 系统日志中的 ident 字段值(日志消息前缀[识别字符串])。
; 仅在 error_log = syslog 时有意义。
 
[FileStream]
 
allow_url_fopen = On
; 是否允许将URL(例如 http:// 或 ftp://)当作文件使用。
 
allow_url_include = Off
; 是否允许 include/require URL(例如 http:// 或 ftp://)。
 
user_agent =
; PHP访问URL时使用的"User-Agent"字符串
 
default_socket_timeout = 60
; socket 流的默认超时秒数
 
from =
; 定义匿名ftp的密码(一个email地址)
 
auto_detect_line_endings = Off
; 是否让PHP自动侦测行结束符(EOL)。
; 如果的你脚本必须处理Macintosh文件,或者你运行在Macintosh上,同时又要处理unix或win32文件,
; 打开这个指令可以让PHP自动侦测EOL,以便 fgets() 和 file() 函数可以正常工作。
; 但同时也会导致在Unix系统下使用回车符(CR)作为项目分隔符的人遭遇不兼容行为。
; 另外,在检测第一行的EOL习惯时会有很小的性能损失。
 
[Filter]
;extension=filter
; 对来源不可靠的数据进行确认和过滤。
 
filter.default = unsafe_raw
; 使用指定的过滤器过滤 $_GET, $_POST, $_COOKIE, $_REQUEST, $_SERVER 数据( unsafe_raw 表示不做任何过滤)。
; 原始数据可以通过 filter_input() 函数访问。
 
filter.default_flags =
; 默认的过滤标志。
 
[OptionsInfo]
 
assert.active = On
; 是否启用 assert() 断言评估。
 
assert.bail = Off
; 是否在发生失败断言时中止脚本的执行
 
assert.warning = On
; 是否为每个失败断言都发出警告
 
assert.callback =
; 发生失败断言时执行的回调函数
 
assert.exception = On
; 是否在断言失败时抛出 AssertionError 异常
; PHP7的默认值=Off
 
enable_dl = On
; 是否允许使用dl()函数。dl()函数仅在将PHP作为apache模块安装时才有效。
; 禁用dl()函数主要是出于安全考虑,因为它可以绕过 open_basedir 指令的限制。
; 这个特性将来肯定会被移除。强烈建议设为 Off 。
 
max_execution_time = 30
; 每个脚本允许的最大执行时间(秒),0 表示没有限制。
; 这个参数有助于阻止劣质脚本无休止的占用服务器资源。
; 该指令仅影响脚本本身的运行时间,任何其它花费在脚本运行之外的时间,
; 例如 system()/sleep()函数、数据库查询、文件上传等,都不包括在内。
; [提示]对于 CLI 模式,此指令被硬编码为"0"(没有限制)
; [提示]不要将此指令设置为大于 Apache 的 Timeout 指令(可能提前中断 PHP 的执行)。
 
max_input_time = -1
; 每个脚本接收输入数据(POST, GET, upload)的最大允许时间(秒)。
; -1 表示不限制。在生产服务器上应该限制为一个明确的值以阻止脚本无限运行。
; 如果用户的网速较慢且需要上传大文件,那么应该设置一个较大的数值。
; [提示]对于 CLI 模式,此指令被硬编码为"-1"(没有限制)
 
max_input_nesting_level = 64
; 输入变量($_GET, $_POST, $_COOKIE ...)的最大嵌套深度
 
max_input_vars = 1000
; 输入变量($_GET, $_POST, $_COOKIE ...)的最大总成员数。
; 此指令减轻了以哈希碰撞来进行拒绝服务攻击的可能性
; 超过限定数量的输入变量将会被截断,并导致 E_WARNING 产生。
 
zend.enable_gc = On
; 是否开启循环引用记数搜集器(垃圾回收)。关闭此指令可能会导致内存泄漏。
 
[Mail]
 
mail.add_x_header = Off
; 是否添加 X-PHP-Originating-Script: 邮件头,以包含"脚本UID + 文件名"信息
 
mail.force_extra_parameters =
; 强制指定 mail() 函数的第5个参数。
 
mail.log =
; 如何记录对 mail() 函数的调用。设为空表示不记录。
; 可以设为一个文件路径表示记录到文件,也可以设为 syslog 表示记录到系统日志。
 
SMTP = "localhost"
; mail() 函数中用来发送邮件的SMTP服务器的主机名称或者IP地址(仅用于Windows)。
 
smtp_port = 25
; SMTP服务器的端口号(仅用于Windows)。
 
sendmail_from =
; 发送邮件时使用的"From:"头中的邮件地址(仅用于win32)。
; 该选项还同时设置了"Return-Path:"头。
 
sendmail_path = /path/to/sendmail
; sendmail 程序的路径(包括命令行参数)。
; configure 脚本会尝试找到该程序并设定为默认值(通常是"/usr/sbin/sendmail -t -i"),但是如果失败的话,可以在这里手动设定。
; 不使用 sendmail 的系统应将此指令设定为 sendmail 替代程序(如果有的话)。
; 该指令在 Windows 平台上的默认值为空。
; 如果在 Windows 平台上设置了此指令,那么 smtp smtp_port sendmail_from 指令都会被忽略并运行此处指定的命令。
 
[Misc]
 
ignore_user_abort = Off
; 是否即使在用户中止请求后也坚持完成整个请求。
; 建议设为 On ,因为长请求可能会导致用户中途中止或浏览器超时。
 
highlight.comment = "#FF8000"
highlight.default = "#0000BB"
highlight.html = "#000000"
highlight.keyword = "#007700"
highlight.string = "#DD0000"
; 语法高亮模式的色彩(通常用于显示 .phps 文件)。
; 只要能被 <span style="color: ???????"> 接受,就能正常工作。
 
browscap =  ;"c:/windows/system32/inetsrv/browscap.ini"
; 浏览器功能文件的位置和文件名(只有PWS和IIS才需要这个设置)。
 
[OutputControl]
 
output_buffering = 0
; 输出缓冲区大小(字节)。建议值为4096[还可以通过 ob_start() 函数控制]。
; 输出缓冲允许你甚至在输出正文内容之后再发送HTTP头(包括cookies)。
; 设置输出缓冲有时可以减少网络数据包的发送(提升网络性能)。
; 这个参数的实际收益很大程度上取决于你使用的是什么Web服务器以及什么样的脚本。
; [提示]对于 CLI 模式,此指令被硬编码为"0"(禁用输出缓冲)
 
output_handler =
; 将所有脚本的输出重定向到一个输出处理函数。
; 例如,设为"mb_output_handler"重定向到 mb_output_handler() 函数时,字符编码将被透明地转换为指定的编码。
; 一旦在这里指定了输出处理程序,输出缓冲将被自动打开(缓冲区大小=无限)。
; 注意0: 此处仅能使用PHP内置函数,自定义函数应在脚本中使用 ob_start() 函数指定。
; 注意1: 可移植脚本不能依赖该指令,而应使用 ob_start() 函数明确指定输出处理函数。
;        不要轻易使用这个指令,否则可能会导致某些你不熟悉的脚本出错。
; 注意2: 不能同时使用"mb_output_handler"和"ob_iconv_handler"两个输出处理函数。
;        不能同时使用"ob_gzhandler"输出处理函数和"zlib.output_compression"指令。
; 注意3: 如果"zlib.output_compression = On",那么该指令必须为空(代之以"zlib.output_handler")。
 
implicit_flush = Off
; 是否要求PHP输出层在每个输出块之后自动刷写数据。
; 这等效于在每个 print()、echo()、HTML块 之后自动调用 flush() 函数。
; 打开这个选项对程序执行的性能有严重影响,只推荐在调试时使用。
; [提示]对于 CLI 模式,此指令被硬编码为"On"(强制自动刷写)
 
[PCRE]
 
pcre.backtrack_limit = 1000000
; 最大回溯(backtracking)深度。
 
pcre.recursion_limit = 100000
; 最大递归(recursion)深度。如果你将该值设的非常高,将可能耗尽进程的栈空间,导致PHP崩溃。
 
pcre.jit = 1
; 是否开启PCRE库的 JIT(just-in-time) 编译。
 
[Phar]
;extension=phar
; 将PHP应用/类库打包以简化部署(以只读方式供他人使用)
 
phar.readonly = On
; 是否开启 Phar 只读模式。务必在生产环境开启此指令,否则会留下巨大的安全漏洞。
 
phar.require_hash = On
; 是否验证所有 Phar 归档的签名(防止归档内容被篡改)。建议开启以增强安全性。
 
phar.cache_list =
; 要在服务器启动阶段预解析的 Phar 归档列表(用于提升性能)。
 
[Session]
 
session.save_handler = files
; 存储和检索会话数据的存储处理器名字。默认为文件("files")。
; 设为"user"表示可以使用 session_set_save_handler() 注册自定义的存储处理器。
; 扩展模块可以注册新的存储处理器。所有已注册的存储处理器都可以通过 phpinfo() 查看。
 
session.save_path =
; 传递给 save_handler 的参数。对于 files 处理器表示存储会话数据文件的目录(默认为系统临时目录)。
; 可以使用"N;[MODE;]/path"模式定义该目录,可选的[MODE;]为8进制数表示的数据文件访问权限(默认为"600"),
; 整数N表示使用N层深度的子目录(而不是将所有数据文件都保存在同一个目录下),以提高大量会话的性能。
; 注意: (1)"N;[MODE;]/path"两边的双引号不能省略(因为";"是注释符)。(2)[MODE;]并不会改写进程的umask。
;       (3)PHP不会自动创建这些目录结构(可使用 ext/session 目录下的 mod_files.sh 脚本)。
;       (4)如果该目录(比如"/tmp")可以被不安全的用户读取或检索,那么将会带来安全漏洞(泄漏会话ID甚至会话数据)。
;       (5)当N>0时自动垃圾回收将会失效(详见 session.gc_* 指令)。
;       (6)仅在确实拥有海量会话时才可能需要设置N>2(每一层有64个子目录,N=3表示要创建64*64*64个子目录)。
;       (7)建议针对每个不同的虚拟主机分别设置各自不同的会话存储目录。
; FPM/FastCGI 模式的默认值="/var/lib/php/session"(RHEL/CentOS)
 
session.name = PHPSESSID
; 用在cookie里的会话ID标识名,只能包含字母和数字。
 
session.auto_start = Off
; 是否在客户访问任何页面时都自动初始化会话引擎。
; 因为类定义必须在会话启动之前被载入,所以打开这个选项之后就不能在会话中存放对象了。
 
session.serialize_handler = php
; 用来序列化/解序列化数据的处理器,可以使用"php","php_binary","php_serialize"。
; 推荐使用新式的"php_serialize"代替默认的老式"php"以避免某些限制和缺陷。
; [注意]一旦启用了WDDX支持,将只能使用"wddx"。
 
session.gc_probability = 1
session.gc_divisor = 100
; 定义在每次初始化会话时,启动垃圾回收程序的概率。
; 这个收集概率计算公式如下:session.gc_probability/session.gc_divisor
; 对会话页面访问越频繁,概率就应当越小。建议设为1/(1000~5000)。
 
session.gc_maxlifetime = 1440
; 超过此指令所指的秒数后,保存的数据将被视为'垃圾'并由垃圾回收程序清理。
; 判断标准是最后访问数据的时间(对于FAT文件系统是最后刷新数据的时间)。
; 如果多个脚本共享同一个 session.save_path 目录但 session.gc_maxlifetime 不同,
; 那么将以所有 session.gc_maxlifetime 指令中的最小值为准。
; 如果使用多层子目录来存储数据文件,垃圾回收程序不会自动启动。
; 你必须使用一个你自己编写的脚本、cron项或者其他办法来执行垃圾搜集。
; 比如,下面的脚本相当于设置了"session.gc_maxlifetime=1440" (24分钟):
; cd /path/to/sessions; find -cmin +24 | xargs rm
 
session.referer_check =
; 如果请求头中的"Referer:"字段不包含此处指定的字符串则会话ID将被视为无效。
; 注意:如果请求头中根本不存在"Referer:"字段的话,会话ID将仍将被视为有效。
; 默认为空,即不做检查(全部视为有效)。
 
session.use_strict_mode = 0
; 是否使用严格会话ID模式(拒绝未初始化的会话ID)。开启严格模式可以保护服务器免遭会话固定攻击。
; "严格模式"的含义是:如果浏览器发送了一个未初始化的会话ID,那么服务器将会回应一个新的已初始化的会话ID。
; 默认值"0"表示禁用严格模式。建议设为"1"开启此特性。
 
session.use_cookies = 1
; 是否使用cookie在客户端保存会话ID("1"表示启用、"0"表示禁用)。
 
session.use_only_cookies = 1
; 是否仅使用cookie在客户端保存会话ID("1"表示启用、"0"表示禁用)。
; 启用此特性可以避免使用URL传递会话ID带来的安全问题。
; 建议开启此选项以增强安全性。
 
session.cookie_lifetime = 0
; 传递会话ID的Cookie有效期(秒),"0"表示仅在浏览器打开期间有效。
; [提示]如果你不能保证服务器时间和客户端时间严格一致请不要改变此默认值!
 
session.cookie_path = /
; 传递会话ID的Cookie作用路径。
 
session.cookie_domain =
; 传递会话ID的Cookie的作用域(域名)。
; 默认值空表示根据cookie规范生成的主机名。
 
session.cookie_secure = 0
; 是否仅仅通过安全连接(https)发送cookie("1"表示启用、"0"表示禁用)。
 
session.cookie_httponly = 0
; 是否在cookie中添加httpOnly标志(仅允许HTTP协议访问)("1"表示启用、"0"表示禁用)。
; 启用此特性将导致客户端脚本(JavaScript等)无法访问该cookie。
; 打开该指令可以有效预防通过XSS攻击劫持会话ID。
 
session.cookie_samesite =
; 向cookie中添加SameSite属性的值("Strict", "Lax", "None" 之一[务必保留引号]),
; 允许服务器向客户端声明不应将此cookie用于跨站请求,这有助于预防跨站请求伪造(Cross-Site Request Forgery)。
; 并不是所有浏览器都支持此特性。设为空表示不随cookie一起发送SameSite属性。
; "Strict"表示同时禁止 POST 与 GET 跨站发送cookie
; "Lax"表示禁止 POST 跨站发送cookie 、但允许 GET 跨站发送cookie
 
session.cache_limiter = nocache
; 指定会话页面的缓存控制策略(nocache|private|private_no_expire|public)。
; nocache 表示禁止客户端与代理服务器缓存; public 表示允许客户端与代理服务器缓存;
; private 表示允许客户端缓存但禁止代理服务器缓存;
; private_no_expire 与 private 相同,但不发送 "Expire:" 响应头(解决 Mozilla 等浏览器可能无法正确处理 Expire 响应头的BUG)。
; 设为空表示不发送任何与缓存策略相关的响应头。详见  session_cache_limiter() 函数。
 
session.cache_expire = 180
; 指定会话页面在客户端缓存中的有效期限(分钟)。当 session.cache_limiter = nocache 时,此设置无意义。
 
session.use_trans_sid = 0
; 是否使用明码在URL中显示SID(会话ID)("1"表示启用、"0"表示禁用)。
; 基于URL的会话管理总是比基于Cookie的会话管理有更多的风险,应当禁用。
 
session.trans_sid_tags = "a=href,area=href,frame=src,form="
; 指定重写哪些HTML标签来包含SID(仅在 session.use_trans_sid = On 时有意义)。
; <form> 标签比较特殊,如果你包含它,URL重写器将添加一个隐藏的 <input> 字段,
; 它包含了本应当额外追加到URL上的信息(<input hidden="session_id" name="session_name">)。
; <form> 标签的 action 属性中的URL不会被修改(除非明确指定了 action 属性)。
; 注意:所有合法的项都需要一个等号(即使后面没有值)。
 
session.trans_sid_hosts =
; 默认并不重写绝对URL,必须在运行时使用 ini_set() 指定目标域名才可以重写绝对URL。
; <form> 标签比较特殊,PHP 在检查 action 属性的URL时,会无视 session.trans_sid_tags 指令。
; 如果未指定任何域名,那么将会把 $_SERVER['HTTP_HOST'] 作为允许的域名。
; 可以使用逗号分隔一组域名,例如: php.net,www.php.net,wiki.php.net (禁止在其中包含空格)
 
session.sid_length = 32
; 会话ID字符串的长度(22~256)。建议最少使用32个字符长度(越长越安全)。
 
session.sid_bits_per_character = 4
; 定义会话ID中每个字符容纳几个哈希位(数字越大越安全)。取值范围:
;   4  (4 bits: 0-9, a-f)
;   5  (5 bits: 0-9, a-v)(推荐值)
;   6  (6 bits: 0-9, a-z, A-Z, "-", ",")
 
url_rewriter.tags = "form="
; 实时URL重写(需要开启 output_buffering 支持)的目标标签。
; [注意]此指令的 session 功能已经被 session.trans_sid_tags 指令取代。
 
url_rewriter.hosts =
; 实时URL重写(需要开启 output_buffering 支持)的目标主机。
; 虽然此指令属于PHP核心部分,但是却用于Session模块的配置。
; 详见 session.trans_sid_hosts 指令。
 
session.upload_progress.enabled = On
; 是否利用 $_SESSION 数组跟踪上传进度。
 
session.upload_progress.cleanup = On
; 是否在读取完成全部POST数据之后(上传完成之后)立即清除上传进度信息。
; 强烈建议保持默认值 On
 
session.upload_progress.prefix = upload_progress_
; 在 $_SESSION 数组中用于跟踪上传进度的键名称前缀。
; 此前缀将会和 $_POST[ini_get("session.upload_progress.name")] 拼接在一起组成键名称。
 
session.upload_progress.name = PHP_SESSION_UPLOAD_PROGRESS
; 在 $_SESSION 数组中用于跟踪上传进度的键名称后缀。
; 如果 $_POST[ini_get("session.upload_progress.name")] 不存在,那么将不会跟踪上传进度。
 
session.upload_progress.freq = "1%"
; 以什么样的步长更新上传进度,可以设为百分比或字节数。
 
session.upload_progress.min_freq = 1
; 更新上传进度的最小时间间隔(秒)。
 
session.lazy_write = On
; 是否仅在会话数据发生变化时才向磁盘写入会话数据。
 
[Tokenizer]
;extension=tokenizer
; PHP源代码语法解析器
 
[Variable]
 
unserialize_callback_func =
; 如果解序列化处理器需要实例化一个未定义的类,
; 指定的回调函数将以该未定义类的名字作为参数被 unserialize() 调用,
; 以免得到不完整的"__PHP_Incomplete_Class"对象。
; 如果没有指定回调函数,或指定的回调函数不包含(或实现)那个未定义的类,将会显示警告信息。
; 所以仅在确实需要实现这样的回调函数时才设置该指令。
; 若要禁止这个特性,只需置空即可。
 
unserialize_max_depth = 4096
; 未序列化结构的默认最大深度限制。设置得太深可能会导致在解序列化期间堆栈溢出。
; 设为 0 表示没有深度限制。此设置可以在调用 unserialize() 时被 max_depth 参数覆盖。
 
;;;;;;;;;;;;;;;;;;;;;
;;    绑定扩展    ;;
;;;;;;;;;;;;;;;;;;;;;
 
;extension=bcmath
; 任意精度数学计算
 
;extension=calendar
; 在不同历法间进行转换
 
;extension=ctype
; 高效检测字符串是否仅包含指定类型的字符
 
;extension=mbstring
; 处理多字节字符串
 
;extension=exif
; 读取图片文件中的元数据
; exif 模块依赖于 mbstring 模块,必须在 mbstring 模块之后加载。
 
;extension=fileinfo
; 猜测文件的内容类型及编码
 
;extension=ftp
; FTP客户端
 
;extension=iconv
; 字符集转换
 
;extension=gd
; 图像处理
 
;extension=intl
; 国际化与本地化
 
;extension=shmop
; 操作 Unix 共享内存
 
;extension=sockets
; 网络套接字
 
;extension=sqlite3
; SQLite v3 数据库
 
;extension=zlib
; gzip 压缩与解压
 
;zend_extension=opcache
; 将预编译的字节码存储到共享内存中来提升性能(省去每次加载和解析PHP脚本的开销)
 
[BCMath]
 
bcmath.scale = 0
; 用于所有bcmath函数的默认 scale 参数的值(小数点后的小数保留位数)。
 
[Exif]
 
exif.encode_unicode = ISO-8859-15
; 编码UNICODE用户注释所使用的字符编码。默认值 ISO-8859-15 仅可用于大多数非亚洲国家。
; 在开启了 mbstring 模块的情况下,可以设为一个 mbstring 支持的字符编码,
; 也可以设为空表示使用 mbstring.internal_encoding 指令的值。
 
exif.decode_unicode_intel = UCS-2LE
exif.decode_unicode_motorola = UCS-2BE
; 分别按照小端序(intel)/大端序(motorola)设置解码UNICODE用户注释所使用的字符编码。
; 在开启了 mbstring 模块的情况下,可以设为一个 mbstring 支持的字符编码列表。不能设置为空。
 
exif.encode_jis =
; 编码JIS用户注释所使用的字符编码。
; 默认为空,表示使用 mbstring.internal_encoding 指令的值。
 
exif.decode_jis_intel = JIS
exif.decode_jis_motorola = JIS
; 分别按照小端序(intel)/大端序(motorola)设置解码JIS用户注释所使用的字符编码。
; 在开启了 mbstring 模块的情况下,可以设为一个 mbstring 支持的字符编码列表。不能设置为空。
 
[iconv]
 
iconv.input_encoding =
; 反对使用该指令(已在 PHP 5.6.0 中废弃)(应使用 input_encoding 指令)
 
iconv.output_encoding =
; 反对使用该指令(已在 PHP 5.6.0 中废弃)(应使用 output_encoding 指令)
 
iconv.internal_encoding =
; 反对使用该指令(已在 PHP 5.6.0 中废弃)(应使用 internal_encoding 指令)
 
[GD]
 
gd.jpeg_ignore_warning = 1
; 是否忽略jpeg解码器的警告信息(比如无法识别图片格式)("1"表示启用、"0"表示禁用)。
 
[intl]
 
intl.default_locale =
; intl 函数(方法)的默认 ICU locale 值(不是操作系统的 locale)。
; 默认值为空,表示使用 ICU 的默认 locale 值。
; 因为一旦在 php.ini 中设置了此指令,就不能再重置为默认值,所以建议保持默认的空值,不要去明确设置它。
 
intl.error_level = 0
; intl 函数(方法)的错误消息等级。取值范围和 error_reporting 指令一致(例如 E_WARNING)。
; 默认值 0 表示禁止一切错误消息。此指令不会影响 intl 函数的返回值。
; 选中 E_ERROR 将会导致在 intl 函数(方法)出错时中止整个脚本的执行。
 
intl.use_exceptions = Off
; 是否在 intl 函数(方法)出错时抛出 IntlException 异常。
; 此功能可以和 intl.error_level 同时共存。
 
[mbstring]
 
mbstring.language = neutral
; 默认的NLS(本地语言设置),默认值"neutral"(UTF-8)表示中立,相当于Unicode(包含全部语言)。
; 建议不要修改此设置(除非不想将UTF-8用作内部编码)。
; 该指令必须放置在 mbstring.internal_encoding 指令之前。
 
mbstring.encoding_translation = Off
; 是否对进入的HTTP请求进行透明的编码转换,
; 也就是自动检测输入字符的编码并将其透明的转化为内部编码(default_charset)。
; 可移植的库或者程序千万不要依赖于自动编码转换。
 
mbstring.http_input =
mbstring.http_output =
mbstring.internal_encoding =
; 反对使用这些指令(已在 PHP 5.6.0 中废弃)(应使用 default_charset 指令)
 
mbstring.detect_order =
; 字符编码的默认检测顺序,接受一个逗号分隔的字符编码列表。
; 默认值取决于 mbstring.language 指令的值(多数是以"ASCII,UTF-8"开头的列表)。
; 设为"pass"表示不对字符编码进行任何转换。
; 对于简体中文为主的环境,可设为 "ASCII,UTF-8,EUC-CN,CP936,GB18030"。
; 参见 mb_detect_order() 函数。
 
mbstring.substitute_character =
; 为无效编码的字符定义替代字符。
; 设为一个整数表示替换为该整数对应的Unicode字符,设为空表示直接删除无效编码的字符,
; 设为一个字符串表示替换为该字符串。建议设为 9633 (豆腐块字符"□")。
 
mbstring.http_output_conv_mimetypes = "^(text/|application/xhtml\+xml)"
; 尚无文档
 
mbstring.strict_detection = Off
; 是否使用严谨的编码检测(因为浏览器可能以不同于页面的字符编码来提交表单)。
; 尽管浏览器能够根据HTML页面合理猜测字符编码,但明确设置 default_charset 指令效果更佳。
; 参见 mb_http_input() 函数(检测浏览器使用的字符编码)。
 
mbstring.regex_retry_limit = 1000000
mbstring.regex_stack_limit = 100000
; 尚无文档
 
[OPcache]
 
opcache.enable = On
; 是否启用操作码缓存。
; 只能通过 ini_set() 函数禁用此功能,不能通过 ini_set() 函数启用此功能。
 
opcache.enable_cli = Off
; 是否为CLI版本启用操作码缓存。仅用于调试目的。
 
opcache.memory_consumption = 128
; 最大允许 OPcache 占用的共享内存数量(以兆字节为单位[MB])。必须设为一个大于等于 8 的整数。
 
opcache.interned_strings_buffer = 8
; 用于存储预留字符串的内存大小(以兆字节为单位[MB])。必须设为一个正整数。
 
opcache.max_accelerated_files = 10000
; 允许在 OPcache 哈希表中缓存的最大文件数量(取值范围=200~1000000)。
; 实际取值范围是在质数集合{223,463,983,1979,3907,7963,16229,32531,65407,130987,262237,524521,1048793}
; 中找到的第一个大于等于设置值的质数,超出此范围的值将被自动修正到允许的范围内。
 
opcache.max_wasted_percentage = 5
; 最大允许浪费的内存百分比上限(取值范围=1~50)。一旦达到此上限,将会重置 OPcache 。
 
opcache.use_cwd = On
; On 表示以"脚本文件名+脚本的工作目录"作为 OPcache 哈希表的键。
; Off 表示仅以"脚本文件名"作为 OPcache 哈希表的键。
; 设为 On 可以避免同名脚本冲突(比较安全)。
; 设为 Off 可以提高 OPcache 的性能(可能会导致应用崩溃)。
 
opcache.validate_timestamps = On
; 是否每隔 opcache.revalidate_freq 秒检查一次脚本更新。
; 如果禁用此选项,那么必须使用 opcache_reset() 或 opcache_invalidate() 函数手动重置 OPcache ,
; 或者通过重启服务来使文件系统更改生效。
 
opcache.revalidate_freq = 2
; 检查脚本更新的间隔秒数。设为 0 表示每次请求都检查。
; 仅在 opcache.validate_timestamps = On 时有意义。
 
opcache.revalidate_path = Off
; 是否检查 include_path 中的脚本路径。
; 设为 Off 表示重复使用 include_path 内的缓存文件(无法找到 include_path 之外的同名文件)。
 
opcache.save_comments = On
; 是否缓存脚本中的注释(舍弃注释可以减小缓存占用)。
; 设为 Off 可能会导致某些依赖注释的应用或框架无法正常工作(例如 Doctrine, Zend Framework 2, PHPUnit)。
 
opcache.enable_file_override = Off
; 是否优先使用 OPcache 检查文件状态(例如 file_exists(), is_file(), is_readable() ...)。
; 设为 On 可以提升检查速度,但在 opcache.validate_timestamps = Off 时可能会返回老旧的过期数据。
 
opcache.optimization_level = 0x7FFEBFFF
; 控制 OPcache 优化级别的二进制位掩码。
 
opcache.dups_fix = Off
; 仅用于解决 "Cannot redeclare class" 错误。
 
opcache.blacklist_filename =
; OPcache 黑名单(绝对路径)。黑名单是一个纯文本文件,
; 其中的每一行都是一个绝对路径(可以包含通配符、也可以只是路径前缀),
; 表示禁止缓存与此路径匹配的文件。以分号(;)开头的行将被视为注释而忽略。
; 下面是一个简单的黑名单示例:
;    ;匹配一个特定的文件
;    /var/www/broken.php
;    ;匹配 /var/www/ 目录下所有以 x 开头的文件
;    /var/www/x
;    ;通配符匹配
;    /var/www/*-broken.php
 
opcache.max_file_size = 0
; 允许缓存的最大文件尺寸(字节)。"0"表示不限。
 
opcache.consistency_checks = 0
; 每隔多少次请求检查一次缓存校验和。"0"表示不检查。
; 因为对性能有较大影响,所以仅应该用于调试目的,切勿用于生产服务器。
 
opcache.force_restart_timeout = 180
; OPcache 处于闲置状态超过多少秒之后将会被重启(闲置时间过长意味着 OPcache 可能有故障)。
; 如果 opcache.log_verbosity_level ≥ 2 ,那么当重启发生时将会在日志中记录一条警告信息。
 
opcache.error_log =
; OPcache 错误日志的记录目标(通常是一个文件路径)。
; 设为空等价于"stderr"(通常表示记录到Web服务器的错误日志中)。
 
opcache.log_verbosity_level = 1
; OPcache 日志级别: (0)致命 (1)错误 (2)警告 (3)信息 (4)调试
 
opcache.preferred_memory_model =
; OPcache 首选的内存模型。建议设为空(自动选择)。
; 取值范围: mmap, shm, posix, win32
 
opcache.protect_memory = Off
; 是否保护共享内存(避免执行脚本时发生非预期的写入)。仅用于内部调试。
 
opcache.mmap_base =
; 共享内存段的基地址(仅适用 Windows 平台)。所有PHP进程都将共享内存映射到相同的地址空间。
; 此指令用于手动修正"Unable to reattach to base address"错误。
 
opcache.restrict_api =
; 仅允许指定路径下的PHP脚本调用 OPcache API 函数。设为空表示不做限制。
 
opcache.file_update_protection = 2
; 禁止缓存最近几秒内(默认2秒)被修改的文件,以避免缓存不完整的文件(可能尚未完全落盘)。
; 如果文件系统本身能够确保文件更新是原子操作,那么可以设为 0 以提高站点性能。
 
opcache.huge_code_pages = Off
; 是否将PHP代码(文本段)拷贝到大页(HUGE PAGE)中。
; 使用大页可以提高性能,但这需要CPU与操作系统内核的支持以及额外的系统配置。
 
opcache.lockfile_path = /tmp
; 用来存储共享锁文件的绝对路径(仅适用 Unix 平台)。
 
opcache.opt_debug_level = 0
; 为了对不同阶段的优化情况进行调试,转储生成的操作码。"0"表示不转储。
; 设为 0x10000 表示输出优化前的操作码,设为 0x20000 表示输出优化后的操作码。
 
opcache.file_cache =
; 设置基于磁盘文件系统的二级缓存目录,设为空表示禁用二级缓存。
; 启用二级缓存可以在共享内存已满、服务器重启、重置共享内存时提高性能。
 
opcache.file_cache_only = Off
; 是否仅使用基于磁盘文件系统的二级缓存(不使用共享内存)。
 
opcache.file_cache_consistency_checks = On
; 当从基于磁盘文件系统的二级缓存中加载脚本时,是否检查文件的校验和。
 
opcache.file_cache_fallback = On
; 在进程无法附加到共享内存的时候,是否尝试使用基于磁盘文件系统的二级缓存(相当于隐式开启 opcache.file_cache_only )。
; 仅在已设置了 opcache.file_cache = 的情况下有意义。
; 注意:(1)仅适用于 Windows 平台;(2)禁用它可能会导致进程无法启动。
 
opcache.validate_permission = Off
; 是否验证当前用户对缓存文件的访问权限。
 
opcache.validate_root = Off
; 是否检查 chroot 环境中的名字冲突。
; 为了防止进程访问到 chroot 环境之外的文件,应该在 chroot 环境中启用此选项。
 
opcache.preload =
; 指定在服务启动时预先编译并缓存的PHP脚本(可以在脚本中通过 include 或 opcache_compile_file() 进一步预加载其他文件)。
; 所有被包含的函数、类等实体,在服务启动时就会被加载和缓存(开箱可用)。
; 此特性不支持 Windows 平台。
 
opcache.preload_user =
; 执行预加载操作的用户名(考虑到安全因素,禁止以 root 用户预加载代码)。
; 这些预加载的代码也只能以此用户身份运行。
 
opcache.record_warnings = Off
; On 表示脚本在每一次被 include 时都会记录与重放编译器警告。
; Off 表示脚本仅在第一次被缓存时才会发出编译器警告。
 
opcache.cache_id =
; 为此 OPcache 实例指定一个ID值(仅适用于 Windows 平台)。
; 所有具有相同 OPcache ID 与用户名的PHP进程共享同一个 OPcache 实例。
; 此指令的目的在于允许同一个用户使用多个 OPcache 实例。
 
opcache.jit = tracing
opcache.jit_bisect_limit = 0
opcache.jit_blacklist_root_trace = 16
opcache.jit_blacklist_side_trace = 8
opcache.jit_buffer_size = 0
opcache.jit_debug = 0
opcache.jit_hot_func = 127
opcache.jit_hot_loop = 64
opcache.jit_hot_return = 8
opcache.jit_hot_side_exit = 8
opcache.jit_max_exit_counters = 8192
opcache.jit_max_loops_unroll = 8
opcache.jit_max_polymorphic_calls = 2
opcache.jit_max_recursive_calls = 2
opcache.jit_max_recursive_returns = 2
opcache.jit_max_root_traces = 1024
opcache.jit_max_side_traces = 128
opcache.jit_prof_threshold = 0.005
; 尚无文档(PHP8新增)
 
[SQLite3]
 
sqlite3.extension_dir =
; 存放 SQLite 扩展的目录。
 
sqlite3.defensive = On
; On 表示禁用SQL语言中能够损坏数据库文件的功能(禁止直接写入 schema, shadow, sqlite_dbpage 表)。
 
[Zlib]
 
zlib.output_compression = 0
; 压缩脚本输出结果的压缩缓冲区大小("0"表示关闭此特性)。
; 当浏览器发送"Accept-Encoding: gzip(deflate)"请求头时,
; "Content-Encoding: gzip(deflate)"和"Vary: Accept-Encoding"头将加入到应答头当中。若想得到更好的压缩效果,
; 应当指定一个较大的压缩缓冲区,同时开启 output_buffering 缓冲区(最佳值应略大于压缩缓冲区的压缩结果大小)。
; 如果启用了zlib输出压缩,那么必须使用 zlib.output_handler 代替 output_handler 指令(后者必须设为空)。
 
zlib.output_compression_level = -1
; 压缩级别,可用值为 0~9 ,0表示不压缩,值越高效果越好,但CPU占用越多。
; 默认值 -1 表示使用zlib内部的默认值(6)。
 
zlib.output_handler =
; 与 zlib.output_compression 指令配合使用的输出处理器。
; 可以使用的处理器有"zlib.inflate"(解压)或"zlib.deflate"(压缩)。
; 如果启用该指令则必须将 output_handler 指令设为空。
 
;;;;;;;;;;;;;;;;;;;;;
;;    外部扩展    ;;
;;;;;;;;;;;;;;;;;;;;;
 
;extension=bz2
; Bzip2 压缩与解压
 
;extension=curl
; http, ftp, telnet, ldap 客户端
 
;extension=dom
; 通过 DOM(Document Object Model) API 操作 XML 文档
 
;extension=gettext
; 通过 NLS(Native Language Support) API 国际化 PHP 程序
 
;extension=imap
; 邮件客户端(IMAP, POP3)
 
;extension=ldap
; LDAP(Lightweight Directory Access Protocol) 客户端
 
;extension=mysqlnd
;extension=mysqli
; MySQL 客户端(先加载 mysqlnd 后加载 mysqli )
 
;extension=openssl
; OpenSSL(加密、解密、签名、证书)
 
;extension=pgsql
; PostgreSQL 客户端
 
;extension=simplexml
; 一个简单易用的XML工具集
 
;extension=snmp
; 简单网络管理协议(Simple Network Management Protocol)
 
;extension=soap
; 简单对象访问协议(Simple Object Access Protocol)
 
;extension=xml
; XML 解析器
 
;extension=xmlreader
;extension=xmlwriter
; XML 读写
 
;extension=zip
; ZIP 压缩与解压
 
[cURL]
 
curl.cainfo =
; CURLOPT_CAINFO 选项的一个默认值。必须是一个绝对路径。
 
[IMAP]
 
imap.enable_insecure_rsh = Off
; 是否启用 rsh/ssh 登录支持。开启此选项会带来安全隐患。
 
[LDAP]
 
ldap.max_links = -1
; 每个进程允许开启的最大连接数。 -1 表示无限。
 
[MySQLnd]
 
mysqlnd.collect_statistics = On
; 是否收集各种客户端统计信息(可用于调校或监视)。
; 可以通过 mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_stats() 访问这些统计信息。
; 也可以在 phpinfo() 页面上查看这些统计信息。
; 是否收集与内存用量相关的统计信息由 mysqlnd.collect_memory_statistics 指令控制。
 
mysqlnd.collect_memory_statistics = Off
; 是否收集与内存用量相关的客户端统计信息(可用于调校或监视)。
; 可以通过 mysqli_get_client_stats(), mysqli_get_connection_stats(), mysqli_get_cache_stats() 访问这些统计信息。
; 也可以在 phpinfo() 页面上查看这些统计信息。
 
mysqlnd.debug =
; 此指令仅在以调试模式编译PHP时才有意义。
 
mysqlnd.log_mask = 0
; 指示记录哪些SQL查询。必须是下面这些表示查询类别的数字之和("0"表示不记录):
; SERVER_STATUS_IN_TRANS=1, SERVER_STATUS_AUTOCOMMIT=2, SERVER_MORE_RESULTS_EXISTS=8, SERVER_QUERY_NO_GOOD_INDEX_USED=16,
; SERVER_QUERY_NO_INDEX_USED=32, SERVER_STATUS_CURSOR_EXISTS=64, SERVER_STATUS_LAST_ROW_SENT=128,
; SERVER_STATUS_DB_DROPPED=256, SERVER_STATUS_NO_BACKSLASH_ESCAPES=512, SERVER_QUERY_WAS_SLOW=1024
 
mysqlnd.mempool_default_size = 16000
; 存放结果集的默认内存池大小(字节)。
 
mysqlnd.net_read_timeout = 86400
; 没有充分理解的情况下不要修改此指令的默认值。
 
mysqlnd.net_cmd_buffer_size = 4096
; 为每个连接预分配的命令缓冲区的大小(字节)。必须设为一个不小于 4096 的值。
; 建议设为一个较大的值(比如 8192 或 16384 或 32768)以提升性能。
 
mysqlnd.net_read_buffer_size = 32768
; 为每个连接预分配的读取缓冲区的大小(字节)。必须设为一个不小于 32768 的值。
; 建议设为一个较大的值(比如 65536 或 131072 或 262144)以提升性能。
 
mysqlnd.sha256_server_public_key =
; 用于 SHA-256 认证插件的 MySQL 服务器 RSA 公钥文件。
; 设置此指令之后,客户端就可以无需再设置 MySQL 服务器的 RSA 公钥,
; 否则客户端必须在运行时使用 mysqli_options() 设置 MySQL 服务器的 RSA 公钥。
; 如果客户端没有指定任何 RSA 公钥,那么将直接使用 SHA-256 认证插件接收到的服务器 RSA 公钥(不做有效性验证)。
 
mysqlnd.trace_alloc =
; 尚无文档
 
mysqlnd.fetch_data_copy = Off
; 是否强制将结果集从内部结果集缓冲区复制到PHP变量中(而不是使用默认的引用和写时复制逻辑)。
; 复制结果集(而不是让PHP变量应用它们)可以尽早释放先前为PHP变量分配的内存(减少内存占用),但会降低运行速度。
; 如果使用 PDO_MySQL ,切勿开启此特性。
 
[MySQLi]
 
mysqli.allow_local_infile = Off
; 是否允许使用 LOAD DATA 语句加载(PHP角度看的)本地文件。
 
mysqli.allow_persistent = On
; 是否允许创建持久连接。
 
mysqli.max_persistent = -1
; 允许创建的最大持久连接数。设为 -1 表示无限。
 
mysqli.max_links = -1
; 允许创建的最大连接数(持久和非持久)。设为 -1 表示无限。
 
mysqli.default_port = 3306
; 用于连接MySQL服务器的默认TCP端口号($port)。如果没有在这里指定默认值,将按如下顺序寻找:
; (1) $MYSQL_TCP_PORT 环境变量
; (2) /etc/services 文件中的 mysql-tcp 项(unix)
; (3) 编译时指定的 MYSQL_PORT 常量
; 注意:在 Windows 平台上只使用 MYSQL_PORT 常量。
 
mysqli.default_socket = /var/lib/mysql/mysql.sock
; 连接到本机 MySQL 服务器时所使用的默认套接字($socket)。
; 若未指定则使用 MySQL 内置的默认值。
 
mysqli.default_host =
; 连接到 MySQL 数据库时使用的默认主机名($host)。
 
mysqli.default_user =
; 连接到 MySQL 数据库时使用的默认用户名($username)。
 
mysqli.default_pw =
; 连接到 MySQL 数据库时使用的默认密码($passwd)。在配置文件中保存密码是个坏主意,
; 不但程序可以通过 echo get_cfg_var("mysqli.default_pw") 来显示密码,
; 而且任何对该配置文件有读权限的用户也能看到密码。
 
mysqli.reconnect = Off
; 是否允许在连接丢失时自动重新连接。
 
mysqli.rollback_on_cached_plink = Off
; On 表示在断开持久连接时,首先回滚此连接上所有已挂起的事务,然后再将此连接放回永久连接池。
; Off 表示只有在重用连接或实际关闭连接时才会回滚挂起的事务。
; 因为 libmysqlclient 与 streams 对 MYSQL_OPT_READ_TIMEOUT 有着不同的理解,
; 所以用户不能通过API调用或运行时配置来设置 MYSQL_OPT_READ_TIMEOUT 。
 
[OpenSSL]
 
openssl.cafile =
; 本地文件系统上的CA(证书颁发机构)文件的路径,用于校验对端SSL证书的有效性。
; 设为空表示使用操作系统的管理的CA证书。
 
openssl.capath =
; 保存经过哈希处理的CA(证书颁发机构)文件的目录。
; 仅在 openssl.cafile 为空或指定的CA文件不存在时有意义。
; 设为空表示使用操作系统的管理的CA证书。
 
[PostgresSQL]
 
pgsql.allow_persistent = On
; 是否允许持久连接
 
pgsql.max_persistent = -1
; 每个进程中允许持有的最大持久连接数。-1 代表无限制。
 
pgsql.max_links = -1
; 每个进程允许持有的最大连接数(持久和非持久)。-1 代表无限制。
 
pgsql.auto_reset_persistent = Off
; 是否自动复位在 pg_pconnect() 上中断了的持久连接。检测需要一些额外开销。
 
pgsql.ignore_notice = Off
; 是否忽略 PostgreSQL 后端的提醒消息。
; 记录后端的提醒消息需要一些很小的额外开销。
 
pgsql.log_notice = Off
; 是否在日志中记录 PostgreSQL 后端的提醒消息。
; 仅在 pgsql.ignore_notice = Off 时有意义。
 
[SOAP]
 
soap.wsdl_cache_enabled = On
; 是否开启 WSDL 缓存
 
soap.wsdl_cache_dir = /tmp
; WSDL 缓存目录
; FPM/FastCGI 模式的默认值="/var/lib/php/wsdlcache"(RHEL/CentOS)
 
soap.wsdl_cache_ttl = 86400
; WSDL 缓存有效期(秒)
 
soap.wsdl_cache = 1
; WSDL 缓存类型:
; WSDL_CACHE_NONE (0), WSDL_CACHE_DISK (1), WSDL_CACHE_MEMORY (2), WSDL_CACHE_BOTH (3)
 
soap.wsdl_cache_limit = 5
; WSDL 内存缓存上限(最大允许在内存中缓存的WSDL文件数量)。
; 达到上限之后,最新缓存的文件将会挤掉最老的缓存文件。

版权声明
本文作者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。
无担保:本文作者不保证作品内容准确无误,亦不承担任何由于使用此文档所导致的损失。
自由使用:任何人都可以自由的阅读/链接/打印此文档,无需任何附加条件。
名誉权:任何人都可以自由的转载/引用/再创作此文档,但必须保留作者署名并注明出处。
其他作品
本文作者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:
金步国作品集 [ http://www.jinbuguo.com/ ]
联系方式
由于作者水平有限,因此不能保证作品内容准确无误。如果你发现了作品中的错误(哪怕是错别字也好),请来信指出,任何提高作品质量的建议我都将虚心接纳。
原文链接:http://www.jinbuguo.com/php/php.ini.html