Comentarios Recientes

jsHACK: Framework Javascript desarrollado en Rep. Dominicana

| Categorías internet, Linux, Microsoft, mysql, Personal, Programacion, Tecnologia, telecomunicaciones | | Comentario 2

Number of View: 3182

jsHACK

jsHACK es un framework para Javascript, que está siendo desarrollado actualmente por Dominicanos, a la cabeza su creador, mi amigo Carlos López.   Este framework nació por la necesidad de Carlos de utilizar un Framework ligero y sumamente eficiente.  Este es el resultado de varios años de duro trabajo en el área de desarrollo de Aplicaciones Web eficientes y mucha dedicación al estudio de Javascript a fondo.

Hoy me siento orgulloso de tener en mi país esta clase de proyectos y esa clase de programadores.  Espero que todos le den una oportunidad, así como yo lo estoy haciendo.

Insertando data con For loop en un DB MySQL, desde bash

| Categorías Linux, mysql, Programacion, Sistemas Operativos, Software Libre | | Comentario 0

Number of View: 2277

En esta semana tuve la necesidad de hacer un Script en bash para manejar cierta información.  Me puse algo inquieto y bueno, aquí les tengo como insertar una lista de palabras desde un archivo a una base de datos MySQL.  Algo realmente sencillo, pero uno nunca sabe cuando podria utilizarlo:

1
2
3
4
5
6
7
8
9
10
11
12
#sort -u ordena la lista y saca las lineas unicas
for i in `cat lista | sort -u`;
 do
        len = ${#i}
#simple condicional para saber si la palabra tiene al menos 10 caracteres
        if ["$len" -lt 10];
        then
                continue;
        else
                 mysql -umi_usuario -pmi_passwd db_name -e "insert into palabras (palabra,status) values('$i',1)" ;
        fi
 done;

No puedo evitar decir que me encanta usar Linux :)

Construyendo un “Where” luego de un “POST” o “GET” en PHP

| Categorías General, PHP, Programacion | | Comentario 1

Number of View: 1921

Muchas veces hacemos formularios bastante grandes y un poco complicados de manejar.  Generalmente, un formulario está diseñado para insertar los datos en alguna base de datos, muchas veces en una misma tabla.  También se puede dar el caso de que se quiera hacer alguna busqueda.  Aquí les traigo una manera bastante simple de manejar ciertos “POST” o “GET”.  En este caso lo haré sólo con POST.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
< ?php
if(isset($_POST['insertar'])){
      unset($_POST['insertar']); // eliminamos la posibilidad de incluir este valor
      $variables = array();
      foreach($_POST as $key=>$value){
            //Aqui pueden hacer cualquier tipo de filtrado,
            //pudiendo utilizar, por ejemplo, las sentencias switch...case.
            $variables[] = "$key = '$value'";
      }
 
      $where = ' WHERE '. implode(' AND ', $variables);
 
      $query = "SELECT * FROM my_table " . $where;
      mysql_query(....);
      .
      .
      .
      .
}
 
?>
1
2
3
4
5
<form method="post" action="">
      Usuario: <input type="text" name="username" value=""/><br />
      Contrase&ntilde;a: <input type="password" name="password" value=""/>
      <input type="submit" name="insertar" value="Enviar Formulario"/>
</form>

Como se puede observar, aqui estamos haciendo algún tipo de busqueda.  Si desean utilizar esta técnica para hacer un UPDATE, por ejemplo, solo tendrían que cambiar “AND” por “,” en << implode(‘ AND ‘,$variables) >>.   Asi como este, hay muchos otros casos donde podría resultar muy muy útil este trozo de código.  Espero que le puedan sacar provecho.

PHP: Type Hinting

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

Number of View: 1524

Aquí les traigo un trozo de código bastante interesante sobre Type Hinting.  Esto se refiere al tipo de parámetros que recibe un determinado método.  Personalmente me parece bastante útil,  ya que obtendremos un Fatal Error si el tipo de dato es incorrecto, esto nos ayuda a trabajar de manera más cuidadosa y prevenir futuros posibles errores, sólo por decir una de las utilidades.

1
2
3
4
5
6
7
8
9
10
11
12
< ?php
/**
 * @author Williams Mendez
 */
class MyClass {
    private $Database;
 
    public function __Construct(MyDB $Database = null) {
        $this->Database = $Database;
    }
   public function Insert(array $Data){ ..... }
}

Se pueden apreciar dos métodos, en el primer caso, se tiene la opción de no pasarle parámetro, pero si es invocado ese método, debe recibir un objeto del tipo MyDB. En el segundo caso, el método sólo debe recibir un parámetro del tipo “array”.

Otra buena aplicación de estas técnicas se puede apreciar en la creación de Interfaces y Clases Abstractas.

Suerte con el código :) .

Cómo nació PHP?

| Categorías internet, PHP, Programacion, Software Libre | | Comentario 2

Number of View: 3942

Esta es la historia como la cuentan en PHP.net:

PHP proviene de un programa anterior, llamado PHP/FI. PHP/FI fue creado por Rasmus Lerdorf en 1995, inicialmente como un simple conjunto de scripts de Perl para controlar quién accedia a su curriculum online. Llamó a ese conjunto de scripts ‘Personal Home Page Tools’. Según se requería, Rasmus fue añadiendo más funcionalidad escrita en C que era capaz de comunicarse con bases de datos y permitía a los usuarios desarrollar sencillas aplicaciones Web dinámicas. Rasmus decidió » liberar el código fuente de PHP/FI para que cualquiera pudiese utilizarlo, así como arreglar errores y mejorar el código.

PHP/FI, que se mantuvo para páginas personales y como intérprete de formularios, incluidas algunas de las funciones básicas de PHP tal y como lo conocemos hoy. Tenía variables como las de Perl, interpretación automática de variables de formulario y sintaxis incrustada HTML. La sintaxis por sí misma era similar a la de Perl, aunque mucho más limitada, simple y algo inconsistente.

En 1997, PHP/FI 2.0, la segunda vez que se escribió la implentación en C, tuvo un seguimiento estimado de varios miles de usuarios en todo el mundo, aproximadamente 50.000 dominios tenían PHP/FI instalado, sumando alrededor del 1% de los dominios de Internet. Mientras había mucha gente contribuyendo con líneas de código a este proyecto, en su mayor parte era todavía el proyecto de una sola persona.

PHP/FI 2.0 no se liberó oficialmente hasta Noviembre de 1997, después de estar la mayoría del tiempo en versión beta. Después de poco tiempo de liberarse aparecieron las primeras versiones alpha de PHP 3.0.

Para leer toda la historia, visite PHP.net

Forzar descarga de un archivo en PHP

| Categorías PHP, Programacion, Tutoriales | | Comentario 2

Number of View: 1699

Este ejemplo es muy bueno para aquellas ocaciones en las que quisieramos forzar a descargar un archivo, aun sea una imagen, ya que generalmente se abren dentro del mismo navegador.

Tambien es posible aprovechar este pequeño script para esconder nombres de archivos, de manera que se puede pedir un ID de un archivo y no su nombre, mucho menos su ruta.

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
< ?php
// downloading a file
$filename = $_GET['path'];
 
// fix for IE catching or PHP bug issue
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
// browser must download file from server instead of cache
 
// force download dialog
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
 
// use the Content-Disposition header to supply a recommended filename and
// force the browser to display the save dialog.
header("Content-Disposition: attachment; filename=".basename($filename).";");
 
/*
The Content-transfer-encoding header should be binary, since the file will be read
directly from the disk and the raw bytes passed to the downloading computer.
The Content-length header is useful to set for downloads. The browser will be able to
show a progress meter as a file downloads. The content-lenght can be determines by
filesize function returns the size of a file.
*/
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
 
@readfile($filename);
exit(0);
?>

Streams en PHP: Haciendo un “POST” con Sockets

| Categorías internet, PHP, Programacion | | Comentario 0

Number of View: 5758

Este es un ejemplo tomado directamente desde PHP.net, que  como siempre digo, es el site con la mejor y oficial documentación de PHP y que muchos no recurren a ella.  En el ejemplo se muestra como con Sockets se puede hacer una petición “POST” y capturar la respuesta en una variable:

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
< ?php
/* Send POST request to https://secure.example.com/form_action.php
* Include form elements named "foo" and "bar" with dummy values
*/
 
$sock = fsockopen("ssl://secure.example.com", 443, $errno, $errstr, 30);
if (!$sock) die("$errstr ($errno)\n");
 
$data = "foo=" . urlencode("Value for Foo") . "&bar=" . urlencode("Value for Bar");
 
fwrite($sock, "POST /form_action.php HTTP/1.0\r\n");
fwrite($sock, "Host: secure.example.com\r\n");
fwrite($sock, "Content-type: application/x-www-form-urlencoded\r\n");
fwrite($sock, "Content-length: " . strlen($data) . "\r\n");
fwrite($sock, "Accept: */*\r\n");
fwrite($sock, "\r\n");
fwrite($sock, "$data\r\n");
fwrite($sock, "\r\n");
 
$headers = "";
while ($str = trim(fgets($sock, 4096)))
$headers .= "$str\n";
 
echo "\n";
 
$body = "";
while (!feof($sock))
$body .= fgets($sock, 4096);
 
fclose($sock);
?>

OpenCV en PHP: Detectando caras en imagenes

| Categorías internet, PHP, Programacion, Redes Sociales, Software Libre | | Comentario 0

Number of View: 3275

Hace unas semanas mi amigo David Tavarez publicó en su Blog un artículo sobre OpenCV, que no es mas que unas librerías bastante interesantes, que permiten identificar un rostro en una imagen.  Estas librerías no solo existen para PHP, sino que también la podemos encontrar en C++, Python, otros.

Les dejo una cita del post:

OpenCV wrapper to detect faces with PHP. The extension offers the two new functions: face_count() and face_detect(). In princible, they differ only by their return value. The first returns only the number of faces found on the given image and the other an associative array of their coordinates. face_count() serves only to save the loops for counting. Examples:
OpenCV in PHP example 1
OpenCV in PHP example 2

Face detection in pure PHP (without OpenCV). This is a PHP Class to face recognition without OpenCV, it use an data file, but not external libraries. We can use it with few code:

 
$detector = new Face_Detector('detection.dat');
$detector->face_detect('maurice_svay_150.jpg');
$detector->toJpeg();

Example:
Example FaceDetection

Funcion para Debugging en PHP

| Categorías internet, PHP, Programacion, Tutoriales | | Comentario 0

Number of View: 984

Aquí les dejo una interesantísima función para imprimir el contenido de una variable, ya sea un objeto, un string, un array…

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
< ?php
function show_php($var,$indent='&nbsp;&nbsp;',$niv='0')
{
    $str='';
    if(is_array($var))    {
        $str.= "<b>[array][".count($var)."]<br />";
        foreach($var as $k=>$v)        {
            for($i=0;$i< $niv;$i++) $str.= $indent;
            $str.= "$indent<em>\"{$k}\"=>";
            $str.=show_php($v,$indent,$niv+1);
        }
    }
    else if(is_object($var)) {
 
        $str.= "<b>[objet]-class=[".get_class($var)."]-method=[";
        $arr = get_class_methods($var);
           foreach ($arr as $method) {
               $str .= "[function $method()]";
           }
        $str.="]-";
        $str.="</b>";
        $str.=show_php(get_object_vars($var),$indent,$niv+1);
    }
    else {
        $str.= "<em>[".gettype($var)."]</em>=[{$var}]<br />";
    }
    return($str);
}
?>

Esta interesante función fue tomada de PHP.net

Piropos de un Nerd

| Categorías google, internet, Linux, Microsoft, PHP, Programacion, Sistemas Operativos, Tecnologia | | Comentario 0

Number of View: 1337
  • El .gif que anima mi vida.
  • En la cama eres puro overclocking.
  • Tienes permisos de root en mi vida.
  • Tus deseos son signals para mí.
  • Te pienso más que las paginas indexadas por google.
  • Sin ti mi vida sería como una web sin CSS.

Artículo Completo Aquí

Friendly URL solo con .htaccess y RewriteRule

| Categorías google, internet, PHP, Programacion, Tutoriales | | Comentario 2

Number of View: 9233
Hace varios meses, les había mostrado como hacer URLs Friendly con .htaccess y PHP.  Hoy les muestro una forma de hacerlo que puede resultar más fácil y se presta a diferentes situaciones.
En el primer caso les mostraré  como hacer una URL que contenga algún “id” o parámetro, como para un e-commerce y los artículos.
RewriteBase /
RewriteRule ^(.*)-(.*).html$ products.php?id=$2

En este ejemplo, prodremos escribir URLs de este tipo:

http://www.ejemplo.com/mi_producto_favorito-451.html

Esto sería lo mismo que escribir:

http://www.ejemplo.com/products.php?id=451

De manera que estamos haciendo lo mismo, pero de manera “más estética” y aplicando nuestras técnicas de SEO ;) .

Otro ejemplo es algo más simple, pero funcional.  Ahora les muestro como crear, por ejemplo, documentos XML dinámicos.

RewriteBase /
RewriteRule ^googlefeed.xml$ googlebase.php
Este ejemplo realmente lo he utilizado para crear feeds para Google Base.  La idea es que el XML se genera “en vivo”, por así decirlo,  de manera que no se pierde ningún artículo a la hora de que el Robot de Google descargue el documento en cualquier momento.

Frameworks: ¿Son realmente factibles?

| Categorías PHP, Programacion, Zend Framework | | Comentario 3

Number of View: 1511

El uso de Frameworks hace la vida de un programador, muchas veces, más sencilla o menos monótona, no teniendo así que escribir y reescribir el mismo código decenas de veces en aplicaciones diferentes.  Además de esto, hacen que se mantenga cierto patrón al escribir programas(siempre y cuando estemos conscientes de lo que estamos haciendo), dándole algo de uniformidad al código y se puede decir que un estilo fácil de entender.

Por otro lado, tenemos otras ventajas obvias, como es el uso de clases y métodos que no nos interesa desarrollar, ya sea porque sería complicado o porque no nos importa.

Es claro que estas maravillosas herramientas han aportado al ágil desarrollo de aplicaciones, de la misma manera que han contribuido a que no nos preocupemos por ciertos algoritmos, pues ya están hechos y listos para ponerlos en práctica.  También es una grandísima ventaja el hecho de trabajar con códigos bien revisados y probados(cuando utilizamos frameworks Open-Source o de empresas que pagan por su mantenimiento).

Ahora bien, todo eso es maravilloso cuando ya hemos estudiado un framework en específico, pues para muchos el hecho de tener que aprender un framework o peor aún, luego de haber aprendido un framework, cambiarse a otro, es una tarea casi tan complicada como escribir tu propio código o desarrollar tu propio framework.

Según este post: Do Frameworks Fail? When?, el uso de frameworks aún presenta tres problemas:

  • La curva de aprendizaje, que empeora cuando ya un framework no está siendo mantenido.
  • Eficiencia del Código: Muchas veces consumen muchos recursos y el programador no tiene control sobre esto.
  • El costo de Propiedad: Muchos te enseñan como hacer lo fácil, pero lo difícil seguirá siendo aún más difícil, y tendrás que invertir tiempo(lo cual es dinero) en buscar el framework más apropiado.

No por esto debemos dejar de utilizar un framework, pero si debemos tener en cuenta cuál es el que se ajusta a cada necesidad.

Tabla de Comparación de tipos de datos en PHP

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

Number of View: 2106
Comparisons of $x with PHP functions
Expression gettype() empty() is_null() isset() booleanif($x)
$x = “”; string TRUE FALSE TRUE FALSE
$x = null NULL TRUE TRUE FALSE FALSE
var $x; NULL TRUE TRUE FALSE FALSE
$x is undefined NULL TRUE TRUE FALSE FALSE
$x = array(); array TRUE FALSE TRUE FALSE
$x = false; boolean TRUE FALSE TRUE FALSE
$x = true; boolean FALSE FALSE TRUE TRUE
$x = 1; integer FALSE FALSE TRUE TRUE
$x = 42; integer FALSE FALSE TRUE TRUE
$x = 0; integer TRUE FALSE TRUE FALSE
$x = -1; integer FALSE FALSE TRUE TRUE
$x = “1″; string FALSE FALSE TRUE TRUE
$x = “0″; string TRUE FALSE TRUE FALSE
$x = “-1″; string FALSE FALSE TRUE TRUE
$x = “php”; string FALSE FALSE TRUE TRUE
$x = “true”; string FALSE FALSE TRUE TRUE
$x = “false”; string FALSE FALSE TRUE TRUE
Loose comparisons with ==
TRUE FALSE 1 0 -1 “1″ “0″ “-1″ NULL array() “php” “”
TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE
FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE
1 TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
0 FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE
-1 TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
“1″ TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
“0″ FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
“-1″ TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
NULL FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE TRUE
array() FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
“php” TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
“” FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Strict comparisons with ===
TRUE FALSE 1 0 -1 “1″ “0″ “-1″ NULL array() “php” “”
TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
1 FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
0 FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-1 FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
“1″ FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
“0″ FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
“-1″ FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
NULL FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
array() FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
“php” FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
“” FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE

iPHP: Shell Interactivo para PHP

| Categorías PHP, Programacion | | Comentario 0

Number of View: 788

iPHP es un proyecto que planea desarrollar un Shell interactivo para PHP, al igual que existe en Python y el “irb” en Ruby, que realmente son herramientas muy poderosas y, a mi entender, muchas veces necesarias.  Hace un buen tiempo que estuve esperando esto, pues muchas veces he sentido la necesidad de una aplicación de este tipo.

El Interactive Shell es un Shell que permite evaluar expresiones arbitrarias y que muestra el resultado en tiempo real a medida que vas escribiendo tu script.  Este Shell es sumamente útil si estamos Debbuging, probrando cosas rápidamente, en fin, una herramienta muy poderosa.

Aquí les dejo algo para que vean de que se trata:

iphp is an interactive php shell that solves a number of painful problems with normal php shells:

  • Fatal Error handling – iphp doesn’t die even if your code does.
  • readline support
  • autocomplete support (tab key)
  • history support across runs
  • support ctags tags files
  • implemented as a class for integration with your framework
  • require support (supports dynamic includes)
  • autoload support

Example:

> new ArrayObject(array(1,2))

ArrayObject Object
(
[0] => 1
[1] => 2
)

> $_[0] + 1
2

Parametros en la linea de comandos en PHP

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

Number of View: 1395

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 =)