Windows 10 上 PHP 8.2.32 报“权限拒绝”等错误的核心原因是 PHP 进程(如 IIS_IUSRS)对 session.save_path、error_log、upload_tmp_dir、extension_dir 等关键路径缺少读写权限或路径不存在,须逐项验证并为专用目录(如 C:\php\sessions)赋予 IIS_IUSRS 完全控制权,同时确保 php.ini 配置正确且重启服务。

Windows 10 上 PHP 8.2.32 服务器运行时报“权限拒绝”“无法写入”“No such file or directory”等错误,核心原因通常是 PHP 进程(如 IIS_IUSRS、SYSTEM 或 php-fpm 用户)对关键路径(php.ini、session.save_path、error_log、上传临时目录、扩展目录)缺少读取或写入权限,或路径本身不存在。不是改个配置就能好,得逐项验证权限链。
确认报错来源路径
先别急着赋权,先定位到底卡在哪:
- 查看 PHP 错误日志(php_error.log)中具体提示的文件或目录,例如:
Failed to write session data (files)→ 指向session.save_path;Unable to load dynamic library 'php_curl.dll'→ 涉及extension_dir或 DLL 依赖路径 - 在脚本开头加
var_dump(getcwd(), ini_get('session.save_path'), ini_get('upload_tmp_dir'), ini_get('error_log'));确认实际生效路径 - 用命令行执行
php -i | findstr -i "session.save_path\|upload_tmp_dir\|error_log\|extension_dir",比网页 phpinfo() 更可信(排除 Web SAPI 差异)
修复 session.save_path 权限
这是最常见报错点,尤其 Windows 默认用 C:\Windows\Temp,IIS_IUSRS 默认无完全控制权:
- 新建专用目录,如
C:\php\sessions(避免中文、空格、过长路径) - 以管理员身份运行 PowerShell,执行:
mkdir C:\php\sessionsicacls C:\php\sessions /grant "IIS_IUSRS:(OI)(CI)F"icacls C:\php\sessions /inheritance:r - 在
php.ini中设为:session.save_path = "C:\php\sessions",重启 IIS(iisreset)
修复 error_log 和 upload_tmp_dir 权限
这两个路径若不可写,会导致错误静默丢失或文件上传失败:
立即学习“PHP免费学习笔记(深入)”;
- 创建日志目录:
mkdir C:\php\logs,再赋权:icacls C:\php\logs /grant "IIS_IUSRS:(OI)(CI)M"(修改权限即可,不需完全控制) - 设置
php.ini:error_log = "C:\php\logs\php_error.log"upload_tmp_dir = "C:\php\uploads" - 为
C:\php\uploads同样授予IIS_IUSRS修改权限 - 确保
log_errors = On且error_reporting = E_ALL已启用
检查 extension_dir 及扩展 DLL 权限
PHP 扩展加载失败常被误判为“扩展没开”,实则是 DLL 文件被系统阻止或路径不可读:
- 确认
extension_dir是绝对路径,用正斜杠或双反斜杠,例如:extension_dir = "C:/php/ext" - 检查该目录下是否存在对应 DLL(如
php_pdo_mysql.dll),文件属性中“安全”页签是否允许IIS_IUSRS读取 - 若使用了第三方扩展(如 sqlsrv),其依赖的 ODBC 驱动 DLL(如
msodbcsql17.dll)也需在系统 PATH 或扩展目录中可访问 - 必要时右键 DLL 文件 → 属性 → “解除锁定”(尤其从网络下载后)



















