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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
   | <?php
 
/**
 * PHP QUERY GENERATOR
 * -------------------
 */
 
require_once "Collection.class.php";
 
$usage = <<< USAGE
usage: $argv[0] [options] <query|file>
 
Valid options:
    -c --context <context> The context file
    -t --type <type>       The type of the context file
                           (INI or JSON)
    -h --help              Display this help message
 
USAGE;
 
$self = array_shift($argv); // le premier paramètre est toujours le script
$argc = count($argv);
 
$argc || die($usage);
 
// on parse les arguments un à un
while ($arg = array_shift($argv)) {
    switch ($arg) {
        case '-c':
        case '--context':
            $context_file = array_shift($argv);
            if (empty($context_file))
                die($usage);
            if (!is_file($context_file) || !is_readable($context_file))
                die("$context_file is not a valid file\n");
            break;
 
        case '-t':
        case '--type':
            $context_file_type = strtolower(array_shift($argv));
            if (empty($context_file_type))
                die("you must provide a type\n");
            if (!in_array($context_file_type, array('ini','json')))
                die("invalid type $context_file_type\n");
            break;
 
        case '-h':
        case '--help':
            die($usage);
 
        default:
            $query = $arg;
            break;
    }
}
 
// on crée le contexte
if ($context_file) {
    $method = "from" . ucfirst(isset($context_file_type) ? $context_file_type : 'Ini') . "File";
    $context = Collection::$method($context_file);
}
 
// on crée le fichier temporaire pour execution
$file             = is_file($query) ? file_get_contents($query) : $query;
$tmp_file         = dirname(__FILE__) . '/' . uniqid('query_') . '.php';
$tmp_file_content = str_replace('<?=', '<?php echo ', $file);
 
if (!file_put_contents($tmp_file, $tmp_file_content))
    die("cannot create temp file $tmp_file");
 
// on exécute le script temporaire
include $tmp_file;
 
unlink($tmp_file); | 
Partager