public function parse_filesystems() { global $show_bind, $show_inodes; $results = array(); $j = 0; $df = SysInfo::execute_program('df', '-k' . $this->df_param); $df = preg_split("/\n/", $df, -1, PREG_SPLIT_NO_EMPTY); sort($df); if ($show_inodes) { $df2 = SysInfo::execute_program('df', '-i' . $this->df_param); $df2 = preg_split("/\n/", $df2, -1, PREG_SPLIT_NO_EMPTY); sort($df2); } $mount = SysInfo::execute_program('mount'); $mount = preg_split("/\n/", $mount, -1, PREG_SPLIT_NO_EMPTY); sort($mount); foreach ($df as $df_line) { $df_buf1 = preg_split("/(\\%\\s)/", $df_line, 2); if (count($df_buf1) != 2) { continue; } preg_match("/(.*)(\\s+)(([0-9]+)(\\s+)([0-9]+)(\\s+)([0-9]+)(\\s+)([0-9]+)\$)/", $df_buf1[0], $df_buf2); $df_buf = array($df_buf2[1], $df_buf2[4], $df_buf2[6], $df_buf2[8], $df_buf2[10], $df_buf1[1]); if ($show_inodes) { preg_match_all("/([0-9]+)%/", $df2[$j + 1], $inode_buf, PREG_SET_ORDER); } if (count($df_buf) == 6) { $df_buf[5] = trim($df_buf[5]); if (SysInfo::hide_mount($df_buf[5])) { continue; } $df_buf[0] = trim(str_replace("\$", "\\\$", $df_buf[0])); $current = 0; foreach ($mount as $mount_line) { if (preg_match("#" . $df_buf[0] . " on " . $df_buf[5] . " type (.*) \\((.*)\\)#", $mount_line, $mount_buf)) { $mount_buf[1] .= "," . $mount_buf[2]; } elseif (!preg_match("#" . $df_buf[0] . "(.*) on " . $df_buf[5] . " \\((.*)\\)#", $mount_line, $mount_buf)) { continue; } $strFstype = substr($mount_buf[1], 0, strpos($mount_buf[1], ",")); if (SysInfo::hide_fstype($strFstype)) { continue; } $current++; if ($show_bind || !stristr($mount_buf[2], "bind")) { $results[$j] = array(); $results[$j]['disk'] = str_replace("\\\$", "\$", $df_buf[0]); $results[$j]['size'] = $df_buf[1]; $results[$j]['used'] = $df_buf[2]; $results[$j]['free'] = $df_buf[3]; // --> Bug 1527673 if ($results[$j]['used'] < 0) { $results[$j]['size'] = $results[$j]['free']; $results[$j]['free'] = 0; $results[$j]['used'] = $results[$j]['size']; } // <-- Bug 1527673 // --> Bug 1649430 if ($results[$j]['size'] == 0) { break; } else { $results[$j]['percent'] = round($results[$j]['used'] * 100 / $results[$j]['size']); } // <-- Bug 1649430 $results[$j]['mount'] = $df_buf[5]; $results[$j]['fstype'] = $strFstype; $results[$j]['options'] = substr($mount_buf[1], strpos($mount_buf[1], ",") + 1, strlen($mount_buf[1])); if ($show_inodes && isset($inode_buf[count($inode_buf) - 1][1])) { $results[$j]['inodes'] = $inode_buf[count($inode_buf) - 1][1]; } $j++; unset($mount[$current - 1]); sort($mount); break; } } } } return $results; }