Parametros en la linea de comandos en PHP
Categorías PHP, Personal, Programacion, Software Libre, Tutoriales | Fecha 06-12-2009 | 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 =)