![]() |
![]() |
![]()
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
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Obawiam się, że jeśli chodzi o to, to Apache nie ma na to wpływu, bo przecież i tak Twój użytkownik będzie ładował swoje pliki przez FTP albo SCP. Stąd - jeśli system operacyjny to Linux czy jakiś UNIX - ograniczenie wprowadza się na jego poziomie i nazywa się to quota; po to, żeby - niezależnie od sposobu w jaki Twój użytkownik wgrywa pliki, nie chapnął więcej, niż mu się należy. Ale to już chyba temat nie na to forum i z resztą wystarczy rzeczoną quotę wpisać do google'a a on już Ci powie, jak to dokładnie zrobić.
|
|
|
![]()
Post
#3
|
|
![]() 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%) ![]() ![]() |
To zależy... pod wingrozą nie masz jako takiej quoty...
Przydział partycji nie działa dla takich zastosowań... Natomiast masa serwerów FTP dla windowsa posiada ograniczenie wialkości plików jakie są przesyłane na serwer... Rezultat jest dobry, ale... Powierzenie tego serwerowi FTP nie ma jednak sensu, w przypadkach gdy daje się użytkownikom inną możliwość umieszczania plików na serwerze... -------------------- Powrót do przeszłości :)
![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Hmmm a można by podejść od drugiej strony. To znaczy np. zakładając że użytkownik przekroczy swój limit miejsca na serwerze to w takiej sytuacji zamiast tego co on chce żeby się wyświetlało, ukaże się jakaś inna strona (wcześniej przygotowana i umieszczona w odrębnym katalogu do którego nie ma dostępu użytkownik) np. z informacją o przekroczeniu limitu?
P.S. Coś mi się wydaje że mnie fantazja ponosi ![]() ![]() |
|
|
![]()
Post
#5
|
|
![]() 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%) ![]() ![]() |
Co jakiś czas sprawdzasz ile miejsca zajmuje jego katalog. W razie przekroczenia dopuszczalnej wartości serwujesz stronę o błędzie (np. podmieniając jego katalog na "75yrhd73jr", czy coś w tym stylu, blokując jego konto i wstawiając nowy katalog z jednym plikiem - index.htm - twoją stroną błędu...)
$1. Znacznie prościej napisać w regulaminie, że dopuszczalną wielkością konta jest ....... MB $2. W przypadku złamania zasad regulaminu konto może zostać wyczyszczone... Złamanie punktu 1 będzie stanowiło upoważnienie Twojej osoby do usunięcia danych z konta... lub inna propozycja do regulaminu: $1. W przypadku przekroczenia dopuszczalnej wielkości konto może zostać bez powiadomoenia wyczyszczone, lub usunięte... J/w tyle tylko, że w jednym punkcie... ![]() Możesz też wrzucić do menedżera zadań/crona by skrypt (nie nalegam, by był w php ![]() -------------------- Powrót do przeszłości :)
![]() |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Regulamin to już swoją drogą
![]() Skrypt był by chyba najlepszym rozwiązaniem ze względu na to że chciał bym aby działo się to raczej automatycznie bo wiadomo że nie zawsze będzie czas żeby sprawdzać. Żeby jak np. gdzieś wyjadę nie zabrakło miejsca na serwerze. Aha czy jest szansa żeby gdzieś chociaż znaleźć zalążek takiego skryptu czy ti raczej trzeba będzie samemu napisać bo przyznam się szczerze nie mam za bardzo pomysłu jak to ruszyć. Może dlatego że jestem dopiero na początku swojej przeprawy przez chociażby php ![]() Aha i dzięki za dotychczasową pomoc bo zgodnie z radą jak do tej pory znalazłem serwer ftp (nawet darmowy ![]() |
|
|
![]()
Post
#7
|
|
![]() 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%) ![]() ![]() |
Po południu wrzuce gotowca... też mi się przyda, więc zacząłem go pisać...
UPDATED: No... brak czasu spowodował przeciągnięcie się "projektu"... Ale nie zniechęcajci się... może w końcu coś wypłodzę... -------------------- Powrót do przeszłości :)
![]() |
|
|
![]()
Post
#8
|
|
![]() 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... ![]() 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 -------------------- Powrót do przeszłości :)
![]() |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
A czy można jeszcze zrobić tak żeby np. przy przekroczeniu quoty kopiował z jakiegoś katalogu lub sam tworzył plik u umieszczał go w katalogu w którym przekroczono limit.
Aha i Dzięki za skrypt, działa miodzio ![]() |
|
|
![]()
Post
#10
|
|
![]() 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%) ![]() ![]() |
Cytat A czy można jeszcze zrobić tak żeby np. przy przekroczeniu quoty kopiował z jakiegoś katalogu lub sam tworzył plik u umieszczał go w katalogu w którym przekroczono limit.
Pomiędzy liniami 93 i 94 wstawiasz polecenie [manual:adf94bb68a]copy[/manual:adf94bb68a]... Pracuję nad czymś takim: Gdy quota zostanie przekroczona pliki użytkownika zostają przeniesione do innego folderu (nie dostępnego publice), a do folderu zostaje zapisany plik index.htm który pokazuje: Kod W dniu {DATA} użytkownik {NAZWA_UZYTKOWNIKA} przekroczył przydzieloną mu powerzchnię dyskową ({QUOTA}MB).
Pliki użytkownika zostaną przywrócone po skontaktowaniu się użytkownika z administratorem systemu. Użytkownik, którego konto ma za dużo plików zostanie poinformowany o zajściu przez e-mail. Mam zamiar jeszcze dodać informowanie, że quota jest bliska wyczerpaniu... Jak to zrobie wrzuce kod na forum... -------------------- Powrót do przeszłości :)
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 31.07.2025 - 08:39 |