必须改成绝对路径:
extension_dir = "C:\php-8.5.6\ext"
不要用:
extension_dir = "ext"
因为 IIS/FastCGI 有时候工作目录会变化。
不改的话日志时间会错。
date.timezone = Asia/Shanghai
或者:
date.timezone = Asia/Tokyo
默认只有 2M。
一般改:
upload_max_filesize = 100M
post_max_size = 100M
如果经常导入 Excel:
upload_max_filesize = 500M
post_max_size = 500M
导入大 Excel、导出 CSV 很有用。
max_execution_time = 300
max_input_time = 300
5分钟。
默认太小。
memory_limit = 512M
大型导入:
memory_limit = 1024M
创建目录:
C:\php-8.5.6\sessions
配置:
session.save_path = "C:\php-8.5.6\sessions"
否则有些服务器会话失效。
生产环境推荐:
display_errors = Off
log_errors = On
error_log = "C:\php-8.5.6\logs\php_errors.log"
创建目录:
C:\php-8.5.6\logs
PHP性能提升非常明显。
确认开启:
zend_extension=opcache
一般PHP8已经默认有:
[opcache]
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60
数据库:
extension=pdo_mysql
extension=mysqli
字符串:
extension=mbstring
网络:
extension=curl
HTTPS:
extension=openssl
图片:
extension=gd
压缩:
extension=zip
XML:
extension=xml
extension=xmlreader
extension=xmlwriter
extension=dom
extension=simplexml
新建:
<?php
phpinfo();
确认有:
PDO
pdo_mysql
mysqli
curl
openssl
mbstring
gd
zip
Zend OPcache
这是我觉得比较适合你做库存系统、盘点系统、导入Excel系统的配置:
date.timezone = Asia/Shanghai
memory_limit = 512M
max_execution_time = 300
max_input_time = 300
upload_max_filesize = 200M
post_max_size = 200M
extension_dir = "C:\php-8.5.6\ext"
session.save_path = "C:\php-8.5.6\sessions"
display_errors = Off
log_errors = On
error_log = "C:\php-8.5.6\logs\php_errors.log"
zend_extension=opcache
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60
扩展:
extension=pdo_mysql
extension=mysqli
extension=mbstring
extension=curl
extension=openssl
extension=gd
extension=zip
访问一个 check.php:
<?php
echo "PHP: ".PHP_VERSION."<br>";
echo "INI: ".php_ini_loaded_file()."<br>";
echo "EXT: ".ini_get('extension_dir')."<br>";
echo "<pre>";
print_r(PDO::getAvailableDrivers());
echo "</pre>";
正常应该看到:
PHP: 8.5.6
INI: C:\php-8.5.6\php.ini
EXT: C:\php-8.5.6\ext
Array
(
[0] => mysql
)
只要这几个正常,基本上数据库、上传、Excel导入、缓存、登录会话这些功能都能正常运行。
#############################
下面是涉及到上传目录的问题
上传文件实际上涉及 两个路径:
这是浏览器上传时先存放的地方。
例如:
upload_tmp_dir = "C:\php-8.5.6\tmp"
先创建目录:
C:\php-8.5.6\tmp
然后给 IIS 用户权限:
IIS_IUSRS
读取
写入
修改
如果不设置,PHP会使用系统临时目录:
C:\Windows\Temp
有时候权限不够会出现:
上传失败
move_uploaded_file失败
这个不是 php.ini 配置的。
是你的 PHP 代码决定的。
例如:
move_uploaded_file(
$_FILES['file']['tmp_name'],
__DIR__.'/uploads/test.xlsx'
);
保存到:
网站目录
├─ uploads
│ └─ test.xlsx
例如你的网站:
D:\wwwroot\inventory\
建议:
D:\wwwroot\inventory\
├─ uploads\
│ ├─ excel\
│ ├─ images\
│ ├─ attachments\
│
├─ logs\
├─ cache\
├─ index.php
upload_tmp_dir = "C:\php-8.5.6\tmp"
upload_max_filesize = 200M
post_max_size = 200M
max_file_uploads = 100
新建:
<?php
echo "upload_tmp_dir = ".ini_get('upload_tmp_dir')."<br>";
echo "upload_max_filesize = ".ini_get('upload_max_filesize')."<br>";
echo "post_max_size = ".ini_get('post_max_size')."<br>";
应该显示:
upload_tmp_dir = C:\php-8.5.6\tmp
upload_max_filesize = 200M
post_max_size = 200M
如果上传大文件(Excel、压缩包等),除了 PHP:
upload_max_filesize = 200M
post_max_size = 200M
IIS 默认也有限制。
打开:
IIS
→ 网站
→ Request Filtering
→ Edit Feature Settings
把:
Maximum allowed content length
改成:
209715200
表示:
200MB
否则会直接报:
HTTP Error 404.13
Content Length Too Large
对于你开发的库存盘点系统、Excel导入系统,我一般会配置:
extension_dir = "C:\php-8.5.6\ext"
upload_tmp_dir = "C:\php-8.5.6\tmp"
session.save_path = "C:\php-8.5.6\sessions"
error_log = "C:\php-8.5.6\logs\php_errors.log"
upload_max_filesize = 200M
post_max_size = 200M
memory_limit = 512M
max_execution_time = 300
然后提前创建:
C:\php-8.5.6\tmp
C:\php-8.5.6\sessions
C:\php-8.5.6\logs
这样后续导入 Excel、上传附件、生成报表基本不会因为 PHP 环境配置出问题。
#############################
通用版本的php.in的一些注释
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 通用 IIS + PHP 8.x 推荐配置
; 适用于:
; PHP + MySQL
; ERP
; WMS仓库系统
; CRM
; OA
; 盘点系统
; Word/Excel导入导出
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[PHP]
; 时区
date.timezone = Asia/Shanghai
; 内存
memory_limit = 512M
; 执行时间
max_execution_time = 300
max_input_time = 300
; 上传
file_uploads = On
upload_max_filesize = 200M
post_max_size = 200M
max_file_uploads = 100
; 临时上传目录
upload_tmp_dir = "C:\PHP\tmp"
; Session目录
session.save_path = "C:\PHP\sessions"
session.gc_maxlifetime = 86400
; 扩展目录
extension_dir = "C:\PHP\ext"
; 错误处理
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = "C:\PHP\logs\php_errors.log"
; 安全
expose_php = Off
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 常用扩展
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
extension=pdo_mysql
extension=mysqli
extension=mbstring
extension=curl
extension=openssl
extension=gd
extension=zip
extension=xml
extension=xmlreader
extension=xmlwriter
extension=dom
extension=simplexml
extension=fileinfo
extension=bcmath
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; OPCache
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
zend_extension=opcache
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 输出缓冲
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
output_buffering = 4096
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 字符集
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
default_charset = "UTF-8"