you may check this out working with % of disk usage (log object may comes from pear or just remove the log lines)
, flobee
<?php
// return true on error!
// on false: fine :-)
function check_disk_free_space($path) {
global $oLog;
// seconds a time-compare will be OK during the process (if it takes longer)
// (limit the number if you have huge file movements to beware crashes
// or "disk-full"- errors)
$secCmp = 60;
// max allowed/free size compare Value
$sizeCmp = 92;
// windows user get www.cygwin.com
$cmd = 'c:/cygwin/bin/df.exe -a '. $path;
$now = time();
$_v = array();
static $paths = null;
static $sizes = null;
static $times = null;
if ($paths===null) {
$paths = array();
$sizes = array();
$times = array();
}
if (($i=array_search($path,$paths)) && (($now-$times[$i]) < $secCmp)) {
if($sizes[$i] >= $sizeCmp) {
$oLog->log('disc space overflow: '.$sizes[$i].' ('.$sizeCmp.' is max limit!) for path: '.$path, 3);
return false;
} else {
$oLog->log('disc space OK: '.$sizes[$i].'% ('.$sizeCmp.' is max limit!) for path: '.$path, 6);
return true;
}
}
$oLog->log('getting free space for: '. $path, 6);
$result = exec($cmd, $data, $return);
$oLog->log('cmd: '. $cmd, 7);
if ($result) {
$r = explode(' ', $data[1]);
while(list($a,$b) = each($r)) {
$b = trim($b);
if ( $b != '') {
$_v[] = $b;
}
}
$oLog->log($_v, 7);
$size = intval($_v[4]);
$paths[] = $path;
$sizes[] = $size;
$times[] = time();
if($size >= $sizeCmp) {
$oLog->log('disc space overflow: '.$sizes[$i].' ('.$sizeCmp.' is max limit!) for path: '.$path, 3);
return false;
} else {
$oLog->log('disc space OK: '.$sizes[$i].' ('.$sizeCmp.' is max limit!) for path: '.$path, 6);
return true;
}
/*
echo '$return: ' . $return .'<br><pre>';
echo print_r($data);
echo '</pre>';
*/
} else {
$oLog->log('error can not get size', 3);
return true;
}
}
check_disk_free_space(getcwd());
?>