按照 CakePHP 手册中的所有迁移步骤,我最终在所有页面上都出现错误 500。 日志告诉我这一点:
> [Wed Jul 19 11:56:02.566953 2023] [proxy_fcgi:error] [pid 12776]
> [client 178.117.91.131:57762] AH01071: Got error 'PHP message: PHP
> Fatal error: Uncaught TypeError: Argument 2 passed to
> Cake\\Utility\\Hash::insert() must be of the type string, int given,
> called in
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Core/Configure.php
> on line 92 and defined in
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Utility/Hash.php:316\nStack
> trace:\n#0
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Core/Configure.php(92):
> Cake\\Utility\\Hash::insert()\n#1
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Core/Configure.php(339):
> Cake\\Core\\Configure::write()\n#2
> /var/www/clients/client0/web4/web/ID/config/bootstrap.php(74):
> Cake\\Core\\Configure::load()\n#3
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Http/BaseApplication.php(161):
> require_once('/var/www/client...')\n#4
> /var/www/clients/client0/web4/web/ID/src/Application.php(41):
> Cake\\Http\\BaseApplication->bootstrap()\n#5
> /var/www/clients/client0/web4/web/ID/vendor/cakephp/cakephp/src/Http/Server.php(10...'
由于我不知道 - 或看不到 - 在 Application.php 或 bootstrap.php 中调用哈希的位置,我不知道如何调试它。
php 越来越严格了。这不是 CakePHP 问题。您的问题是基于将 int 传递给不再接受 int 的函数。通常这些问题可以通过使用
(string)
转换为字符串来解决,例如:
$data = [];
$path = 3;
$values = 'your value';
Hash::insert($data, (string)$path, $values);
您的实际问题是在 bootstrap.php 第 74 行中,您调用
Configure::load()
,它调用 Configure::write()
,然后调用 Hash::insert()
,因此配置中的每个键(通常在 config/app.php
中)必须是字符串类型 ->在配置中的某个地方,您必须通过跳过键(数字数组)来拥有整数键或隐式整数键:
$config = [
'3' => 'your value', // works
(string)3 => 'your value', // works
4 => 'your value', // doesn't work without warnings or errors
['3' => 'your value'], // doesn't work because the actual key would be an automatic numeric array index
'6' => ['3' => 'your value'], // works
];
Configure::write($config);