问题标签 [php-8.1]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
32 浏览

php - preg_match 在大文本上比 strpos 快吗?

我目前正在为 PHP 8.1.2 更新为 PHP 5.2.17 编写的非常旧的脚本。有很多文本处理代码块,几乎都是preg_match/preg_match_all。我曾经知道,字符串匹配的 strpos 一直比 preg_match 快,但我决定再检查一次。

代码是:

我拿了 php8.1.2 发行版附带的 readme-redist-bins.txt 文件,大约 30KB。

结果(preg_match_all):

结果(strpos):

仔细检查... 在两台机器上尝试了 Windows 和 Linux PHP 构建。

用小文件(200B)尝试了相同的代码

结果(preg_match_all):

结果(strpos):

现在时间安排好了。

那么,怎么可能 preg_match 在大文本上匹配得更快呢?有任何想法吗?

PS:尝试 PHP_7.2.10 - 结果相同。

0 投票
1 回答
55 浏览

php - PHP 8.1 fastcgi exe 在非线程安全版本中不可用

我正在将我的 php 从 7.2 升级到 8.1,以便与 IIS FastCgi 一起使用。当我按照 PHP for IIS FastCGI 的建议从下面的 url 下载非线程安全版本时,下载的文件夹中没有 php-cgi.exe。

https://windows.php.net/downloads/releases/php-8.1.2-nts-Win32-vs16-x64.zip

如果我下载线程安全版本,那么它就在那里。

在 php 下载页面中显示,IIS 如果您使用 PHP 作为 IIS 的 FastCGI,您应该使用 PHP 的非线程安全 (NTS) 版本。

https://windows.php.net/download#php-8.1

有人可以建议我这样做的正确方法是什么?

我附上了如何在我的 IIS 中设置 FastCgi。

IIS 设置

0 投票
1 回答
21 浏览

php - 如何在 PHP8.1 中启用“imageavif”

我使用新的 php8.1 函数是imageavif但抛出错误消息undefined 函数然后打印gdinfo()但未启用 avif 那么如何启用它?

0 投票
1 回答
71 浏览

php - 从动态名称获取 PHP 枚举

我正在尝试从动态名称创建一个 php 8.1 枚举。似乎不可能。所以给定一个枚举

当然,以下工作:Foo::bar虽然这不是:

这导致:访问未声明的静态属性 App\Console\Commands\Foo::$bar

我在这里尝试了各种技巧,但无济于事。似乎不可能从动态名称中获取枚举实例。我的自定义和快速解决方法如下所示,一个静态工厂:

我可以把它放在一个特征中并在我所有的枚举中继承它,是的,问题解决了。

我的问题是:我在这里错过了什么吗?用原生 php 方法实例化枚举真的不可能吗?还是我想错了方向?

php8.1 之前的 class-as-enum 作曲家包曾经有那些方便的方法,请参阅https://github.com/bensampo/laravel-enum 那么为什么这个非常常见的情况不属于规范的一部分(只是好奇)?

0 投票
2 回答
341 浏览

php - 处理未定义数组键的 PHP 8.1 警告

我们正在升级到 PHP 8.1。一个新功能是未定义的数组键会引发警告。

不幸的是,这会干扰轻松使用关联数组(例如 $_SESSION 变量)的能力。我理解预定义变量的优点,我不是在寻找关于这些优点的讨论。关联数组的想法是您可以轻松地将内容添加到会话中,并且所有未分配的内容都被评估为空。但现在它也发出警告;必须采取一些措施来解决这个问题。

这是一些代码的示例:

在代码的另一个地方,出现以下情况

如果这发生在未定义“is_condition”会话变量的上下文中,则将其值评估为 null 的预期结果就是我们想要的。但是现在必须做其他事情来处理它未定义的可能性。

有几种方法可以解决这个问题:

  1. 预定义所有值为 null 的会话变量。似乎它不是关联数组的精神。现在每个脚本都必须调用一组冗长的代码。

  2. 每当需要关联数组元素的值时,请使用空合并运算符。在整个代码库中放置许多额外的运算符是一个丑陋的要求。

  3. 更改我们的自定义错误处理函数以忽略未定义的数组键错误。抑制警告并增加开销是一个非常糟糕的主意。

这些方法都不是非常理想的。

解决此问题的一种理论方法是使用数组初始化语句,将所有可能的关联键分配给 null。我不知道有这样的事情。

我的问题是我是否缺少其他一些方法,例如仅抑制此特定警告的参数。

0 投票
1 回答
155 浏览

php - 不推荐使用 PHP:第 154 行不推荐使用将 false 自动转换为数组的 adodb-mssqlnative.inc.php

我们正在将 PHP 升级到 8.1 版。使用 MS Sql Server 数据库。这一切似乎工作正常,但我在日志文件中看到重复的消息:

[2022 年 2 月 3 日 11:51:18 America/New_York] PHP 已弃用:在 C:...\includes\adodb\drivers\adodb-mssqlnative.inc.php 第 154 行不推荐将 false 自动转换为数组

我已将 adodb 更新到 5.22 版,但这并没有阻止消息记录。ini 文件有

有谁知道如何解决这个问题?

0 投票
1 回答
87 浏览

php - Laravel Enum 转换错误调用未定义的方法 App\\Enums\\UserType::from()

当我尝试将模型中的属性转换为我的一个枚举时,它会引发错误:

调用未定义的方法 App\Enums\UserType::from()

我找不到有关所需find()方法的任何信息。

我按照这里的说明进行操作。

我的枚举UserType

我的用户模型:

0 投票
0 回答
15 浏览

php - PHP 和 imagecreatefromstring 替代方案

有人可以为php函数提供替代方案吗

我用 php 8.1 安装了最新的 xampp,而 php.ini 没有 GD2 库。

0 投票
0 回答
28 浏览

php - 在 Symfony WebTestCase 中将 null 反序列化为 DateTime 类型失败

示例代码基于 Symfony 6 和 PHP 8.1。

我编写了一个测试来验证 RESTful API 端点/posts/{id}

JSON 响应输出是这样的。

请注意,publishedAt响应 JSON 中的null.

我尝试使用该serializer组件将响应内容反序列化为Post对象。

运行测试时,我得到以下异常。

示例代码可在我的 Github 帐户上找到。publishedAtofPostDateTime|null混合型。

  1. 让我困惑的是默认的序列化结果不能使用相同的Serializer组件反序列化。

  2. 如果可以在将对象序列化为 JSON 字符串时,全局Serializer配置组件以跳过值和空值(字符串、数组和集合),如 Java 世界中的 Jackson。null

0 投票
2 回答
532 浏览

php - php 8.1 - explode():不推荐将 null 传递给字符串类型的参数 #2 ($string)

在 8.1 中遇到一些不推荐使用的错误,我想解决。

PHP Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in...

$result['comp_uids'] 在这种情况下为空,这就是显示 null 错误的原因。我不确定他们为什么要弃用此功能,但建议的更改是什么来避免这种情况?我看到strlen(): Passing null to parameter #1 ($string) of type string is deprecated和其他一些人使用 8.1 类似。