Comentarios Recientes

PHP: Type Hinting

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

Number of View: 1440

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 :) .

Forzar descarga de un archivo en PHP

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

Number of View: 1611

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);
?>

Tutoriales de GIMP

| Categorías Linux, Software Libre, Tutoriales | | Comentario 0

Number of View: 1663

Una de las principales objeciones que hacen los usuarios al intentar migrar a un entorno GNU/Linux es el uso de las herramientas artísticas, como lo es GIMP.  Aquí les dejo un link de un blog de una joven venezolana experta en GIMP, quién se ha dedicado a crear tutoriales muy interesantes sobre GIMP.

WWW.TATICA.ORG

@tatadbb

Comandos interesantes: Manual wget

| Categorías internet, Linux, Sistemas Operativos, Software Libre, Tutoriales | | Comentario 0

Number of View: 10920

Wget es un comando en Linux muy interesante y poderoso.  Su función más simple es descargar archivos desde la web, soportando transferencias sobre protocolos como FTP, HTTP y HTTPS.

Pues como se pueden descargar archivos, cuando intentamos descargar una página, simplemente WGET nos trae el contenido HTML de esta página.  Ahí es que viene lo de interesante, pues este comando tiene unas opciones sumamente poderosas, las cuales podemos utilizar para crear arañas, por ejemplo, como es la opción “-r”, que se refiere a recursivo.

(more…)

Funcion para Debugging en PHP

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

Number of View: 935

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

Friendly URL solo con .htaccess y RewriteRule

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

Number of View: 8426
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.

Parametros en la linea de comandos en PHP

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

Number of View: 1208

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

Instalando Fedora 12 desde LiveCD

| Categorías internet, Linux, Sistemas Operativos, Software Libre, Tutoriales | | Comentario 0

Number of View: 1386

Útil video de instalación básica de Fedora 12 desde un LiveCD.