问题标签 [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.
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 下不起作用?
php - 消息:尝试访问 null 类型值的数组偏移量
我已经使用了几年的脚本(发票平面)中多次出现此错误,但不幸的是其创建者并未对其进行维护:
我的服务器已升级到 PHP 7.4,我正在寻找一种方法来解决问题并自己维护脚本,因为我对此非常满意。
这是给出错误的行:
$cOTLdata 被传递给函数:
它包含在mpdf btw 中,但简单地覆盖 github 存储库中的文件并不能修复错误。
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 是罪魁祸首:
php - 如何在 PHP 中获取另一个类中设置的 Class 属性
我创建了两个类User
和Post
. 在Post
类中,我创建了一个方法,该方法getPostUser
应该返回User
传递的对象postId
。使用我的代码,它正在设置所有属性,但是当我尝试从Post
orUser
对象获取值时,它给了我以下错误。
致命错误:未捕获错误:在 ...\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 行
我想知道的是
- 我编写代码的方式是对还是错?
- 如何通过 postId 获取整个 User 对象?
- 有没有更好的方法来编写这样的代码?
用户类
岗位类
索引文件
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 机器上做。
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.3
并C:\php\7.4
切换它们,我只需更改 Windows 环境变量中的 PATH 即可。php -v
如果我重新打开终端,则会生成正确的版本。
在 MacOS 上运行的团队成员对 7.4 没有问题,Ubuntu 18.04 登台服务器也没有问题,所以它一定是我的 Windows 安装所特有的。
inotify - 如何在 PHP7.4 中使用 inotify
我在 PHP 7.3.x 中使用 PECL 扩展inotify
没有任何问题。我更新到 PHP 7.4 但我没有成功获得inotify
为构建编译的扩展,20190902
因为 PECL 命令sudo pecl upgrade inotify
说有
没什么可升级的
那么我怎样才能获得这个扩展呢?
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
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 版本: 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 错误报告: 这里
php - 如何在 DSN 中指定用户名和密码?
PDO DSN的官方文档页面尚未列出用户名或密码。这些键值对的正确名称是什么?