要抢先将其标记为重复的问题,请理解我对PHP编码/语法有零经验,我正在努力对我的具体问题应用一般性答案。我想我已经找到了问题的来源,但我甚至都不是100%,所以我正在寻求能帮助指导我确定这一点的人的帮助。
我们正在将一个骰子滚动mod安装到Simple Machines论坛。第一次安装顺利,没问题。我们想要更改一些mod的格式,因此我们卸载它,更改文件并重新安装它。重新安装后,发布新主题或回复产生了一个。当我们禁用mod时,我们可以像往常一样回复并发布新主题。
经过一些打猎,我们在错误日志中找到了这个;
http://irate-pirate.org/forums/index.php?action=admin;area=packages;get;sa=browse;server=1;relative=posting
8: Undefined offset: 1
File: /home4/iratepir/public_html/forums/Sources/Subs-Package.php
Line: 1503
我们找到了Subs-Package.php文件,这里是周围的代码:
1501 // Build an array of parts.
1502 $versions[$id] = array(
1503 'major' => (int) $parts[1],
1504 'minor' => !empty($parts[2]) ? (int) $parts[2] : 0,
1505 'patch' => !empty($parts[3]) ? (int) $parts[3] : 0,
1506 'type' => empty($parts[4]) ? 'stable' : $parts[4],
1507 'type_major' => !empty($parts[6]) ? (int) $parts[5] : 0,
1508 'type_minor' => !empty($parts[6]) ? (int) $parts[6] : 0,
1509 'dev' => !empty($parts[7]),
1510 );
1511 }
因此,在查看this post之后,我认为(???)需要添加:
//isset()
$value = isset($array['my_index']) ? $array['my_index'] : '';
//array_key_exists()
$value = array_key_exists('my_index', $array) ? $array['my_index'] : '';
我在Subs-Package.php文件中找到的代码。我猜我在发现错误的行之前添加了这个。
我也猜测这些变量中的一些需要更改以匹配我们代码中的部分,但我不知道哪些变量。
任何帮助绝对太棒了,我希望我已经提供了足够的信息!
答案 0 :(得分:0)
您需要检查是否设置了$parts
数组索引。阵列$parts
可能不存在。因此,您需要添加isset
来处理此类情况。
例如
1501 // Build an array of parts.
1502 $versions[$id] = array(
1503 'major' => isset($parts[1]) ?(int) $parts[1] : 0,
1504 'minor' => isset($parts[2]) ?(int) $parts[2] : 0,
1505 'patch' => isset($parts[3]) ?(int) $parts[3] : 0,
1506 'type' => isset($parts[4]) ?(int) $parts[4] : 0,
1507 'type_major' => isset($parts[5]) ?(int) $parts[5] : 0,
1508 'type_minor' => isset($parts[6]) ?(int) $parts[6] : 0,
1509 'dev' => isset($parts[7]) ?(int) $parts[7] : 0,
1510 );
1511 }
isset() will check if the referenced value is defined or not.
empty($parts[index]) can give error in cases where array $parts is not defined
as it will try to check the value that doesn't exists.
即使未定义$parts
数组,此代码仍然有效。