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