Php 我该如何解决这个问题;注意:未定义的偏移量:在第14行“;?
我想知道是否有人能给我一点帮助我有一个php脚本,它给了我这个错误: 注意:第14行xxxx/xxxx/xx.php中未定义的偏移量:8 以下是我的代码:Php 我该如何解决这个问题;注意:未定义的偏移量:在第14行“;?,php,Php,我想知道是否有人能给我一点帮助我有一个php脚本,它给了我这个错误: 注意:第14行xxxx/xxxx/xx.php中未定义的偏移量:8 以下是我的代码: <?php // Opens the file "april" in read mode only $fileLog = fopen("april.txt", "r"); // Variable to count the total bytes used during the month
<?php
// Opens the file "april" in read mode only
$fileLog = fopen("april.txt", "r");
// Variable to count the total bytes used during the month
$totalBytes = 0;
// While not the end of file get and echo the data line by line
while (!feof($fileLog)) {
$line = fgets($fileLog, 1024);
// Explodes the data with a space
$details = explode(' ', $line);
// Adds all the bytes and stores them in $totalBytes
$totalBytes = $totalBytes +(int)$details[8]; // line 14
}
echo "<h3>April Statistics</h3>";
// echoes the total bytes
echo "<p>The TOTAL bandwidth consumed used: 8.43MB ($totalBytes Bytes)</p>";
fclose($fileLog);
?>
谁能告诉我如何解决这个问题,或者给我举个例子。
我们将非常感谢您的帮助,谢谢
好,下面是文件内容的示例:
103.239.234.105--[2007-04-01 00:42:21]“获取文章/学习PHP基础知识HTTP/1.0”200 12729“Mozilla/4.0”
207.3.35.52--[2007-04-01 01:24:42]“GET index.php HTTP/1.0”200 11411“Mozilla/4.0”
我正在添加请求的文件在一个月内消耗的总带宽。看起来您的
$details
变量中包含的元素少于9个。因此,当您试图访问不存在的$details[8]
时,就会出现错误
为了修复它,我将调试其他变量,特别是
$line
变量。看起来您要打开的文件中(至少)有一行不是您所期望的格式。请注意,这很可能是结尾的空行或其他内容。使用var\u dump
显示$details
的内容。您收到通知是因为索引8(您正在尝试访问)未设置为任何值。那么$details数组可能没有9个您可以访问的元素。
打印$details数组以查看其中的实际内容
要修复此警告,您应该在访问$details数组之前检查它是否包含您期望的数据。如果不查看文本文件第14行上的内容,则该行上似乎没有9个单词被空格分隔 更新: 问题在于文本文件,如果看不到它,将很难提供帮助 但是,您可以将处理的每一行打印到一个文件中,然后查看失败的地方,或者,更好的做法是进行一些错误处理,这样您就可以查找单词不足的地方,然后打印一些警告,或者跳过该行。更改:
$totalBytes = $totalBytes +(int)$details[8]
到
将此添加到第14行之前
$offset=count($details)-1
至少有一行包含少于九个“单词”,这会导致$details
包含少于九个元素(偏移量8将是第九个元素)。这只会创建一个变量。它不能解决问题或改变程序的含义。很抱歉,我只是忘了说,$details[8]
需要重命名为$details[$offset]
你好,西蒙尼谢谢你的回复,我照你说的做了,它起作用了问题是$totalBytes结果现在不同了(小于原来的值因此是错误的)有什么建议吗???你要做的就是总是得到最后一列。如果最后一列是包含大小的列,则这是正确的,否则可能会将字符串包括在总数中。如果只查找第9列,请使用isset
小心!如果该行少于9个“字”,则这可能不是期望的行为;例如,希望这是一个“错误”的情况,而不是假设值为0。PHP解释器正在谈论他的源文件的第14行,而不是他的文本文件。@ Rojb-您是正确的,行14在源文件中,但问题仍然在数据文件中。
$totalBytes = $totalBytes +(isset($details[8])?intval($details[8]):0);