[php:1:4cd1208c37]<?
// quota class v1.0
// Copyright©2004 by Krzysztof Andrzej Błachut [Bakus]
// E-Mail: kab@o2.pl
// All rights reserved
// error_reporting(E_ALL);
ob_start();
clearstatcache();
class quota
{
var $katalog = '';
var $user = '';
var $rozmiar = 0;
var $rozmiar_kb = 0;
var $rozmiar_mb = 0;
var $max_rozmiar = 0;
function pokaz($dir)
{
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false)
{
if($file != '.' && $file != '..')
{
if(is_dir($dir . $file . ''))
{
$this->pokaz($dir . $file . '');
}else{
$this->rozmiar += filesize($dir . $file);
}
}
}
closedir($dh);
}
}
function przelicz()
{
$this->pokaz($this->katalog . '');
$this->rozmiar_kb = round($this->rozmiar/1024, 2);
$this->rozmiar_mb = round($this->rozmiar_kb/1024, 2);
}
function pokaz_postep()
{
$wolne = $this->max_rozmiar - $this->rozmiar_mb;
$zajete = $this->rozmiar_mb;
$cale = $this->max_rozmiar;
$wolne_procent = round(($wolne/$cale)*100, 2);
$zajete_procent = round(($zajete/$cale)*100, 2);
print '<TABLE ALIGN="CENTER" WIDTH="335" BORDER="0" STYLE="font-family: Verdana, Tahoma, MS Sans Serif; font-size: 10pt;';
if($wolne <= 0) print ' background: #FF8040;"'; else print ' background: #FFFFFF;"';
print '">'."n";
print '<TR><TD ALIGN="CENTER" COLSPAN="5"><B>'.$this->user.'</B></TD></TR>'."n";
print '<TR><TD WIDTH="5" ROWSPAN="4"> </TD><TD WIDTH="125"';
if($wolne <= 0) print ' STYLE="color: #FFFFFF;"';
print '>Miejsce wolne:</TD><TD ALIGN="RIGHT"';
if($wolne <= 0) print ' STYLE="color: #FFFFFF;"';
print '>'.number_format($wolne, 2, '.', ' ').' MB</TD><TD ALIGN="RIGHT"';
if($wolne <= 0) print ' STYLE="color: #FFFFFF;"';
print '>'.number_format($wolne_procent, 2, '.', ' ').' %</TD><TD WIDTH="5" ROWSPAN="4"> </TD></TR>'."n";
print '<TR><TD WIDTH="125"';
if($wolne <= 0) print ' STYLE="color: #FFFFFF;"';
print '>Miejsce zajęte:</TD><TD ALIGN="RIGHT"';
if($wolne <= 0) print ' STYLE="color: #FFFFFF;"';
print '>'.number_format($zajete, 2, '.', ' ').' MB</TD><TD ALIGN="RIGHT"';
if($wolne <= 0) print ' STYLE="color: #FFFFFF;"';
print '>'.number_format($zajete_procent, 2, '.', ' ').' %</TD></TR>'."n";
print '<TR><TD WIDTH="125"';
if($wolne <= 0) print ' STYLE="color: #FFFFFF;"';
print '>Miejsce całkowite:</TD><TD ALIGN="RIGHT"';
if($wolne <= 0) print ' STYLE="color: #FFFFFF;"';
print '>'.number_format($cale, 2, '.', ' ').' MB</TD><TD ALIGN="RIGHT"';
if($wolne <= 0) print ' STYLE="color: #FFFFFF;"';
print '>'.number_format(($wolne_procent+$zajete_procent), 2, '.', ' ').' %</TD></TR>'."n";
if($zajete_procent <= 100)
print '<TR><TD ALIGN="CENTER" HEIGHT="15" COLSPAN="3"><IMG SRC="./stan.gif" WIDTH="'.round(($zajete_procent * 2), 0).'" HEIGHT="6" BORDER="0" ALT=""><IMG SRC="./stanbg.gif" WIDTH="'.number_format(round(($wolne_procent * 2), 0), 2, '.', ' ').'" HEIGHT="6" BORDER="0" ALT=""></TD></TR>'."n";
else
print '<TR><TD ALIGN="CENTER" HEIGHT="15" COLSPAN="3"> </TD></TR>'."n";
print '</TABLE><BR> '."nn";
}
function alert($adres)
{
if($this->max_rozmiar <= $this->rozmiar_mb)
{
@mail($adres, "Przekroczona quota!", "Została przekroczona maksymalna quota [" . $this->max_rozmiar . " MB] dla katalogu:n" . $this->katalog);
}
}
function sprawdz($katalog_uzytkownikow, $quota, $adres="", $pokaz=true)
{
print '<HTML><HEAD>' . "n";
print '<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=iso-8859-2">' . "n";
print '<META HTTP-EQUIV="Pragma" CONTENT="no-cache">' . "n";
print '<META HTTP-EQUIV="Reply-to" CONTENT="kab@o2.pl">' . "n";
print '<META NAME="Author" CONTENT="Krzysztof Andrzej Błachut">' . "n";
print '<TITLE>QUOTA</TITLE></HEAD>' . "n";
print '<BODY BGCOLOR="#D4D4D4" STYLE="background: #D4D4D4">' . "n";
if ($dh = opendir($katalog_uzytkownikow))
{
while (($file = readdir($dh)) !== false)
{
if($file != '.' && $file != '..')
{
if(is_dir($katalog_uzytkownikow . '' . $file))
{
$k = new quota;
$k->katalog = $katalog_uzytkownikow . '' . $file . '';
$k->max_rozmiar = $quota;
$k->user = $file;
$k->przelicz();
if($pokaz) $k->pokaz_postep();
if($adres) $k->alert($adres);
unset($k);
ob_flush();
}
}
}
closedir($dh);
}
print "</BODY></HTML>n";
}
}
quota::sprawdz("X:Users", 500);
/*
Sposób uruchamiania:
Wywołujemy funkcję sprawdz klasy quota.
Parametry funkcji sprawdz:
1. Katalog użytkowników. Parametr wymagany!
2. Quota - podawana w MB! Parametr wymagany!
3. Adres e-mail. Parametr nie wymagany. Gdy pusty (domyślnie) nic się nie stanie. Opis poniżej.
4. Pokazywać użycie quoty? Parametr nie wymagany. Gdy jest ustawiony na "true" (domyślnie) funkcja pokaże tabele z graficzną interpretacją użycia quoty.
W przypadku, gdy wywołujemy skrypt z wiersza poleceń (np. co jakiś czas przez cron) należy podać 3 parametr - adres e-mail - by zostać poinformowanym, którzy użytkownicy przekroczyli quotę, oraz ustawić 4 parametr na "false", by dane nie były wyświetlane.
Przykłady użycia:
-------------------------------------------------------------------------------
Założenia:
Posiadamy dysk X który przechowuje katalogi użytkowników. Jeden katalog - jeden użytkownik. Czyli dla przykładu: X:Andrzej to katalog użytkownika "Andrzej".
Klasa jest użyta w skrypcie na stronie internetowej.
Quota dla jednego użytkownika to 500 MB.
Użycie: quota::sprawdz("X:", 500);
-------------------------------------------------------------------------------
Założenia:
Posiadamy dysk X który przechowuje katalogi użytkowników. Jeden katalog - jeden użytkownik. Czyli dla przykładu: X:Andrzej to katalog użytkownika "Andrzej".
Quota dla jednego użytkownika to 500 MB.
Klasa jest użyta w skrypcie wywoływanym przez cron'a.
Nasz adres e-mail na który mają przychodzić ostrzeżenia o przekroczeniu quoty to: admin@serwer.pl
Użycie: quota::sprawdz("X:", 500, "admin@serwer.pl", false);
-------------------------------------------------------------------------------
*/
?>[/php:1:4cd1208c37]
Wyjaśnienie chyba czytelne...
U mnie działa jak złoto...
Na dobry początek skopiujcie sobie całość do jakiegoś pliku na serwerze WWW (TYLKO WINDOWS), zmieńcie ścieżkę do katalogu i zobaczcie efekt w przeglądarce...
Obrazki potrzebne do ładnego działania:
http://kab.zamowienia.com/forum.php.pl/quota_img.zip