Undefined array key “edit” 原因与解决方法

今天一位朋友说他的网站几个月没看,现在上去就提示如下错误:

Undefined array key "edit"

可能的错误原因

请复制上方错误信息到搜索引擎以获取关于该错误的说明,或点击「使用必应搜索」。

如果您是访客,这说明网站程序可能出现了一些错误。请您稍后再试,或联系站长。

如果您是站长,可以「点击这里」查看 Z-Blog 官方对于【部分常见错误 】的说明,,以及「通用排查指南」。

如果仍然无法解决,也可以到 Z-Blog 官方论坛,附上当前错误信息与描述寻求帮助。 注:请将"当前错误信息"复制进标题或正文中。

Undefined array key "edit"

 

原因:

在PHP开发过程中,特别是PHP8,由于PHP8将未定义的数组键通知升级为警告。

 

1、为何会出现"Undefined array key"错误?

在PHP中,"Undefined array key"错误通常是由于尝试访问一个不存在的数组键所引起的。

具体来说,当我们有一个数组 $array,并尝试访问 $array['key'] 时,如果 'key' 在数组 $array 中不存在,就会触发这个错误。

 

这种情况可能出现在以下几种情况下:

  • 试图访问不存在的键。
  • 试图访问一个键,但键的名称有误。
  • 数组未被正确初始化或赋值。

 

2、如何避免这个错误?

现在,让我们探讨如何避免这个错误。

 

预防错误的通用策略:使用 isset() 或 array_key_exists() 函数

在访问数组键之前,我们可以使用两个常见的函数来检查键是否存在?从而预防"Undefined array key"错误的发生。

这两个函数分别是 isset() 和 array_key_exists()。

 

解决方法

"Undefined array key"错误是一个常见的问题,它通常会在我们尝试访问一个未定义的数组键时发生。这个错误可能导致程序崩溃或产生不可预料的结果,因此解决它是非常重要的。

 

第一种方法:修改PHP警告级别

以前我很乐意直接使用E_NOTICE,但我不准备用E_WARNING来做这件事。

 

第二种方法:重构代码

我知道最好的解决方案是重构代码,使用 isset() 或 array_key_exists() 函数修改相应部份的代码。

 

使用 isset()

isset() 函数用于检查变量是否已经被设置和非空。在检查数组键之前,我们可以使用 isset() 来确保键存在。以下是一个示例:

if (isset($array['key'])) {
    // 键存在,可以安全访问
    $value = $array['key'];
} else {
    // 键不存在,处理默认值或错误逻辑
    $value = 'Default value';
}

 

使用 array_key_exists()

array_key_exists() 函数专门用于检查数组中是否存在指定的键。以下是使用 array_key_exists() 的示例:

if (array_key_exists('key', $array)) {
    // 键存在,可以安全访问
    $value = $array['key'];
} else {
    // 键不存在,处理默认值或错误逻辑
    $value = 'Default value';
}

 

这两种方法都有效,你可以根据个人偏好选择其中之一来预防"Undefined array key"错误。

 

以我这为例子,谈谈我是如何解决Undefined array key "edit"这个问题的?

以我的这位朋友为例子,由于他的博客已经几个月没有管了,以前都是正常的,突然打开就变成这个错误了,我基本上断定是PHP版本的问题,估计是用了PHP8及以上版本了。具体操作如下:

 

1、和朋友交流了很久,最后得到相关信息如下:

用的云虚拟主机平台是:老薛主机

博客程序是:Z-Blog

 

2、通过Z-Blog后台默认地址登陆:/zb_system/login.php 或 /zb_system/cmd.php?act=admin

报错如下:

file_put_contents(/home2/thonnycn/public_html/zb_usersugin/TCad/xml/bcastr.xml): Failed to open stream: No such file or directory

中文翻译

file_put_contents(/home2/thonnycn/public_html/zb_usersugin/TCad/xml/bcastr.xml):无法打开流:没有这样的文件或目录

file_put_contents(/home2/thonnycn/public_html/zb_usersugin/TCad/xml/bcastr.xml): Failed to open stream: No such file or directory

 

注意:

这里报错我还踩了一个小坑,最初还认为是后台少文件所引起的,毕竟我去查看了,的确是没有 /xml/bcastr.xml 这个路径和文件的。

 

3、网站“前台、后台”都报错,都不能正常访问,加上这位朋友几个月又没有做任何操作,根据我的个人经验,我已经100%断定,应该是“老薛主机平台把默认PHP版本设置为了PHP8及以上版本”。

 

4、登入老薛主机平台控制面板,找到“软件”,点击“多PHP管理器”。老薛主机 多PHP管理器

 

5、可以清楚的看到系统PHP版本,系统管理员已设置系統默认的PHP版本:PHP 8.2(ea-php82)。

现在我将按域设置PHP版本,从表中选您希里更改的域,然后从列表中应用一个PHP版本:PHP7.0。

简单来说,就是我将把PHP版本由:PHP 8.2 切换为 PHP7.0

第一步:选择域名;

第二步:选择PHP版本;

第三步:点击“应用”;

把PHP版本由:PHP 8.2 切换为 PHP7.0

 

6、回到“软件”位置,点击“Select PHP Version”来选择PHP版本。Select PHP Version

 

7、可以清楚的看到,所有域名当前用的PHP版本是:PHP8.0。所有域名当前用的PHP版本是:PHP8.0

 

8、点击“Extensions”进入扩展;

再选择当前PHP版本;

再点击“Apply”。Extensions

 

9、现在才算真正的实现了“老薛主机按域设置PHP版本”。

他的博客网站也已经恢复正常了,前后台都可以正常访问了。

    A+
发布日期:2023年12月05日 14:47:17  所属分类:PHP
最后更新时间:2023-12-07 18:35:48
付杰
  • ¥ 49.0元
  • 市场价:199.0元
  • ¥ 98.0元
  • 市场价:298.0元
  • ¥ 999元
  • 市场价:4999元
  • ¥ 79.0元
  • 市场价:99.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: