Php 我该如何解决这个问题;注意:未定义的偏移量:在第14行“;?

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脚本,它给了我这个错误:

注意:第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
    $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);