问题杂编 ━━ windows2016安装php8.1、php8.2及mysql8出现的问题汇总(简直就是*#*o#)

22 篇文章 7 订阅
17 篇文章 2 订阅

本以为按照正常程序走就完了,结果遇到各种各样的问题,最终只能妥协用低版本成交。这里把所有问题的出现和解决整理出来,避免下次再遇到类似问题。

安装mysql8失败

安装mysql8之后,提示service无法启动,删了重装多次都不行,最终只能安装mysql5解决。。。
而且原因并未找到,log提示尝试无密码连接失败

今天安装另一台服务器,终于找到办法安装成功:《mysql配置时,提示:Failed to start service MYSQL80

计算机管理 -> 本地用户和组 -> -> Administrators -> 添加 -> NETWORK SERVICE

在这里插入图片描述
NETWORK SERVICE 加入 administrator 组后继续执行mysql配置,成功~~~~

在这里插入图片描述

mysql安装时提示盘不存在或者路径已存在

问题:
mysql安装时将默认的C盘修改安装盘到D盘,结果提示the drive dose not exist,而自己新建完对应目录后又会提示目录已存在~~

解决:
除了盘真的有问题外,我是手写D盘用了小写的d,换成的大写D后就正常了,不需要去新建目录等奇怪操作。

mysql备份恢复失败

恢复备份时只恢复了表结构,表数据并未恢复,需要找到php.ini,将max_allowed_packet值变大

# The maximum size of one packet or any generated or intermediate string, or any parameter sent by the
# mysql_stmt_send_long_data() C API function.
max_allowed_packet=50M

mysql备份恢复卡在日期为“0000-00-00”上

目前默认的my.ini配置为严格模式,且禁止日期使用0000-00-00这种格式

[mysqld]
...
# The current server SQL mode, which can be set dynamically.
# Modes affect the SQL syntax MySQL supports and the data validation checks it performs. This 
# makes it easier to use MySQL in different environments and to use MySQL together with other 
# database servers.
sql-mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

只需要修改为

sql_mode=ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

重启MySQL服务后再恢复备份或导入sql都可以成功。
在这里插入图片描述
别忘了备份恢复后将my.ini配置恢复严格模式。
建议不要恢复严格模式,除非你的代码都符合他的要求,我实际运行时因为没去掉ONLY_FULL_GROUP_BY,就出现了如下类似的错误:

  • 在MySQL 5.7及更高版本中,对于GROUP BY查询的限制更加严格,如果SELECT列表中的列不在GROUP BY子句中,或者没有使用聚合函数对其进行聚合,则会引发该错误。
  • 如果不加修饰符 ONLY_FULL_GROUP_BY,也可以在低版本 MySQL 中执行,但是在 5.7.5 及以上版本中,如果不加修饰符,则会报错:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘orders.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by。

参考:一招解决MySQL5.7日期格式默认值0000-00-00 00:00:00设置报错Invalid default value for xxx

mysql 使用GROUP BY语法时出错

出错提示this is incompatible with sql_mode=only_full_group_by

原因:
sql_mode=only_full_group_by是MySQL的一种运行模式参数。它要求SELECT语句的group by子句中必须包含所有在select列表中不包含聚合函数的列,否则会报错。
也就是说,在这种模式下,select列表中的非聚合字段必须在group by子句中进行分组,否则查询会因语法错误而失败。

修改方法也和简单

  1. 修改配置
    找到my.ini中的这句
sql-mode="ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

ONLY_FULL_GROUP_BY删了即可。

  1. 命令
sql
# 暂时关闭
SET sql_mode = REPLACE(@@sql_mode, 'only_full_group_by', '');  

# 永久关闭(MySQL 5.7.5+)
SET @@global.sql_mode = REPLACE(@@global.sql_mode, 'only_full_group_by', '');

安装php8.2.7

2023年6月22日,重新部署一台服务器,系统是windows server 2016,无论是php配置还是mysql安装配置,都没有任何问题,唯在动态属性上出现了纰漏。错误提示Creation of dynamic property xxx is deprecated

动态属性在 PHP 8.2 中被弃用,并且在 PHP 9.0 以后会直接抛出 ErrorException。

class Post
{
    public string $title;
}
// …
$post->name = 'Name';

有四种办法解决

  1. 利用__set__get,将动态属性存储在一个私有数组中
class Foo {
    private $dynamicProperties = [];
    
    public function __set($name, $value) {
        $this->dynamicProperties[$name] = $value;
    }
    // …
}

$obj = new Foo();
$obj->bar = 'baz'; 
echo $obj->bar; // baz
  1. 增加标识#[AllowDynamicProperties]
    在需要使用动态属性的类上写上该标识。
#[AllowDynamicProperties]
class Post
{
    public string $title;
}
// …
$post->name = 'Name'; // 正常使用
  1. stdClass 和它的子类将正常使用
  2. 弃用警告

该方法在php9中将带来麻烦。

error_reporting(E_ALL ^ E_DEPRECATED);
  1. 遵守规矩,每个属性都定义好

《记录PHP8.2、Mysql5.6之后主要升级的代码部分(实现动态属性/对象引用防止重载警告/数据库groupby后的数据调用)》

安装php8.1.9失败

*#*o#

难得那么火大,一个简单的包,本机8.1.3还没问题,8.1.9遇了鬼了,这里一个个说来。

正常安装方法见文章:PHP开发日志 ━━ IIS7安装PHP8.0及多个版本如何同时存在一台服务器

fastcgi崩溃

这个问题竟然在2年前就写过文章,但因为近2年没遇到这个问题,所以给忘了~~~

在这里插入图片描述

首先排除.net framework版本不正确。
其次把程序池的进程模型 -> 标识 修改为:LocalSystem

具体分析见文章
服务器配置篇 ━━ iis7配置php出现fastcgi的500错误,LocalSystem/LocalService/NetworkService/ApplicationPoolIdentity
iis + php 遇到问题:php-cgi.exe - FastCGI 进程意外退出
解决php-cgi.exe - FastCGI 进程意外退出

php8.1组件gd出错
  • 与原代码不兼容的地方太多,比如浮点32.142857142857146到int的隐式转换将丢失精度不再支持对整个 $GLOBALS 数组的写访问mt_srand()不为必须等;
  • 问题也太多,连gd组件都会出错,提示函数imagecreate()不存在。

那就不用多说了,这个版本肯定不能使用,为了求稳,最终选择了php8.0版本使用

PHP Deprecated: Implicit conversion from float xxx to int loses precision
从 PHP 8.1.0 起,不再支持对整个 $GLOBALS 数组的写访问

PHP保留字变化

在操作数据库时,若某些字段命名为system等系统保留字时,php在sql语句中需要在该字段左右加上“`”符号

删除某些windows角色和功能后各功能崩溃,提示缺少mscoree.dll

因为在各种配置测试的时候安装了一些不需要的Windows功能,所以在使用mysql5和php8.0网站能正常打开后,决定把自认为不需要的功能都给删了重启试试,其中包括.net framework 3.5和4.5,结果。。。

powershell服务器管理器IIS启用或关闭Windows功能等等都打不开,提示缺少mscoree.dll

在这里插入图片描述

唉,自作孽不可活啊。

网上找了各种版本的mscoree.dll复制到c:\windows\system32目录里都无法正常启动,后来找到这篇文章才成功
运行Windows终端(PowerShell)提示由于找不到mscoree.dll无法继续执行代码》。

在这里插入图片描述

  • 方法一(本机测试失败):

1、首先新建一个文本文档,打开新建文本文档,将下面代码复制进去:

start /w pkgmgr /iu:Microsoft-Windows-NetFx3-OC-Package
start /w pkgmgr /iu:Microsoft-Windows-NetFx4-US-OC-Package
start /w pkgmgr /iu:Microsoft-Windows-NetFx3-WCF-OC-Package
start /w pkgmgr /iu:Microsoft-Windows-NetFx4-WCF-US-OC-Package

2、点击“文件”–“另存为”;

在这里插入图片描述

3、将保存类型修改为【所有文件】,然后将文件名修改为“.bat”,点击【保存】;
4、右键 .bat -选择“以管理员身份运行”即可!

等待命令框读取完成后重启一次计算机就可以完成修复了!

  • 方法二(可行):

使用cmd,依次运行以下命令:

dism /online /enable-feature /featurename:netfx3 /all
dism /online /enable-feature /featurename:WCF-HTTP-Activation
dism /online /enable-feature /featurename:WCF-NonHTTP-Activation

有可能在运行第二第三条命令时会提示需要先安装父功能

即使用 dism /online /enable-feature /featurename:WCF-HTTP-Activation /alldism /online /enable-feature /all /featurename:WCF-HTTP-Activation 都可以

在这里插入图片描述

那么此时依次执行的命令为:

dism /online /enable-feature /featurename:netfx3 /all
dism /online /enable-feature /featurename:WCF-HTTP-Activation /all
dism /online /enable-feature /featurename:WCF-HTTP-Activation
dism /online /enable-feature /featurename:WCF-NonHTTP-Activation

如果第一步命令执行后就去打开IIS等,很可能已经不再提示缺少.dll,而是提示需要NET FRAMEWORK V 4.0.30319启用,但安装时又可能提示不能安装~~

我在第一步命令后成功下载安装过.net framework 4.8,但并没有什么用。

如何使用DISM命令行工具修复Windows 10映像
NET FRAMEWORK V 4.0.30319 to download
Microsoft .NET Framework 4 KB2468871
Microsoft .NET Framework 3.5 Service pack 1 (Full Package)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用提供的信息,以下是在Windows 8.1系统上安装MySQL 5.6的教程: 1. 首先,您需要下载MySQL 5.6的安装程序。您可以在MySQL官方网站上的下载页面找到适合Windows 8.1安装程序。 2. 下载完成后,双击安装程序进行安装。在安装过程中,您将被要求选择安装类型。请根据您的需求选择合适的类型,然后继续安装。 3. 在安装向导中,您需要选择MySQL安装位置。默认情况下,MySQL安装在C:\Program Files\MySQL\MySQL Server 5.6\目录下。您可以选择更改此位置,或者保留默认设置并单击下一步。 4. 接下来,您将被要求设置MySQL的根密码。请确保设置一个强密码,以确保安全性,并记住这个密码以便将来使用。 5. 在接下来的步骤中,您可以选择安装MySQL的服务。如果您打算将MySQL作为Windows的服务运行,则选择“Server Only”选项。如果您只想在需要时手动启动MySQL,则选择“MySQL Server”选项。根据您的需求进行选择,并继续安装。 6. 完成安装后,您可以选择启动MySQL服务。如果您选择了将MySQL作为Windows服务运行,则该服务将在系统启动时自动启动。 现在,您已经成功在Windows 8.1系统上安装MySQL 5.6。您可以使用MySQL客户端工具连接到MySQL服务器,并开始使用数据库功能。请确保在使用MySQL之前阅读相关文档和教程,以了解更多关于MySQL的用法和功能。 请注意,以上步骤是根据引用提供的信息进行编写的。如有任何具体的安装问题,请参考MySQL官方文档或在相关技术社区寻求帮助。<span class="em">1</span> #### 引用[.reference_title] - *1* [windows8.1安装mysql5.6完整教程.pdf](https://download.csdn.net/download/a903265446/12202808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值