0 && $chars > 0 && $lines > 0) { // Figure out how far back we should jump $seek = min($chars, $buffer); // Do the jump (backwards, relative to where we are) fseek($f, -$seek, SEEK_CUR); // Read a chunk and prepend it to our output $output = ($chunk = fread($f, $seek)).$output; // Jump back to where we started reading fseek($f, -mb_strlen($chunk, '8bit'), SEEK_CUR); // Take this seek chunk off the number of chars $chars -= $seek; $lines -= substr_count($chunk, "\n"); } // Close file fclose($f); $output = rtrim(str_replace("\r\n","\n",$output)); $output = explode("\n",$output); $output = array_slice($output, -$maxLines); $output = implode("\n",$output); file_put_contents("../tmp/bug-report.log", $output); } } $tmpLoc = dirname(__FILE__); $tmpLoc = explode(DIRECTORY_SEPARATOR,$tmpLoc); $tmpLoc = $tmpLoc[count($tmpLoc)-2]; // Output result and status array $status = array( "files" => $files, "filesSizesSeen" => $filesSizesSeen, "maxLines" => $maxLines, // "chars" => (isset($chars) ? $chars : null), // "lines" => substr_count($output, "\n"), // "seek" => (isset($seek) ? $seek : null), "bugReportPath" => "|".$tmpLoc."|tmp|bug-report.log", "result" => $result ); // Include our process once our bug checking work is done include("../processes/on-bug-check.php"); // Finally, display our status in JSON format as the XHR response text echo json_encode($status); ?>