Webprofis is een Forum waarin je vragen kunt stellen die webgerelateerd zijn. Heb je vragen over of problemen met je Webpagina, HTML, CSS, Javascript, PHP of andere client of serverside scriptingtalen? Stel ze dan gerust op dit forum. Op dit forum zijn een aantal vrijwilligers actief die u graag met uw vragen willen helpen en u waar mogelijk een passend antwoord aanbieden. Hebt u zelf veel ervaring en kennis met betrekking tot het bovenstaande? U bent van harte welkom om uw kennis met anderen te delen!

We hopen dat eenieder op dit Forum een leerzame ervaring mag opdoen.

Team Webprofis

Server space functie

bewerkt zo 3 jan 2016 in PHP, MySQL Posts: 732
Ik gebruik een functie om te kijken hoeveel ruimte er wordt gebruikt en beschikbaar is.
Als hier op pc controleer werkt het 100% maar zodra ik het online zet werkt de % weergave niet meer.

Iemand een suggestie:

PHP functie:


define( 'SERVER_ROOT', dirname(__FILE__) . '/' );

echo serverSpace ( SERVER_ROOT );

function serverSpace( $path ) {

$html = '';

$diskStatus = new RvdCmsStatus( $path );
$freeSpace = $diskStatus->freeSpace();
$totalSpace = $diskStatus->totalSpace();
$barWidth = ( $diskStatus->usedSpace()/100 ) * 400;

$html .= ' <div class="progress">
<div class="progress-bar progress-bar-info progress-bar-striped" role="progressbar" aria-valuenow="'. $barWidth . '" aria-valuemin="0" aria-valuemax="100" style="width:'. $barWidth . '%">
' . $diskStatus->usedSpace() . '%&nbsp;
</div>
</div>' . "\r\n";
$html .= ' Gebruikt: ' . $freeSpace .' ( van de '. $totalSpace .' )' . "\r\n";

return $html;

}

Class


class RvdCmsStatus {

const RAW_OUTPUT = true;
private $diskPath;

function __construct( $diskPath ) {
$this->diskPath = $diskPath;
}

public function totalSpace( $rawOutput = false ) {
$diskTotalSpace = @disk_total_space( $this->diskPath );
if ( $diskTotalSpace === FALSE ) {
trigger_error( "RVDCMS::totalSpace(): Invalid disk path.", E_USER_ERROR );
}
return $rawOutput ? $diskTotalSpace : $this->addUnits($diskTotalSpace);
}

public function freeSpace( $rawOutput = false ) {
$diskFreeSpace = @disk_free_space( $this->diskPath );
if ( $diskFreeSpace === FALSE ) {
trigger_error( "RVDCMS::freeSpace(): Invalid disk path.", E_USER_ERROR );
}
return $rawOutput ? $diskFreeSpace : $this->addUnits($diskFreeSpace);
}

public function usedSpace( $precision = 1 ) {
try {
return round( ( 100 - ( $this->freeSpace( self::RAW_OUTPUT ) / $this->totalSpace( self::RAW_OUTPUT ) ) * 100 ), $precision );
} catch (Exception $e) {
throw $e;
}
}

public function getDiskPath() {
return $this->diskPath;
}

private function addUnits($bytes) {
$units = array( 'B', 'KB', 'MB', 'GB', 'TB' );
for( $i = 0; $bytes >= 1024 && $i < count( $units ) - 1; $i++ ) {
$bytes /= 1024;
}
return round( $bytes, 1).' '.$units[$i];
}
}

Weergave:
(boven is online en onder op pc)
image
voorbeeld.jpg
536 x 280 - 72K
If it's not fun, you're not doing it right!

Reacties

  • bewerkt zo 3 jan 2016
    PMPosts: 415
    Ik gok maar wat hoor, maar heb jij dedicated hosting, of shared, of vps of.... en zou het er mee te maken kunnen hebben dat je daar maar een stukje van de gehele ruimte toegewezen krijgt?

    edit, vergeet bovenstaande maar :P
    ik denk dat ik het al weet, maar update zodra ik het zeker weet met de oplossing

    update:
    Je hebt sowieso een foutje in je html return, want je zegt Gebruikt: 441.5 maar dat moet Vrij zijn.
    Daarnaast klopt het local bij jou ook niet, want hij geeft veel meer aan dan 5%, eerder iets in de strekking van 20%.
    Verder heb ik dit in elkaar gefoefeld zodat het wel zal moeten kloppen.
    Er komt een extra parameter bij in de aanroep, namelijk de breedte van het parent element waarmee ik de "bar" maak, enfin, de code zal het wel duidelijk maken hoop ik.

    <?php
    define( 'SERVER_ROOT', dirname(__FILE__) . '/' );
    ?>

    <div style="width:500px; height:20px; border:solid 1px red">
    <!--note de 500px breedte in de bovenstaande div en de 500 in de aanroep hieronder -->
    <div style="width:<?php echo rest_barwidth(SERVER_ROOT, 500);?>px; height:20px; background-color:red"></div>
    </div>

    <?php
    function rest_barwidth($path, $barwidth = 100){
    $diskStatus = new RvdCmsStatus( $path );
    $used = $diskStatus->usedSpace();
    return ($used / 100 ) * $barwidth;
    }

    update2

    echo rest_barwidth(SERVER_ROOT, 500); //genereerd een bar van 500 breed

    function rest_barwidth($path, $barwidth = 100){
    $diskStatus = new RvdCmsStatus( $path );
    $used = $diskStatus->usedSpace();
    $bar = "<div style='width:".$barwidth."px; height:20px; border:solid 1px red'>\n";
    $bar .= "\t<div style='width:".($used / 100 ) * $barwidth."px; height:20px; background-color:red; color:white'>".$used." %</div>\n</div>";
    return $bar;
    }
  • PMPosts: 732
    Snap wat je doet, maar door de bar een vaste waarde te geven is die niet responsive?

    Misschien een script eraan vast hangen dat hij kijkt naar de resolutie en dan bepaalde width per resolutie of denk ik te ver ?
    If it's not fun, you're not doing it right!
  • bewerkt zo 3 jan 2016
    PMPosts: 415
    Je vroeg het in php, dus kreeg je een php oplossing.
    Met jouw opstelling had het ook niet responsive geweest (en daarbij was dat de hele vraag niet) ;-)

    Daarnaast lijkt het me ongebruikelijk dat je een cms met een smartphone wilt beheren, maar soit.

    Je kunt het wel responsive krijgen middels javascript, die inderdaad de parent resizen n.a.v de viewport en met die waarde ook de bar weer resizen.

    In het friggin simpel gezegd zo iets:

    if (viewportwidth < $('#bar_parent').width() ){
    var diff = $('#bar_parent').width() - viewportwidth;
    $('#bar_parent').width(viewportwidth) ;
    $('#bar_child').width() - diff
    }

  • PMPosts: 732
    Heb hem even origineel gelaten, en door dat ik de width van de progress-bar niet in % zet maar in px klopt het nu wel, plus responsive.


    $html .= ' <div class="progress">
    <div class="progress-bar progress-bar-info progress-bar-striped" role="progressbar" aria-valuenow="'. $barWidth . '" aria-valuemin="0" aria-valuemax="100" style="width:'. $barWidth . 'px;">
    ' . $diskStatus->usedSpace() . '%&nbsp;
    </div>
    </div>' . "\r\n";
    $html .= ' Beschikbaar: ' . $freeSpace .' ( van de '. $totalSpace .' )' . "\r\n";

    Maar probleem zit bij de provider denk ik, zo te zien niet echt een stukje ruimte van je zelf.
    Dus server_root werkt niet.

    Zou eerder drie mappen moeten uitlezen, namelijk de map cms, template en de map uploads.
    Deze drie bij elkaar tellen en dan kan ik zien wat de website voor ruimte gebruikt.
    If it's not fun, you're not doing it right!
  • bewerkt zo 3 jan 2016
    PMPosts: 415
    ReneV schreef:: plus responsive.
    onmogelijk met een px waarde ;-)

    ReneV schreef:: Maar probleem zit bij de provider denk ik, zo te zien niet echt een stukje ruimte van je zelf.
    Dus server_root werkt niet.
    Dat is dan toch wat ik in mijn allereerste reactie vermelde. (al was dat irrelevant aan de vraag)

    Hoe op te lossen:
    ga ik even over denken.
    update -> https://gist.github.com/eusonlito/5099936
    Die toepassen lijkt me wel doenbaar?
  • PMPosts: 732
    Yep je eerste reactie daar zat je goed.
    Omtrent de weergave, dat klopt de % komen niet echt overeen met de bar.
    If it's not fun, you're not doing it right!
  • bewerkt zo 3 jan 2016
    PMPosts: 415
    Bij mij wel :p
    ps, zie mn update in de vorige post
    ReneV
Login of Registreer om te reageren.