Niklas Vincent

Automatisk verifikation av PHP-funktioner

I samband med att jag skrev recept till Chef behövde jag ett sätt att kontrollera att nya PHP-moduler verkligen fungerar. Syftet med receptet var att installera Apache, PHP, MySQL och nödvändiga PHP-moduler som memcache och imagick.

För att underlätta verifikationen av PHP-modulerna tog jag fram följande funktion (Bash):

# ${1} Name of functionality being checked (e.g. 'imagick')
# ${2} PHP code snippet used for verification
# ${3} Expected result if test is successful
function verify_php {
    echo "Checking ${1}"
    /etc/init.d/apache2 restart 1>/dev/null 2>&1
    echo ${2} > /var/www/index.php
    if [[ $(wget 127.0.0.1/index.php -O - 2>/dev/null) == ${3} ]]
        then
        echo  "${1} working correctly"
    else
        echo "Could not verify a working ${1} installation"
    fi
}

Funktionen i sig är väldigt enkel:

  1. Ersätt /var/www/index.php med en rad PHP-kod som utför testet
  2. Använd wget för att se resultatet av PHP-koden
  3. Jämför utdatan från PHP-skriptet med ett förväntat resultat

Exempel på tester:

Testa om PHP fungerar korrekt. PHP-koden skriver ut användarens IP-adress. Det förväntade resultatet är 127.0.0.1 (localhost):

verify_php 'PHP' '<?php echo $_SERVER["REMOTE_ADDR"]; ?>' '127.0.0.1'

Testa om Imagick är installerat:

verify_php 'Imagick' '<?php if ( ! class_exists("Imagick") ) { die("1"); } die("0"); ?>' '0'

Testa om memcache fungerar korrekt. Ansluter till memcache och ger variabeln var_key ett värde:

verify_php 'memcached' '<?php if ( ! function_exists("memcache_connect") ) { die(1); }

$memcache_obj = memcache_connect("localhost", 11211);

memcache_set($memcache_obj, "var_key", "0"); die(memcache_get($memcache_obj, "var_key"));
?>' '0'