Noviembre 11th, 2014

Redireccionar una url

Cuando vamos a cambiar el contenido de nuestro dominio a otra dirección, es importante indicar este cambio. De esta forma, tanto los motores de búsqueda como los propios usuarios podrán seguir encontrando la información que desean.
Hay varios métodos para hacer una redirección:
Método 1, HTML:

<meta http-equiv="acción" content="segundos";
                       url="http://www.neleste.com/nuevaruta" />

Método 2. PHP (para este método, es imprescindible no haber escrito html antes, esto cambiaría las cabeceras del documento):

<?php header ("Location: http://www.neleste.com/nuevaruta"); ?>

Método 3. JavaScript:

<script type="text/javascript">
window.locationf="http://www.neleste.com/nuevaruta";
</script>

Método 4. editar .htaccess (gracias por recordarlo Emilio):
Este método también se puede hacer en los archivos de configuración de apache si tenemos acceso

Redirect /viejaruta/ http://neleste.com/nuevaruta/

Agosto 23rd, 2013

Simplificar expresiones regulares

Tanto si usamos POSIX (está obsoleto, si usas sus métodos, ereg, eregi, etc aconsejamos cambiarlos) como si usas PCRE, quizá ya sepas que tienes a tu alcance mecanismos de conversión para alfabéticos [a-zAZ09_], numéricos [0-9] o alfanuméricos [a-zAZ09_0-9].
Por ejemplo, si queremos representar caracteres alfabéticos nos basta con poner \D (palabra), para numéricos \d (dígito) y o alfanuméricos \w
Por cierto, si quieres probar el resultado de tus expresiones regulares, está web te será de utilidad.

Otras conversiones:
\t — Representa un tabulador.
\r — Representa el “retorno de carro” o “regreso al inicio” o sea el lugar en que la línea vuelve a iniciar.
\n — Representa la “nueva línea” el carácter por medio del cual una línea da inicio. Es necesario recordar que en Windows es necesaria una combinación de \r\n para comenzar una nueva línea, mientras que en Unix solamente se usa \n y en Mac_OS clásico se usa solamente \r.
\a — Representa una “campana” o “beep” que se produce al imprimir este carácter.
\e — Representa la tecla “Esc” o “Escape”
\f — Representa un salto de página
\v — Representa un tabulador vertical
\x — Se utiliza para representar caracteres ASCII o ANSI si conoce su código. De esta forma, si se busca el símbolo de derechos de autor y la fuente en la que se busca utiliza el conjunto de caracteres Latin-1 es posible encontrarlo utilizando “\xA9″.
\u — Se utiliza para representar caracteres Unicode si se conoce su código. “\u00A2″ representa el símbolo de centavos. No todos los motores de Expresiones Regulares soportan Unicode. El .Net Framework lo hace, pero el EditPad Pro no, por ejemplo.
\d — Representa un dígito del 0 al 9.
\w — Representa cualquier carácter alfanumérico.
\s — Representa un espacio en blanco.
\D — Representa cualquier carácter que no sea un dígito del 0 al 9.
\W — Representa cualquier carácter no alfanumérico.
\S — Representa cualquier carácter que no sea un espacio en blanco.
\A — Representa el inicio de la cadena. No un carácter sino una posición.
\Z — Representa el final de la cadena. No un carácter sino una posición.
\b — Marca el inicio y el final de una palabra.
\B — Marca la posición entre dos caracteres alfanuméricos o dos no-alfanuméricos.

Link | Regexpert

Abril 10th, 2010

Optimizando nuestro código PHP

1 – Inicializa las variables antes de utilizarlas. Estás, se inicializan solas, pero con un coste de tiempo.

2 – Debes estar en constante aprendizaje, cada vez el lenguage PHP se hace más fuerte, y salen nuevas características interesantes sobre este..

3 – Incrementar una variable en el método de una clase es lo mas rápido, que incrementar una variable global.

4 – Incrementar una variable global a un fichero puede llegar a ser hasta dos veces más lento que en un entorno local.

5 – Incrementar una variable local en un método es lo más rápido. Casi lo mismo que llamar a una variable local en una función.

6 – Incrementar una variable indefinida puede ser hasta 9 ó 10 veces más lento que una ya declarada.

7 – Declarar una variable global, a pesar de que no la llegues a utilizar en ninguna función hace más lento tu script, PHP tiene que chequear si la variable existe.

8 – Llamar a una función a una función con un parametro puede tomar aproximadamente el mismo tiempo que de 7 a 8 operaciones con variables locales, y esa misma llamada a un método supondrían unas 15 operaciones. Aún así, es más rapido que usar variables globales.

9 – Si necesitas saber el timestamp (tiempo de ejecución) de acceso a un script, considera utilizar la variable $_SERVER['REQUEST_TIME'] en lugar de time(), es mucho más rapido.

10 – $row['id'] es hasta 7 veces más rápido que el mecanismo $row[id].

11 – $localvar++ es hasta 15 veces más rápido que function inc(){ $localvar++; }, debido a que debe acceder a la función.

12 – Los scripts PHP se compilan/interpretan cada vez que son ejecutados, a no ser se guarde el código objeto en un cache. Las herramientas de compilación de PHP pueden incrementan el rendimiento hasta un 100%.

Febrero 20th, 2010

Validar ccc con PHP

Identificación de una cuenta corriente o libreta de ahorros
En España las cuentas corrientes y las libretas de ahorros tienen una identidad única que se compone de 20 dígitos, el denominado Código Cuenta Cliente. Este código identifica a la entidad bancaria, sucursal y cuenta de forma única de tal modo que actúa como dirección de la cuenta para la realización de cualquier operación financiera.

Esquema del código de identificación de una cuenta bancaria

esquema ccc

Proceso de cálculo de los dígitos de control
a) Dígito de control de la entidad y sucursal

Posicion Factor Datos Operación Resultado
Unidad: 6 8 6×8 48
Decena: 3 3 3×3 9
Centena: 7 3 7×3 21
Unidad de millar: 9 0 9×0 0
Decena de millar: 10 7 10×7 70
Centena de millar: 5 7 5×7 35
Unidad de millón: 8 0 8×0 0
Decena de millón: 4 2 4×2 8
Suma 191

Cálculos:

191/11 = 17; Resto = 191-(17×11) = 4; Dígito = 11-4 = 7

- Si el resultado es 11, el dígito buscado es 0

- Si el resultado es 10, el dígito buscado es 1

b) Dígito de control de la cuenta

Posicion Factor Datos Operación Resultado
Unidad: 6 1 6×1 6
Decena: 3 2 3×2 6
Centena: 7 3 7×3 21
Unidad de millar: 9 4 9×4 36
Decena de millar: 10 5 10×5 50
Centena de millar: 5 2 5×2 10
Unidad de millón: 8 0 8×0 0
Decena de millón: 4 0 4×0 0
Centena de millón: 2 1 2×1 2
Unidad de millar de millón: 1 3 1×3 3
Suma 134

Cálculos:

134/11 = 12; Resto = 191-(12×11) = 2; Dígito = 11-2 = 9

- Si el resultado es 11, el dígito buscado es 0

- Si el resultado es 10, el dígito buscado es 1
A continuación, implementaremos el algoritmo en php

function ccc_valido($ccc)
{
    //$ccc sería el 20770338793100254321
    $valido = true;

    ///////////////////////////////////////////////////
    //    Dígito de control de la entidad y sucursal:
    //Se multiplica cada dígito por su factor de peso
    ///////////////////////////////////////////////////
    $suma = 0;
    $suma += $ccc[0] * 4;
    $suma += $ccc[1] * 8;
    $suma += $ccc[2] * 5;
    $suma += $ccc[3] * 10;
    $suma += $ccc[4] * 9;
    $suma += $ccc[5] * 7;
    $suma += $ccc[6] * 3;
    $suma += $ccc[7] * 6;

    $division = floor($suma/11);
    $resto    = $suma - ($division  * 11);
    $primer_digito_control = 11 - $resto;
    if($primer_digito_control == 11)
        $primer_digito_control = 0;

    if($primer_digito_control == 10)
        $primer_digito_control = 1;

    if($primer_digito_control != $ccc[8])
        $valido = false;

    ///////////////////////////////////////////////////
    //            Dígito de control de la cuenta:
    ///////////////////////////////////////////////////
    $suma = 0;
    $suma += $ccc[10] * 1;
    $suma += $ccc[11] * 2;
    $suma += $ccc[12] * 4;
    $suma += $ccc[13] * 8;
    $suma += $ccc[14] * 5;
    $suma += $ccc[15] * 10;
    $suma += $ccc[16] * 9;
    $suma += $ccc[17] * 7;
    $suma += $ccc[18] * 3;
    $suma += $ccc[19] * 6;

    $division = floor($suma/11);
    $resto = $suma-($division  * 11);
    $segundo_digito_control = 11- $resto;

    if($segundo_digito_control == 11)
        $segundo_digito_control = 0;
    if($segundo_digito_control == 10)
        $segundo_digito_control = 1;

    if($segundo_digito_control != $ccc[9])
        $valido = false;

    return $valido;
}

Julio 2nd, 2008

CodeIgniter, Framework PHP

Framework php

CodeIgniter es un gran framework para PHP creado para ofrecer un alto rendimiento, además este framework es bastante ligero y muy sencillo de configurar.

A la larga lista de frameworks para PHP, y que ha conseguido que php vuelva a ser el lenguage de programación web por excelencia (recordemos que lo utilizan todas las grandes compañías online) dejando en la cuneta a otros grandes lenguages como ruby y su framework rails; este framework podría pasar por una alternativa mas, pero si la aplicación que desarrollamos requiere de una plataforma que no decante mucho nuestra estructura y que necesite un alto CodeIgniter debería ser tu elección.

Cumple perfectamente el fin de cualquier framework, una estructura bien definida que da soporte a nuestro proyecto web y que ayude a que este nuevo proyecto sea organizado y desarrollado.

La documentación de CodeIgniter es muy buena y esto nos facilita en gran medida aprender a utilzarlo, sólo echando un simple vistazo a los videotutoriales de su página sabremos como podemos empezar a utilizarlo.

Link | Codelgniter

Mayo 29th, 2008

Ajax en php

Hoy en día resulta algo feo ver una página que no utiliza ajax, a los usuarios no nos gusta mucho ver como nuestras páginas vuelven a cargar a la hora de enviar un formulario, subir una imagen etc, etc.

La manera más sencilla de empezar a utilizar ajax si no controlamos javascript (javascript es el lenguage del futuro, intenta aprenderlo!), es con la clase xajax, que nos trae un cumulo de funciones que simplifican nuestra tarea. Está bastante bien implementada, y no le falta de nada. A continuación explicaré por qué resulta tan sencillo:

<?php
    include './xajax/xajax_core/xajax.inc.php';$xajax = new xajax();
    $rqstAdd =& $xajax->
                            register(XAJAX_FUNCTION, 'doAdd');

    $rqstReset =& $xajax->register(XAJAX_FUNCTION, 'doReset');
    // set the parameters$rqstAdd->
                                setParameter(0, XAJAX_JS_VALUE, 39);
    $rqstAdd->setParameter(1, XAJAX_JS_VALUE, 571);

    $xajax->processRequest();

    function doAdd($a, $b)
    {
        $response = new xajaxResponse();

        $response->assign('answer', 'innerHTML', $a + $b);
        $response->assign('reset', 'style.display', 'block');

        return $response;
    }

    function doReset()
    {
        $response = new xajaxResponse();

        $response->clear('answer', 'innerHTML');
        $response->assign('reset', 'style.display', 'none');

        return $response;
    }

?>

Las funciones doreset y do add son las que proximamente podremos llamar desde cualquier parte de la pagina, sin necesidad de volver a cargarla!

<form action="#" method="post">
    <input type="button" onclick="<?php $rqstAdd->printScript();
                                ?>" id="btnAdd" value="Click Me" />
    <input type="button" onclick="<?php $rqstReset->printScript();
                                ?>" id="btnReset" value="Reset" />
    <p id="answer"></p>
</form>

ahí esta el truco,  llamamos a las funciones en javascritp pero gracias a el objeto XmlHttpRequest, podemos interactuar con los ficheros php.

Link  | xajaxproject

Mayo 2nd, 2008

Plugin ruby on rails

Hobo Imagen

Los frameworks que han salido tanto para ruby como para php, permite simplificar mucho las funciones que antes se programaban a mano, haciéndose ahora de manera automática. Dentro de las comunidades tanto php como ruby on rails, hay multitud de extensiones y scripts que permiten hacernos la vida más sencilla.
Hobo es un plugin para Ruby on Rails que añadirá velocidad turbo a el proceso de construcción de una aplicación web. Su características principales son:

  • Plantillas que permiten definir tags personalizados.
  • Tags predefinidos y listos para usar AJAX.
  • Soporte de AJAX.
  • Soporte de temas.

A todo el que quiera realizar aplicaciones web en ruby on rails le recomiendo echarle un ojo.

Link | HOBO

Marzo 9th, 2008

Login de usuarios en php

Creamos la tabla usuarios

CREATE TABLE `usuarios` (
    `id` int(4) NOT NULL auto_increment,
    `username` varchar(60) NOT NULL default '',
    `password` varchar(60) NOT NULL default '',
    PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
//insertamos un valor como prueba
INSERT INTO `members` VALUES (1, 'juanra', '123456');



Ahora el fichero de checklogin

<?php
// El nombre del host, usualmente localhost
$host       = "localhost";
$username   = ""; // Nombre de usuario mysql
$password   = ""; // contraseña mysql
$db_name    = "test"; // base de datos que usaremso
$tbl_name   = "usuarios"; // nombre de la tabla

//Conectamos con el servidor y seleccionamos la base de datos
mysql_connect("$host", "$username", "$password")
                                       or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

//Cogemos los datos que nos llegan desde el formulario
//( lo tendremos que crear)
$minombre   = $_POST['minombre'];
$contraseña = $_POST['contraseña'];
// Unas pequeñas medidas de seguridad para
//proteger las bases de datos de posibles inyecciones
$minombre   = stripslashes($minombre);
$contraseña = stripslashes($contraseña);
$minombre   = mysql_real_escape_string($minombre);
$contraseña = mysql_real_escape_string($contraseña);

$sql="
    SELECT *
    FROM   $tbl_name
    WHERE  username='$minombre'
    AND    password='$contraseña'
";
$result=mysql_query($sql);

// Contamos el numero de filas
$count=mysql_num_rows($result);
//Si el resultado marcado es $minombre
//y $contraseña,debería haber solo una fila
if($count==1)
{
    //Registramos usuario y redireccionamos a exito.php
    session_register("minombre");
    session_register("contraseña");
    header("location:exito.php");
}
else
{
    echo "Nombre de usuario equivocado o contraseña";
}
?>

El exito.php…

<?//si llegamos aquí, todo fue bien
session_start();
if(!session_is_registered(myusername)){
    header("location:principal.php");
}
?>

Por último el formulario

//a gusto del consumidor :)

Marzo 6th, 2008

Crear un captcha

Es habitual que se nos cuele mucho spam por formularios, y es que los spamers, suelen crear aplicaciones para enviar miles y miles de correos por formularios vulnerables, que envían copia del e-mail al autor, por ejemplo. Voy a iniciar un pequeño tutorial para crear un captcha, para “obligar a los usuarios a demostrar que son humanos”.

Primera Parte

<?php
session_start();

//Creamos una cadena aleatoria de caracteres
$md5 = md5(microtime() * mktime());

//Reducimos a 5 los caracteres
$string = substr($md5,0,5);
?>

Crear una imagen de fondo

<?php
//creamos un fondo de imagen y lo subimos, luego con la funcion imagecreatefrompng, la pasamos al captcha
$captcha = imagecreatefrompng("./imagencaptcha.png");

//podemos configurar los colores para las lineas
$black = imagecolorallocate($captcha, 0, 0, 0);
$line = imagecolorallocate($captcha,233,239,239);

//y para evitar las arañas le añadimos las lineas
imageline($captcha,0,0,39,29,$line);
imageline($captcha,40,0,64,29,$line);
?>

Insertamos el texto en la imagen

<?php
//insertamos la cadena creada aleatoriamente en la imagen
imagestring($captcha, 5, 20, 10, $string, $black);

//como no, encriptamos y almacenamos el valor de la cadena en una variabe sesion
$_SESSION['key'] = md5($string);

//devolvemos la imagen para crearla
header("Content-type: image/png");
imagepng($captcha);
?>

Comprobamos el valor que ingresa el usuario

<?php
session_start();

if(md5($_POST['code']) != $_SESSION['key'])
{
    //lo enviamos a la página de error
    echo "header('Location: error.php');";
}
else
{
    //lo enviamos a donde queríamos ha puesto bien el captcha
    echo "header('Location: buena.php');";
}
?>

La parte de la creación del formulario en este caso, es la más básica.

Febrero 25th, 2008

Chat en php

Con estos pequeños scripts en php, podrás montar un chat en tu web en poco tiempo. Solo tienes que insertarlo en tu web e ir indicando tu base de datos, dominio y contraseñas. Puedes borrar los enlaces, es completamente libre, pero siempre es de agradecer que no los eliminen y contribuyan a mejorar el pagerank de la web.

Descargar | chat