logs.php ➔ tailCustom()   C
last analyzed

Complexity

Conditions 9
Paths 41

Size

Total Lines 48
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 9
eloc 23
nc 41
nop 3
dl 0
loc 48
rs 5.5102
c 0
b 0
f 0
1
<?php
2
/**
3
 * Slightly modified version of http://www.geekality.net/2011/05/28/php-tail-tackling-large-files/
4
 * @author Torleif Berger, Lorenzo Stanco
5
 * @link http://stackoverflow.com/a/15025877/995958
6
 * @license http://creativecommons.org/licenses/by/3.0/
7
 * @param string $filepath
8
 * @param int $lines
9
 * @param bool $adaptive
10
 * @return string
11
 */
12
function tailCustom($filepath, $lines = 1, $adaptive = true)
13
{
14
    // Open file
15
    $f = @fopen($filepath, 'rb');
16
    if ($f === false) {
17
        return false;
18
    }
19
    // Sets buffer size, according to the number of lines to retrieve.
20
    // This gives a performance boost when reading a few lines from the file.
21
    if (!$adaptive) {
22
        $buffer = 4096;
23
    } else {
24
        $buffer = ($lines < 2 ? 64 : ($lines < 10 ? 512 : 4096));
25
    }
26
    // Jump to last character
27
    fseek($f, -1, SEEK_END);
28
    // Read it and adjust line number if necessary
29
    // (Otherwise the result would be wrong if file doesn't end with a blank line)
30
    if (fread($f, 1) != "\n") {
31
        --$lines;
32
    }
33
34
    // Start reading
35
    $output = '';
36
    $chunk = '';
0 ignored issues
show
Unused Code introduced by
$chunk is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
37
    // While we would like more
38
    while (ftell($f) > 0 && $lines >= 0) {
39
        // Figure out how far back we should jump
40
        $seek = min(ftell($f), $buffer);
41
        // Do the jump (backwards, relative to where we are)
42
        fseek($f, -$seek, SEEK_CUR);
43
        // Read a chunk and prepend it to our output
44
        $output = ($chunk = fread($f, $seek)) . $output;
45
        // Jump back to where we started reading
46
        fseek($f, -mb_strlen($chunk, '8bit'), SEEK_CUR);
47
        // Decrease our line counter
48
        $lines -= substr_count($chunk, "\n");
49
    }
50
    // While we have too many lines
51
    // (Because of buffer size we might have read too many)
52
    while ($lines++ < 0) {
53
        // Find first newline and remove all text before that
54
        $output = substr($output, strpos($output, "\n") + 1);
55
    }
56
    // Close file and return
57
    fclose($f);
58
    return trim($output);
59
}
60