![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Mam pytanie. Jak w apachu przydziel wybranemu użytkownikowi konkretną ilość miejsca na dysku i/lub określić maksymalną wielkości pojedynczego pliku jaki może na serwerze umieścić?
|
|
|
![]() |
![]()
Post
#2
|
|
Administrator serwera Grupa: Przyjaciele php.pl Postów: 909 Pomógł: 0 Dołączył: 12.08.2003 Skąd: /var/www/wroclaw.php Ostrzeżenie: (0%) ![]() ![]() |
[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... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) 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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 15:46 |