问题标签 [php-7.4]

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 回答
296 浏览

php - PHP 7.4 和 MIME 类型的远程文件

我对 PHP 7.4 有疑问。以下场景:我有一个名为“image.php”的文件,其中附加了一个参数“url”。这将加载外部图像。为了确保它是 PNG,我通过 curl 检查了 MIME 类型。使用 PHP 7.3(及更低版本)它可以正常工作,但 PHP 7.4 不返回图像,它返回错误消息(the('No png file'))。

一小部分代码:

任何人都知道为什么它在 PHP 7.4 下不起作用?

0 投票
1 回答
358905 浏览

php - 消息:尝试访问 null 类型值的数组偏移量

我已经使用了几年的脚本(发票平面)中多次出现此错误,但不幸的是其创建者并未对其进行维护:

我的服务器已升级到 PHP 7.4,我正在寻找一种方法来解决问题并自己维护脚本,因为我对此非常满意。

这是给出错误的行:

$cOTLdata 被传递给函数:

它包含在mpdf btw 中,但简单地覆盖 github 存储库中的文件并不能修复错误。

0 投票
2 回答
2069 浏览

php - phpunit,laravel:当当前类范围没有父级时不能使用“父级”

我在 PHP 7.4 上使用 PHPUnit 6.5.13 和 Laravel 5.5。我最近从 PHP 7.2 升级到 7.4。似乎触发了错误。

在我的测试中,我使用$this->expectsEvents它来测试事件是否被触发。测试类看起来有点像这样:

OrderReSent 看起来像这样(我尝试注释掉 broadcastOn 并删除 InteractsWithSockets 使用,结果没有变化):

我看到调用 parent::__construct 的唯一地方是 in Illuminate\Broadcasting\PrivateChannel,它扩展了 Illuminate\Broadcasting\Channel (它是一个子类,所以我不明白为什么它会抛出这个错误):

stacktrace 看起来像这样,让我相信 Mockery 是罪魁祸首:

0 投票
1 回答
934 浏览

php - 如何在 PHP 中获取另一个类中设置的 Class 属性

我创建了两个类UserPost. 在Post类中,我创建了一个方法,该方法getPostUser应该返回User传递的对象postId。使用我的代码,它正在设置所有属性,但是当我尝试从PostorUser对象获取值时,它给了我以下错误。

致命错误:未捕获错误:在 ...\www\learnphp\src\User\User.php:72 中初始化之前不得访问类型属性 App\User\User::$phone 堆栈跟踪:#0 ...\ www\learnphp\index.php(18): App\User\User->getPhone() #1 {main} 出现在 ...\www\learnphp\src\User\User.php 第 72 行

我想知道的是

  1. 我编写代码的方式是对还是错?
  2. 如何通过 postId 获取整个 User 对象?
  3. 有没有更好的方法来编写这样的代码?

用户类

岗位类

索引文件

0 投票
3 回答
15554 浏览

php - 如何在 Apache 上配置 PHP 7.4?

我正在尝试在我的机器上配置 PHP 7.4 和 Apache 2.4,但它返回以下错误:

我的 httpd.conf 的底部有代码:

我已经完成了:

  • 在以下位置复制/粘贴 php7.4:'C:\XIDServer\php'
  • 编辑 'C:\XIDServer\php\php.ini' 上的 php.ini 文件,启用一些模块:
  • 扩展=卷曲
  • 扩展=gd2
  • 扩展=mbstring
  • 扩展=mysql
  • 扩展=pdo_mysql
  • 扩展=xmlrpc
  • 为 php 指定的环境变量创建了 'C:\XIDServer\php'
  • 将 Apache 2.4 64 位复制/粘贴到文件夹:'C:\XIDServer\Apache24'
  • 编辑 httpd.conf 文件,指定到新位置('C:\XIDServer\Apache24')
  • 安装 Apache 2.4 的 Windows 服务
  • 在文件'httpd.conf'的底部添加了上述行

我在 Windows Server 2012 机器上做。

0 投票
1 回答
2618 浏览

php - 为什么 Windows 上的 PHP 7.4 会中止所有需要用户输入的命令行操作?

我有一个本地设置,用于在 3 台不同的 Windows 10 PC 上在 Symfony 5.0 上进行开发,当 PHP 版本为 7.3 时它们都没有问题,而当它是 7.4 时它们都有同样的问题。

它发生在任何需要用户输入的执行上,例如: * php bin/console make:entity * php bin/console doctrine:migrations:migrate

其他php bin/console make:migration不需要用户输入的命令可以正常工作,所以看起来等待输入是问题所在。

在非交互模式下运行它们适用于是/否,但对于很多人来说是不可能的,比如make:entity

这是终端的输出:

中止立即发生,无需等待输入。我安装了 7.3 和 7.4 版本,切换到 7.3 可以正常工作,所以我查看了这两个php.ini文件,没有发现任何问题。我直接从 php.net 站点https://www.php.net/downloads.php上的 Windows 下载链接安装了它们

我的 PHP 版本已安装C:\php\7.3C:\php\7.4切换它们,我只需更改 Windows 环境变量中的 PATH 即可。php -v如果我重新打开终端,则会生成正确的版本。

在 MacOS 上运行的团队成员对 7.4 没有问题,Ubuntu 18.04 登台服务器也没有问题,所以它一定是我的 Windows 安装所特有的。

0 投票
2 回答
591 浏览

inotify - 如何在 PHP7.4 中使用 inotify

我在 PHP 7.3.x 中使用 PECL 扩展inotify没有任何问题。我更新到 PHP 7.4 但我没有成功获得inotify为构建编译的扩展,20190902因为 PECL 命令sudo pecl upgrade inotify说有

没什么可升级的

那么我怎样才能获得这个扩展呢?

0 投票
0 回答
2424 浏览

php - PHP 启动:无法加载动态库,Windows

我已经安装了 PHP 7.4C:\Program Files\Php74并且它正在工作,但是当我尝试加载扩展时,出现这样的错误:

PHP 警告:PHP 启动:无法加载动态库 'php_pthreads.dll'(已尝试:C:\\php\\ext\\php_pthreads.dll ...

哪个C:\php\不存在,所以我添加extension_dir = "C:\Program Files\Php74\ext"到 php.ini 并且刚刚更新的路径出现相同的错误:

PHP 启动:无法加载动态库 'php_pthreads.dll'(尝试:C:\\Program Files\\Php74\\ext\\php_pthreads.dll ...

  • 文件C:\Program Files\Php74\ext\php_pthreads.dll存在
  • PHP 路径已添加到 Windows PATH
  • 已安装 Microsoft Visual C++ 2017、2015 和 2013。
  • 视窗 10 1909 64 位
  • 阿帕奇 2.4

已解决

它通过此线程的详细信息修复:https ://stackoverflow.com/a/54024356/547185

0 投票
2 回答
1620 浏览

php - PHP 7.4 & MySQL:caching_sha2_password 拒绝长 (20c) 密码

更新:

23.02.2020:该错误已在PHP 7.4.3中修复。

23.12.2019:我发现了哪些密码受到影响。请看下面我的回答。仍然非常感谢为什么拒绝长密码的答案。


免责声明:我已经尝试了大约 2 个小时,只是设置了不同的密码。我绝对相信下面的密码会导致问题。它适用于其他密码。我确实知道如何解决它:使用不同的密码。我想知道为什么它不起作用。因为这样的不一致是不可接受的。

我能够在我的系统上重现该问题。


最近切换到 PHP 7.4 和 MySQL 8,默认使用caching_sha2_password. 在验证它实际上受 PHP 支持后,我无法让它与我随机生成的密码一起使用,所以我mysql_native_password再次使用 PHP 7.3。

现在,我设置了一个新服务器并且它工作正常,所以我试图找出问题所在,以便我可以caching_sha2_password在我的其他服务器上使用。

MySQL(通过 mysql shell 使用root

PHP

测试(重现)

错误

PHP 警告:mysqli::__construct(): (HY000/1045): Access denied for user 'test'@'localhost' (using password: YES) in /db.php on line 5

解决方法:有趣的是,由于某些疯狂的原因,再次运行此修复程序:

重新设置密码再次引入了问题。

我注意到它根据我使用的密码失败了。所以我认为这可能是不支持的字符或粘贴问题。

我将我的原始密码(40 个字符)归结为这个(20 个字符):

这个密码打破了它:l0QDEptp*L6tNo28ey^8

所有较短的组合都可以正常工作:此密码例如有效:l0QDEptp*L6tNo28ey^以及此密码:0QDEptp*L6tNo28ey^8

重要提示:仅在安全环境中测试此公共密码!

如果您能够重现该问题或对此有任何想法(解决方案/可能的原因),请告诉我。

注意:这个问题实际上发生在我所有随机生成的密码上,这些密码有 40 个字符长并且包含特殊字符(例如:%^$!)。我猜一些相对常见的组合会触发这个问题。

图片: 演示MySQL 8 和 PHP 7.4 身份验证问题


MySQL 版本: mysql Ver 8.0.18-0ubuntu0.19.10.1 for Linux on aarch64 ((Ubuntu))
PHP 版本: PHP 7.4.1 (cli) (built: Dec 18 2019 14:44:55) (NTS)
PHP Bug报告: 这里
MySQL 错误报告: 这里

0 投票
1 回答
369 浏览

php - 如何在 DSN 中指定用户名和密码?

PDO DSN的官方文档页面尚未列出用户名或密码。这些键值对的正确名称是什么?