PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auslesen des freien Speicherplatzes


Anja
21.10.2005, 12:28:55
Bitte um Hilfe !

Ich möchte den freien Speicherplatz meiner Domain auslesen.
Allerdings zeigt mir "diskfreespace" immer den Speicherplatz der Festplatte an. Die geschied auch, wenn ich eine Pfadangabe mache.

<?php
$dsfb = diskfreespace("Verzeichnis_meiner_Domain");
$dsfk = $dsfb /1024;
$dsfm = $dsfb /1024 / 1024;
echo " <b> Byte:</b> " . $dsfb . "<br>";
echo " <b>KiloByte: </b>" . $dsfk . "<br>";
echo " <b>MegaByte: </b>" . $dsfm . "<br>";
?>

Stevie B.
21.10.2005, 12:56:51
diskfreespace() ist ein Alias von dem überall abgeraten wird. Benutze besser disk_free_space( string directory ).$df = disk_free_space("/");
echo "<b>Byte:</b> ".$df."<br>";
echo "<b>KiloByte:</b> ".($df/1024)."<br>";
echo "<b>MegaByte:</b> ".round($df/1024/1024,2)."<br>";

Anja
21.10.2005, 13:21:27
Ich habe getestet, aber wie zuvor gibt er mir den freien Platz der Serverplatte aus.

<?php
$df = disk_free_space("/homeverzeichnis/www.domain.de/");
echo "<b>Byte:</b> ".$df."<br>";
echo "<b>KiloByte:</b> ".($df/1024)."<br>";
echo "<b>MegaByte:</b> ".round($df/1024/1024,2)."<br>";
?>

Ausgabe:
MegaByte: 98662.32

Das ist zuviel, so viel Platz habe ich dort nicht zur Verfügung.

Stevie B.
21.10.2005, 13:35:37
<?php
function disk_used_space($drive) {
return disk_total_space("$drive") - disk_free_space("$drive");
}
echo round((disk_used_space("/")/1024)/1024,2)." MB";
?>

Anja
21.10.2005, 14:11:47
Das war wieder nix :-(

<?php
$drive = ("/home/www.domain.de/");
function disk_used_space($drive)
{
return disk_total_space("$drive") - disk_free_space("$drive");
}
echo round((disk_used_space("$drive")/1024)/1024,2)." MB";
?>

Ausgabe:
32998.02 MB
Immer noch die ganze Serverplatte, vermut ich mal.

Matt
21.10.2005, 14:26:17
nunja, soweit ich weiss, kannst du dir das Disk Quota mit (also den platz, den du hast!) mit dem Konsolen kommando "quota" anzeigen lassen. Diese informationen müsstest du allerdings noch auswerten.
ein Konsolen kommando kannst du mir

$result=´quota´;
aufrufen. die rückgabe kommt dann in $result. Kann aber sein, dass dein anbieter das nicht erlaubt. In dem fall kann ich dir auch nicht weiterhelfen.

Anja
21.10.2005, 14:55:22
Geht irgendwie auch nicht !

ABER so kann ich den belegten Speicher auslesen.
MÖCHTE ABER auch den freien Speicherplatz wissen.

<?
$spacePath="/homeverzeichnis/www.domain.de/";
exec("du -s $spacePath", $du);
$spaceUsed = split(" ", $du[0]);
$spaceUsed = $spaceUsed[0] / 1024;
$spaceUsed = round($spaceUsed,2);
echo "Belegter Speicher:.".str_replace(".",",",$spaceUsed)." MB";
?>

meikel (†)
21.10.2005, 16:50:00
ABER so kann ich den belegten Speicher auslesen.
MÖCHTE ABER auch den freien Speicherplatz wissen.
Einfach ausrechnen. PHP beherrscht auch die Subtraktion.

Anja
21.10.2005, 17:08:17
Entschuldige, aber so schlau war ich auch schon.
Ich möchte die Info vom Server haben.
Ich denke das macht mehr Sinn und wäre genauer.

Vielleicht fällt jemand ja noch was dazu ein.

Ich bin für jede Anregung dankbar!!!

Stevie B.
22.10.2005, 00:05:55
Wenn Du weißt, wovon ich ausgehe, wieviel Webspace in Deinem Paket enthalten ist, kannst Du es so probieren:
<?php
$totalspace = 500; //Gesamt in MB - hier bitte anpassen
$tSpace = ($totalspace*1024)*1024; //Gesamt in Bytes - und hier anpassen
$root = realpath("../html/"); //ggf. root-dir anpassen
$result=array();

function GetUsedSpace($dir) {
global $result;
$subdirs=array();
$dirh=opendir($dir);
while($filename=readdir($dirh)) {
if($filename!=".." && $filename!=".") {
if(is_file($dir."/".$filename)) {
$space += filesize($dir."/".$filename);
}
elseif(is_dir($dir."/".$filename)) {
$subdirs[]=$dir."/".$filename;
$space += filesize($dir."/".$filename);
}
}
}
$result[] = $space;
closedir($dirh);
for($i=0;$i<count($subdirs);$i++) {
GetUsedSpace($subdirs[$i]);
}
}

GetUsedSpace($root);
foreach ($result as $size) {
$space += $size;
}

//Ausgabe:
print "Gesamter Speicherplatz: ".$totalspace." MB<br>";

if ($space < 1024) {
$vSpace = $space." Bytes";
} elseif ($space < (1024*1024)) {
$vSpace = round($space/1024,2)." KB";
} elseif ($space < (1024*1024*1024)) {
$vSpace = round(($space/1024)/1024,2)." MB";
} elseif ($space < (1024*1024*1024*1024)) {
$vSpace = round((($space/1024)/1024)/1024,2)." GB";
}
print "Verbrauchter Speicherplatz: ".$vSpace."<br>";

$free = $tSpace-$space;
if ($free < 1024) {
$fSpace = $free." Bytes";
} elseif ($free < (1024*1024)) {
$fSpace = round($free/1024,2)." KB";
} elseif ($free < (1024*1024*1024)) {
$fSpace = round(($free/1024)/1024,2)." MB";
} elseif ($free < (1024*1024*1024*1024)) {
$fSpace = round((($free/1024)/1024)/1024,2)." GB";
}
print "Freier Speicherplatz: ".$fSpace."<br>";
?>

meikel (†)
22.10.2005, 03:27:14
Entschuldige, aber so schlau war ich auch schon.
Ich möchte die Info vom Server haben.
Ich denke das macht mehr Sinn und wäre genauer.
Wenn es so eine PHP Funktion nun mal nicht gibt, wirst Du wohl oder übel selber rechnen müssen.

1. merke Dir die Größe des erlaubten Webspaces

Falls Du Shellzugriff via PHP hast, dann nutze 'du'. Die Optionen kriegste mit 'du --help' raus. Ob Dich der Provider ab 'quota' ranläßt, weiß ich nicht. Dürfte allerdings sinnfrei sein, wenn das Script vom Apachen ausgeführt wird.

Falls nicht:
2. erfrage beim Provider, wie groß die Inodes sind. In der Regel sind es 4096 Bytes
3. ermittle die Anzahl der Inodes, die die Dateien belegen. Verzeichnisse belegen mindestens einen Inode.
4. print $erlaubter_webspace - ($inodes * $inode_groesse)

Hinweis:
beachte Punkt 3. Es ist schon ein kleiner Unterschied, ob das Script 90KB oder nur 60KB ermittelt, weil Du nur filesize() addierst