Zdravim! Nezkousel nekdo uz delat nejakou aplikaci, ktera by dovedla zjistit vsechny soubory + podadresare ktery jsou na serveru?
:-))
2Skocpik : hledej šmudlo, někde tady na foru máš komplet funkční zdroják, akorát je to děsně pomalé.
<? set_time_limit(0);?>
<pre>
<?
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$time_start = getmicrotime();
function tdir($path,$csize){
$dire=Dir($path);
$cntr=0;
while($pol=$dire->Read()){
$flnm=$path."/".$pol;
if(is_dir($flnm) && $pol!="." && $pol!=".."){
$csize=tdir($flnm,$csize);
}elseif($pol!="." && $pol!=".."){
$csize=$csize+filesize($flnm);
}
}
$dire->close();
return $csize;
}
$size=tdir("L:/php",0);
$time = getmicrotime() - $time_start;
echo $time."\n";
echo $size;
?>
</pre>
To ma byt ono? Kdyz sem to spustil, vyhodilo to tohle:
Warning: OpenDir: Invalid argument (errno 22) in c:\apache\htdocs\downmonitor\index.php on line 10
Fatal error: Call to a member function on a non-object in c:\apache\htdocs\downmonitor\index.php on line 12
$size=tdir("L:/php",0);
co je toto za cestu?
cesta k adresáři s PHP, jinak cesta k adresáři, jehož velikost chceš zjistit.
Jinak ta chyba...asi špatně nastavená cesta k tomu adresáři.
Kód níže Ti vypíše seznam $rowlimit adresářů, které překračují svou velikostí hodnotu $mblimit. Když si to upravíš, bude to to, co asi potřebuješ.
Pokud chceš ovšem pouze vypsat vsechny soubory a podadresare, ktere jsou v urcitem adresari (a nezajimaji Te dalsi vnorene podadresare, muzes to proste jednoduse a rychle projit ctenim adresare. Jinak rekurze, jak je to naznaceno v tom mem kodu dole. Kdybys mi ale toto spoustel na freehostu pro velke mnozstvi adresaru, asi bych Te zastrelil na miste.
ta promenna $class slouzi pouze pro formatovani vypisu pomoci css. Pokud zadas class do check_users_dirs, pouzije se, jinak to bude normalni vypis.
<?php
/
* @package directory size count
* @author Arnie Göbel, arnie@reikiweb.cz
* @version $Id: class_dir_count.php,v 0.3 2003/02/23 23:52:51 Arnie Exp $
*/
class Size
{
var $mblimit = 50; //max. MB disk space accepted for 1 user
var $rowlimit = 5; //show only first 'n' users, who are over $mblimit
/
* ---------------------------------------------------------------+
* method::dirsize()
*
* return size of all files & directories in $thisdir in var $size
* expect path to directory from method check_users_dirs
*
* ---------------------------------------------------------------+
*/
function dirsize($thisdir)
{
global $size;
$open = opendir($thisdir);
while ($file = readdir($open)) {
if ($file != "." && $file != "..") {
if (is_dir($thisdir . "\\" . $file)) {
$newdir = $thisdir . "\\" . $file;
$this->dirsize($newdir);
} else {
$size += filesize($thisdir . "\\" . $file);
}
}
}
closedir($open);
return $size;
}
/
* -------------------------------------------------------------
*
* { Description }
*/
function check_users_dirs($dir, $class = false)
{
global $size;
$allusersdir = opendir($dir);
while ($userdir = readdir($allusersdir)) {
if ($userdir != "." && $userdir != "..") {
if (is_dir($dir . "\\" . $userdir)) {
$actualdir = $dir . "\\" . $userdir;
$size2 = number_format(round($this->dirsize($actualdir) / 1e3, 2), 2, ",", "");
$dirarray[] = $userdir;
$sizearray[] = $size2;
$size = 0;
}
}
}
closedir($allusersdir);
arsort($sizearray, SORT_NUMERIC);
reset($sizearray);
$i = 1;
foreach($sizearray AS $key => $value) {
if ($i <= $this->rowlimit) {
print ($value > $this->mblimit*1000 ? ""
.($class ? "<span class=\"$class\">\n" : "")
."".$dirarray[$key]."-".$value." kB"
.($class ? "</span><br />" : "<br />")."" : "");
}
$i++;
}
}
}
$a = new Size();
$a->mblimit = 10;
$a->rowlimit= 3;
$a->check_users_dirs("D:\\Users","");
?>
nene, me jde o to, vypsat jenom jmena vsech souboru, adresaru a podadresaru a v nich vnorenych souboru. Velikosti souboru a adresaru me tolik nezajmaji.
Bože můj..tak si to uprav. Už tady máš dva skripty, ¨ze kterých bys to mohl dát do kupy.
nojo, jenze ja amater jsem nerozchodil ani jeden z nich :o(((
ked si tu funkciu tdir upravis takto tak fungovat bude (aspon tu na wz). Namiesto tej mriezky # pouzi radsej znak ktory sa v nazvoch suborov nemoze vyskytovat, lebo potom ti explode blbo rozdeli nazvy suborov.
<pre>
<?
function tdir($path,$csize){
$dire=opendir($path);
$cntr=0;
while(($pol=@readdir($dire)) !== false){
$flnm=$path."/".$pol;
if($pol != "." && $pol != ".." && is_dir($flnm)){
$csize=tdir($flnm,$csize);
}
elseif($pol!="." && $pol!=".."){
$csize.= $flnm."#";
}
}
closedir($dire);
return $csize;
}
$size=tdir("/uplna/cesta/k/hlavnemu/adresaru", "");
$size = explode("#", $size);
foreach($size as $value)
echo $value."<br>\n";
?>
</pre>
<? set_time_limit(0);?>
>>nemuze fakat, na WZ je tato FC zakazana
<pre>
<?
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$time_start = getmicrotime();
function tdir($path,$csize){
$dire=Dir($path);
$cntr=0;
while($pol=$dire->Read()){
$flnm=$path."/".$pol;
if(is_dir($flnm) && $pol!="." && $pol!=".."){
$csize=tdir($flnm,$csize);
}elseif($pol!="." && $pol!=".."){
$csize=$csize+filesize($flnm);
}
}
$dire->close();
return $csize;
}
$size=tdir("L:/php",0);
>>nemuzes pouzivat uplnou cestu, nybrz musis pouzivat relativni tedy naprd ./php
$time = getmicrotime() - $time_start;
echo $time."\n";
echo $size;
?>
</pre>
<? set_time_limit(0);?>
>>nemuze fakat, na WZ je tato FC zakazana
<pre>
<?
function getmicrotime(){
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
$time_start = getmicrotime();
function tdir($path,$csize){
$dire=Dir($path);
$cntr=0;
while($pol=$dire->Read()){
$flnm=$path."/".$pol;
if(is_dir($flnm) && $pol!="." && $pol!=".."){
$csize=tdir($flnm,$csize);
}elseif($pol!="." && $pol!=".."){
$csize=$csize+filesize($flnm);
}
}
$dire->close();
return $csize;
}
$size=tdir("L:/php",0);
>>nemuzes pouzivat uplnou cestu, nybrz musis pouzivat relativni tedy naprd ./php
$time = getmicrotime() - $time_start;
echo $time."\n";
echo $size;
?>
</pre>