De code

HTTP compressie in PHP is best makelijk te realiseren.

Hieronder wat voorbeeld code en dan de uitleg:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
error_reporting(E_ALL);

$iTime = array_sum(explode(' ', microtime()));

//ob_start('ob_gzhandler');
ob_start('_gzhandler');

function
_gzhandler( $_mData, $_iLevel )
{

    $bDebug = true;

    # $_iLevel is standaard 5
    $_iLevel = 2;

    # Accepteerd de client gzip, zo ja gaat de compressie goed
    if(    strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') === false
        || ($mResult = gzencode($_mData, $_iLevel)) === false )
    {

        return false;
    }


    # Debug info weergeven in de statusbalk
    # Nadeel is wel dat we voor een 2e keer de content
    # gaan inpakken, maar ja dit is debug mode he.

    if( $bDebug )
    {

        $iLen    = strlen($_mData);
        $iLen_c    = strlen($mResult);

        $_mData .=    '<script>window.status=\'length: ' . $iLen . ' / ' . $iLen_c .
                    ' ratio: 1 / ' . round($iLen/$iLen_c, 2) . ' level: ' . $_iLevel . '\';</script>';
    
        $mResult = gzencode($_mData, $_iLevel);
    }


    # Verstuur header en content
    header('Content-Encoding: gzip');
    return $mResult;

}
# End function _gzhandler

echo '<html><title>blaat</title><head></head><body>
blaat blaat blaat blaat blaat blaat blaat blaat
blaat blaat blaat blaat blaat blaat blaat blaat
blaat blaat blaat blaat blaat blaat blaat blaat
blaat blaat blaat blaat blaat blaat blaat blaat
</body></html>'
;


echo round(array_sum(explode(' ', microtime())) - $iTime, 4);

?>


We zullen even door de code heel lopen:

- regel 2: Alles wat er verkeerd gaan willen we graag kunnen zien.

- regel 4 en 51: Berekenen van de uitvoertijd;

- regel 6 en 7: PHP functie "ob_start" deze roept de functie aan die in de parameter is opgegeven als "output buffering" stop of het script wordt afgesloten.
Mijn eigen functie "_gzhandler" is vergelijkbaar met de PHP functie "ob_gzhandler". Met als verschil dat als de browser geen HTTP 1.1 heeft dan ziet de gebruiker niets omdat de functie "ob_gzhandler" dan boolean false terug geeft.

- regel 9 t/m 41: De "_gzhandler" functie, deze is al redelijk goed uitgelegd.
In de functie zie je de variabele "$bDebug" staan, zet deze op false om geen informatie meer in de statusbalk te krijgen;

- regel 43 t/m 48: De uitvoer, speel hier wat mee om te kijken wat de compressie verhouden wordt bij verschillende hoeveelheden data. In dit voorbeeld is de verhouden 1 / 3.25. De data is dus 3.25 keer kleiner geworden, de webserver kan dus 3.25 keer meer data versturen voor deze hoeveelheid gegevens.


Ik hoop dat je wat hebt opgestoken van deze tutorial en dat je weer wat nieuwe dingen hebt geleerd.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. De code

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.