2011-11-06 40 views
-3

我想知道如果任何人都可以給我一點幫助我有一個PHP腳本,它給我這個錯誤:我該如何解決這個「注意:未定義偏移:在第14行」?

注意:未定義抵消:8 XXXX在線/ XXXX/xx.php 14

這裏是我有的代碼:

 <?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〇點42分21秒] 「GET文章/ learn_PHP_basics HTTP/1.0」 200 12729「的Mozilla/4.0 「

207.3.35.52 - [2007-04-01 1點24分42秒] 」GET的index.php HTTP/1.0「 200 11411 」的Mozilla/4.0「

和IM添加由消耗的總帶寬該月份請求的文件。

+0

哪條線是線14日前加入呢? – Bojangles

+2

您至少有一行包含少於九個「單詞」,這會導致'$ details'具有少於九個元素(偏移量8將是第九個元素)。 –

回答

1

它看起來像你的$details變量中有少於9個元素。因此,當您嘗試訪問不存在的$details[8]時,出現錯誤。

要修復它,我會調試你的其他變量,特別是$line變量。它看起來像你打開的文件(至少)有一行不符合你期望的格式。請注意,這可能是最後的空行或什麼的。

1

使用var_dump顯示$details的內容。您正在收到通知,因爲索引8(您嘗試訪問的)未設置爲任何值。

1

那麼$ details數組可能沒有9個元素可以訪問。 打印$ details數組以查看其中的實際內容。

要修復警告,您應該檢查$ details數組是否包含您在訪問它之前所期望的數據。

2

沒有看到你的文本文件的第14行是什麼,它看起來似乎沒有9個單詞由該行上的空格分隔。

UPDATE:

問題是文本文件,沒有看到它,它會很難幫助。

但是,您可以將每行處理後的文件打印到文件中,並查看其失敗的位置,或者更好的辦法是進行一些錯誤處理,以便查找沒有足夠文字的位置,然後打印出來一些警告,或跳過線路。

+0

PHP解釋器正在討論他*源文件*的第14行,而不是他的文本文件。 – Rob

+0

@robjb - 第14行在源文件中是正確的,但問題仍然在於數據文件。 –

0

變化:

$totalBytes = $totalBytes +(int)$details[8] 

$totalBytes = $totalBytes +(isset($details[8])?intval($details[8]):0); 
+2

小心!如果該行少於9個「單詞」,這可能不是期望的行爲;例如可能需要將此視爲「錯誤」情況,而不是僅假設值爲0. –

0

第14行$offset = count($details)-1;

+0

這只是創建一個變量。它不能解決問題或改變程序的含義。 –

+0

對不起,我忘了說'$ details [8]'需要重新命名爲'$ details [$ offset]' – Simone

+0

您好Simone謝謝您的回覆,我照你說的做了,它的工作原理是這樣的$ totalBytes結果現在是不同的(小於它因此是錯誤的)任何建議??? – tim56

相關問題