PHP script uitvoeren vanaf de command line (CLI)

Vanaf de command line een PHP script uitvoeren is handig bij het uitvoeren van cronjobs.


PHP Configuratie

Aangepaste PHP.ini laden

php --php-ini /var/www/vhosts/davidvandertuijn.nl/etc/php.ini /var/www/vhosts/davidvandertuijn.nl/index.php

In dit voorbeeld laad ik de PHP configuratie van het domein davidvandertuijn.nl in, anders zal de default PHP configuratie (e.g. /etc/php.ini) worden gebruikt.

Defineer een PHP ini waarde

php –d memory_limit=512M /var/www/vhosts/davidvandertuijn.nl/index.php

In dit voorbeeld wordt tijdelijk het geheugen limit verhoogd voor het uitvoeren van het script.


Parameters

Parameters in het Kohana Framework

Syntax

php index.php --uri=your/uri/here --get=query=string&options=here --method=POST --post=more=query&strings=yes
php /var/www/vhosts/davidvandertuijn.nl/index.php --uri=cronjob/synchroniseren --method=POST --post=client_id=davidvandertuijn

De parameter 'uri' wordt herkend als route in het Kohana Framework zodat de functie 'action_synchroniseren' in de controller 'cronjob' wordt uitgevoerd.

De paramater 'post' wordt herkend als $_POST['client_id'] = 'davidvandertuijn';

Meer informatie: CLI | Kohana User Guide

Parameters in PHP

php test.php cronjob synchroniseren davidvandertuijn

Om parameters in PHP op te vragen kan de gereserveerde variabele $argv worden gebruikt:

echo $argv[1]; // cronjob
echo $argv[2]; // synchroniseren
echo $argv[3]; // davidvandertuijn

Zie ook: getopt()


Beveiliging

Het PHP script is ongewenst toegankelijk via http://www.davidvandertuijn.nl/cronjob/synchroniseren .

Het is bij voorkeur aanbevolen om cronjob scripts buiten de DOCUMENT_ROOT te plaatsen zodat deze niet via een URL aanroep uitgevoerd kunnen worden.

Beveiliging in het Kohana Framework

Om te controleren of een script wordt uitgevoerd vanaf de command line in het Kohana Framework:

if (Kohana::$is_cli)
{
    // Uitvoeren
}

Beveiliging in PHP

Om te controleren of een script wordt uitgevoerd vanaf de command line vanaf PHP 4.2.0

if (PHP_SAPI === 'cli') 
{
    // Uitvoeren
}

Zie ook: php_sapi_name()