Tips en Trucs 2017

Dashboard

PHP is een programmeertaal waarmee je snel iets kunt schrijven. En het laat je toe om een browser als gebruikersomgeving te gebruiken. En iedereen heeft en gebruikt een browser.

Met PHP maak je dus programma's die werken in de browser die door iedereen gebruikt kunnen worden. Ook voor zaken die je normaal via een terminal zou uitvoeren. Zelfs het beheren van een computer op afstand.

PHP kan lokale opdrachten op de server uitvoeren. Als je voor een taak een bash script kunt schrijven, kan je deze met behulp van PHP in de browser weergeven. We maken als voorbeeld een bedieningspaneel (dashboard) met verschillende knoppen waarmee je verschillende opdrachten op de server kunt uitvoeren.

Het PHP script

Plaats het volgende script in het bestand dashboard.php in de rootmap van uw lokale webserver. Vanzelfsprekend moet PHP op de webserver geactiveerd zijn. Het opzetten van een webserver met PHP ondersteuning behandelen we vandaag niet, maar daar kan je op internet verschillende handleidingen over vinden (voor openSUSE: SDB: LAMP setup).

De bestandsnaam van het script is belangrijk, want als je naar de code kijkt, merk je dat deze naar zichzelf verwijst. Wil je een andere bestandsnaam gebruiken, verander dan tevens de referenties in de code.

<html><head><title>Dashboard</title></head>
<body>
<h3>Klik op een knop:<br />
<button onclick="window.location='dashboard.php?command=weather&option=brugge'">Weerbericht</button>
<button onclick="window.location='dashboard.php?command=bing'">Bing Foto</button>
<button onclick="window.location='dashboard.php?command=uname'">Kernel Informatie</button>
<button onclick="window.location='dashboard.php?command=time'">Unix Tijd</button>
</h3>

<?php

$command = $_GET['command'];
$option = $_GET['option'];

switch ($command)
{
    case "weather":
        echo file_get_contents("http://wttr.in/$option");
        break;
    case "time":
        echo time() . "  <-- Zo lees ik de tijd! Ik ben een computer!";
        break;
    case "bing":
        $json = json_decode(file_get_contents("http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&mkt=en-US"), TRUE);
        $url = "http://bing.com" . $json['images']['0']['url'];
        echo "Foto van de dag:\n";
        echo "<img src=$url />";
        break;
    case "uname":
        echo shell_exec("uname -a");
        break;
    default:
        echo "<h1>Klik op een knop!</h1>";

}

?>
</body></html>

Surf met uw browser naar uw webserver. Als je klikt op de knop Weerbericht zie je het adres in de adresbalk veranderen (zie afbeelding). Alles na het vraagteken zijn variabelen die door het PHP script verwerkt kunnen worden. De GET opdrachten in het script zorgen voor het opvragen van de via de URL doorgegeven variabelen (command en option).
Weerbericht

Bij het klikken op een knop wordt het script opnieuw uitgevoerd met aangepaste variabelen. De switch opdracht bekijkt de inhoud van de variabele command. Binnen de switch opdracht wordt met case opdrachten de inhoud van de command variabele vergeleken. Komt deze overeen met de case inhoud dan wordt een bepaalde opdracht uitgevoerd.

HTML code

Het PHP script begint met een stuk HTML code waarmee we een zin en vier knoppen op de webpagina plaatsen. De vier knoppen sturen het PHP script telkens met andere variabelen in de URL.

De PHP code

In de tag <?php ... ?> staat ons PHP programma. Eerst halen we de variabelen command en option uit de URL.

Het weerbericht

Bevat de variabele command de inhoud weather, dan wordt met de PHP opdracht file_get_contents het weerbericht van het internet gehaald. De PHP opdracht echo plaatst daarna het ontvangen weerbericht op onze webpagina.

Unix Tijd

Bevat de variabele command de inhoud time, dan wordt met de PHP opdracht time() de Unix tijd (groot getal) met een begeleidende zin op de webpagina geplaatst.

Bing Foto van de dag

Voor de Bing Foto van de dag, vragen we aan de Microsoft webserver informatie in het JSON formaat op. De JSON informatie slaan we op in een PHP array, waaruit we de URL van de foto halen. Deze geven we dan weer op onze webpagina met een img HTLM-tag.

Terminal opdrachten

De Kernel informatie vragen we op met de terminal opdracht uname via de PHP opdracht shell_exec(). De uitvoer van de terminal opdracht plaatsen we daarna op de webpagina.

En anders

Heeft de variabele command een andere niet verwerkbare inhoud, dan wordt de default: tak van de switch uitgevoerd. Hier met een duidelijke richtlijn om op een knop te klikken.

Foutzoeken

Om fouten in een PHP script op te sporen, kan je de foutmeldingen in de webpagina laten verschijnen. Dit is nogal omslachtig, vandaar dat ik dikwijls mijn toevlucht neem tot het uitvoeren van het PHP script buiten de webserver. Dan krijg je meteen alle opmerkingen van PHP te zien.

dany@pindabook:~> php /srv/www/htdocs/linux/dashboard.php
<html><head><title>Dashboard</title></head>
<body>
<h3>Klik op een knop:<br />
<button onclick="window.location='dashboard.php?command=weather&option=brugge'">Weerbericht</button>
<button onclick="window.location='dashboard.php?command=bing'">Bing Foto</button>
<button onclick="window.location='dashboard.php?command=uname'">Kernel Informatie</button>
<button onclick="window.location='dashboard.php?command=time'">Unix Tijd</button>
</h3>

PHP Notice:  Undefined index: command in /srv/www/htdocs/linux/dashboard.php on line 12
PHP Notice:  Undefined index: option in /srv/www/htdocs/linux/dashboard.php on line 13