Comentarios Recientes

Parametros en la linea de comandos en PHP

| Categorías PHP, Personal, Programacion, Software Libre, Tutoriales | | Comentario 0

Number of View: 416

Mucha gente tiene la confusión de si se puede o no correr un programa escrito en PHP desde la línea de comandos.  Pues aquí les respondo que sí y les traigo algo para que vayan comprendiendo su funcionamiento.

El siguiente ejemplo se trata de un pequeño compresor de archivos con una técnica muy barata que he hecho para una clase de Codificación y que luego les mostraré de qué se trata.

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
/**
* Compress.php
*
* ejemplo de corrida:
* $ php compress.php  ARCHIVO_ENTRADA
* $ php compress.php -d ARCHIVO_ENTRADA  ARCHIVO_SALIDA
*/
//saber los parametros que fueron pasados al correr el programa
if($argc < 2 )
    exit("Debe especificar al menos el archivo de entrada.\n");
 
define('COMPRESS',1);
define('UNCOMPRESS',2);
 
//saber que opcion se ha tomado
/**
 * La opcion '-c' es para comprimir
 * La opcion '-d' es para decomprimir
 * si no se especifica opcion, se va a comprimir
 */
if($argv[1][0] == '-') {
    switch($argv[1]) {
        case '-c':
            $action = COMPRESS;
            break;
        case '-d':
            $action = UNCOMPRESS;
            break;
        default:
            die("Opcion '{$argv[1]}' Incorrecta. Utilice '-c' para comprimir y '-d' para decomprimir.\n");
    }
    //archivo de entrada
    $source_file = $argv[2];
    //se verifica si el usuario especifico archivo de salida, de lo contrario
    // se verifica si se va a comprimir para generar el fichero de salida.
    // Si es para decompresion, se debe especificar el fichero de salida.
    if($argc > 3)
        $destination_file = $argv[3];
    else if($action == COMPRESS){
        $ext = end(explode(".", $source_file));
        $destination_file = str_replace(basename($source_file),str_replace($ext,'wmz',basename($source_file)),$source_file);
    }else{
        die ("Debe especificar el archivo de salida, no se conoce la extension del archivo original\n.");
    }
}
else {
    //Lo mismo que el paso anterior, pero ahora se sabe que es compresion porque
    // no se especificó una opcion y se asume compresion.
    $action = COMPRESS;
    $source_file = $argv[1];
    if($argc > 2)
        $destination_file = $argv[2];
    else {
        $ext = end(explode(".", $source_file));
        $destination_file = str_replace(basename($source_file),str_replace($ext,'wmz',basename($source_file)),$source_file);
    }
}
 
//Incluimos la clase BitMapping
//Notese que se producirá un error Fatal si no existe el fichero BitMapping.php
require_once 'BitMapping.php';
// Crear instancia
$compressor = new BitMapping($source_file,$destination_file);
//Proceder a Comprimir o Decomprimir
switch($action) {
    case COMPRESS:
        $compressor->compress();
        break;
    case UNCOMPRESS:
        $compressor->uncompress();
        break;
}
?>

En los próximos días publicaré la Class que comprime y decomprime =)

Post Similares