Archivo de la categoría: PHP

Todo lo relacionado con la programación en PHP

Funciones de ordenación de Arrays – PHP Tips

Cuando empece a programar, uno de los ejercicios que teníamos que hacer era la ordenación por el método burbuja, el cual ahora mismo no recuerdo como se hacía, creo que se basaba en ir recorriendo la lista e ir almacenando el valor superior, luego este se volcada en otra lista, y no se qué más. Hoy en día los lenguajes de programación ya disponen de funciones que nos ordenan el array con solo invocarlas.
En PHP la mas conocida es short() la cual nos ordena el array en base a su valor de menor a mayor, pero hay que tener cuidado, ya que no mantiene el valor de las claves, y las renombra por unas numéricas. La función inversa de short() es rshort().
Si queremos ordenar y que nos mantenga el valor de las claves usaremos asort o arsort

Si lo que queremos es ordenar un array en base a sus claves usaremos ksort o su inversa que es krsort

Más información y funciones de ordenación de arrays http://www.php.net/manual/es/array.sorting.php

Opciones de PHP desde Linea de comandos – PHP Tips

Hoy voy a explicar alguna de las opciones que tiene PHP desde la linea de comandos. Una de las opciones mas útiles es la de poder probar nuestro código vía web sin necesidad de tener instalado un servidor web, esta es una opción que solo esta disponible a partir de la versión 5.4

Servidor web integrado

Supongamos que tenemos el siguiente código guardado en un fichero llamado index.php


<!DOCTYPE html>
<html lang='es'>
<head>
<meta charset="UTF-8">
<title>Pruebas PHP</title>
</head>
<body>
<h1>Pruebas con PHP</h1>
<?php echo "Hola Mundo"; ?>
</body>
</html>

Si desde la terminal lanzamos el siguiente comando:


php -S localhost:8888 index.php

Abrimos un navegador y tecleamos la siguiente dirección localhost:8888

Captura de pantalla 2013-11-17 a la(s) 19.28.05

Para terminar la ejecución del servidor pulsamos CTRL + c en el terminal que hemos lanzado el comando y se terminara.

Sintaxis coloreada

Con el mismo código que hemos usado antes tecleamos lo siguiente, imaginemos que queremos crear una versión HTML para ver el código que tenemos. Ejecutamos lo siguiente


php -s index.php > index.html

Esto nos generara el archivo index.html, y si lo abrimos veremos el código fuente coloreado

Captura de pantalla 2013-11-17 a la(s) 19.33.51

Comprobar sintaxis

También podemos comprobar la sintaxis desde la linea de comandos de la siguiente manera


php -l index.php

Si tenemos algún error en nuestra sintaxis este comando nos mostrara donde.

Creando consultas Select con Zend_Db_Select – PHP Tips

Uno de los frameworks con los cuales mas me gusta trabajar es con ZendFramework, sobre todo con las funciones de conexión y consulta MySQL, ya que el uso de estas me simplifica el trabajo. Hoy voy a explicar un poco el uso del Zend_Db_Select en la versión de ZendFramework 1.12. Vamos a suponer que la conexión a la base de datos ya la tenemos configurada.


// $db es la conexión a la base de datos

$select = $db->select();

$select->from('mitable');

$select->where('id LIKE ?' => $id);

$stmt = $select->query();

$result = $stmt->fetchAll();

Este seria un ejemplo básico de selección de un dato de una tabla y devolver todos los datos con ese Id.

Para mas información y mas métodos http://framework.zend.com/manual/1.12/en/zend.db.select.html

 

 

 

Acceder a datos JSON con jQuery – jQuery Tips

Una de las maneras para rellenar un formulario dinámicamente en base a una petición AJAX es por medio de JSON.

Supongamos el siguiente escenario. Tenemos un formulario que se tiene que autorellenar en base a una petición AJAX, por ejemplo, le pasamos el código de una persona y nos tiene que mostrar los datos.


// Fichero datos.php

$datos = array(

1 => array('nombre' => 'Yo', 'apellidos' => 'mismo'),

2 => array('nombre' => 'Tu', 'apellidos' => 'aquel'),

);

$codigo = filter_input(INPUT_POST, 'codigo', FILTER_SANITIZE_NUMBER_INT);

foreach ($datos as &$dato) {
 $dato = utf8_encode($dato);
 }
 echo json_encode($datos[$codigo]);


<!-- Fichero formulario.html -->

<form id='formulario'>
 <input type='text' id='codigo'>
 <button type='button' id='buscar'>Buscar Registro</button>
 <input type='text' id='nombre'>
 <input type='text' id='apellidos'>
</form>
<script>
$('#buscar').click(function(){
 $.post('datos.php', {codigo:$('#codigo').val()}, function(data){
 data = JSON.parse(data);
 $('#nombre').val(data.nombre);
 $('#apellidos').val(data.apellidos);
 });
 return false;
});
</script>

En este ejemplo los datos están almacenados dentro de un array, lo normal es que fueran resultado de una consulta SQL.

En el formulario pongo, por ejemplo, el 1 para obtener los datos, estos se mandan vía post al fichero de datos, antes de devolverlos los codifico con utf8_encode para que no de ningún error, luego les damos formato con json_encode, y una vez que lo recibimos los tenemos que tratar con JSON.parse para poder acceder a ellos como si fueran un objeto.

PHP en Mac OS X 10.9 Mavericks – Mac OS X Tips

Mac OS X MavericksYa ha pasado mas de una semana desde la llegada del nuevo Mac OS X Mavericks, y tengo que decir que me esta gustando bastante, a parte de ser gratuito, funciona muy bien.

Una de mis «sorpresas» ha sido comprobar que la configuración que tenia para el desarrollo de PHP ha desaparecido, y he tenido que remontarlo todo, pero vamos no me ha supuesto mucho tiempo.

Cambio en la versión de PHP.

En Mac OS 10.8, creo recordar que la versión que tenia instalada era la 5.3.14, estoy hablando un poco de memoria, pero seguro que era la 5.3, en esta nueva versión tenemos de serie la 5.4.17, si queréis comprobarlo solo tenéis que abrir una terminal y escribir php -v

¿Donde esta mi PEAR?

Así es, como suena, todo mi directorio con las librerías PEAR ha desaparecido, también decir que lo tenia dentro del sistema y no en proyecto así que esto puede llegar a ser comprensible,  pero si abrimos un terminal y vamos al directorio  /usr/lib/php nos encontraremos un ejecutable llamado install-pear-nozlib.phar se nos instalara PEAR, no olvidar instalarlo como root.


sudo install-pear-nozlib-phar

¿Yo tenia el XDebug instalado, no?

Si cambiamos el PHP cambiamos las extensiones, así que si teníamos instalado por ejemplo el XDebug pues ya yo esta, así que toca reinstalarlo. Lo mas sencillo, el metodo PECL, pero antes de ejecutarlo es mejor que instaléis las «command line development tools’ ya que si no lo hacéis, casi seguro que os saldrá el siguiente error.


fatal error: 'php.h' file not found
#include <php.h>
         ^

Instalar command line development tools


sudo xcode-select --install

Una vez instalado ya podemos instalar el Xdebug


sudo pecl install xdebug

Una vez instalado tenemos que agregar la linea «zend_extension=xdebug.so» a nuestro php.ini, esto lo veremos  en el siguiente apartado, pero si agregamos esa linea como nos dicen nos dará error, la linea que tenemos que agregar para que nos funcione es la siguiente


zend_extension = "/usr/lib/php/extensions/no-debug-non-zts-20100525"

¿Donde esta el php.ini?

La respuesta a esta pregunta es sencilla, de serie no esta como tal, esta como php.ini.default, al cual tenemos que cambiarle el nombre a php.ini o crear un enlace simbólico a este, para que la configuración se nos aplique. Este fichero podemos encontrarlo en el directorio /etc, y es un fichero de solo lectura, así que si queremos modificar algo o bien le cambiamos los permisos a escritura mientras lo editamos, o si usamos el vi o vim, los cuales tengo que decir que para estas cosas de configuraciones yo los uso siempre, guardamos los cambios con wq!.

Cosas que agregar al php.ini

En el fichero no están definidos los path de búsqueda, así que buscar donde dice include_path y agregar, los directorios que queremos incluir. Por ejemplo, si tenemos instalado PEAR querremos incluir en el path el directorio de PEAR.


include_path = ".:/usr/lib/php/pear"

Si usais el vi/vim una manera muy sencilla de llegar hasta esta linea es hacer lo siguiente una vez abierto el fichero:

Pulsamos ESC a continuación escribimos /include_path y pulsamos ENTER, y así nos va hasta la linea donde pone include_path.

Si la linea empieza con ; quitarlo ya que sino continuara siendo un comentario.

En el ejemplo anterior de la extensión de Xdebug, una manera muy sencilla de agregar la linea, como esta se puede poner al final del fichero podemos hacer lo siguiente:


sudo echo zend_extension = "/usr/lib/php/extensions/no-debug-non-zts-20100525" >> /etc/php.ini

Comparando cadenas con strcmp – PHP Tips

Una de las maneras mas sencillas de comparar 2 cadenas con PHP es mediante strcmp.  La comparación entre las 2 cadenas se realiza de manera binaria y es sensible a mayúsculas y minúsculas.

Uso:

int strcmp(string1, string2);

Valores devueltos:

< 0 si string1 es menor que string2, >0 si string1 es mayor que string2 y 0 si son iguales.

Mucho cuidado con:

Una de las cosas con las que hay que tener cuidado a la hora de usar el strcmp es que cuando las 2 cadenas son iguales devuelve 0. Veamos el siguiente ejemplo:

$string1 = "Hola";

$string2 = "Hola";

$string3 = "Adios";

if (strcmp($string1, $string2)) {

echo "Las cadenas son iguales";

} else {

echo "Las cadenas no son iguales";

}

// Esto devolvera "Las cadenas no son iguales";

if (strcmp($string1, $string3)) {

echo "Las cadenas son iguales";

} else {

echo "Las cadenas no son iguales";

}

// Esto devolverá "Las cadenas son iguales";

En el ejemplo anterior al comparar dos cadenas iguales nos dice que no son iguales y si comparamos dos distintas nos dicen que son iguales, esto es debido a que strcmp devuelve un numero que es 0 cuando son iguales, el cual se interpreta dentro del if como falso, y cuando son distintas devuelve un numero que no es 0 el cual es interpretado como verdadero.

El uso adecuado dentro de un if del strcmp es:


$string1 = "Hola";

$string2 = "Hola";

$string3 = "Adios";

if (strcmp($string1, $string2) === 0) {

echo "Las cadenas son iguales";

} else {

echo "Las cadenas no son iguales";

}

// Ahora si devolvera que las cadenas son iguales

Mas información: http://us1.php.net/manual/es/function.strcmp.php

Devolver una cadena al revés con PHP strrev – PHP Tips

strrev es una función que nos permite generar una cadena invertida. A primera vista seguro que es una función para la cual muchos no le veríamos utilidad ninguna, pero quizá en alguna ocasión puede que nos venga bien conocerla.

Ejemplo:


$cadena = "Hola Mundo";

$invertida = strrev("Hola Mundo");

echo $invertida; // devuelve odnuM aloH

 

Funciones de Arrays: array_shift y array_unshift – PHP Tips

Hay muchas funciones con arrays que cuando las ves en el listado de funciones crees que no las vas a usar nunca, quizá en el momento no le ves mucha utilidad, pero llega un día en el cual tienes que echar mano de ellas, esto me ha sucedido con las funciones array_shift y array_unshift, que ha llegado un día en el cual, no solo una, sino las 2 me han sido de mucha utilidad.

Array_shift

Definición:

array_shift() Quita el primer valor del array y lo devuelve, acortando el array un elemento y corriendo el array hacia abajo. Todas la claves del array numéricas serán modificadas para que empieze contando desde cero mientras que los arrays con claves literales no serán modificados.

Uso:

mixed array_shift(array &$array);

Array_unshift

Definición:

array_unshift() añade los elementos pasados al inicio de array. Observe que la lista de elementos se añade como un todo, por lo que los elementos añadidos permanecen en el mismo orden. Todas las claves numéricas del array serán modificadas empezando a contar desde cero mientras que las claves literales no se tocan.

Uso:

int array_unshift ( array &$array , mixed $value1 [, mixed $… ] );

Ejemplo

Imaginemos que tenemos que obtener datos desde un fichero CSV procesarlo y escribir los datos en otro fichero CSV. Estos ficheros siempre llevan un encabezado el cual nos define el nombre de las columnas. Esta linea no nos será de mucha utilidad a la hora de procesar los datos contenidos en el fichero, pero es necesaria a la hora de escribir los datos en el otro fichero.


// $csv contiene los siguientes datos:
  $csv = array(
           array('nombre','apellido','email','usuario'),
           array('Yo','Mismo','mi@email.es',''),
           array('Tu','Tambien','tu@email.com','')
         );
$cabecera = array_shift($csv); // $cabecera almacenara la primera fila
foreach ($csv as &$var) { // proceso el foreach por referencia para modificar los datos del array
    $var['usuario'] = $var['nombre'].".".$var['apellido']; //concateno el nombre y apellidos
}
$array_unshift($csv, $cabecera); // pongo el array con los nombres de columna al principo

+ Info:
array_shift

array_unshift

Como cambiar de MyISAM a INNODB – MySQL Tips

Antes en MySQL el mecanismo de almacenamiento predeterminado esta MyISAM,  hasta que cambio a INNODB. ¿Cual es mejor? ¿Debería migrar mis bases de datos a INNODB? a la primera pregunta diría que es bastante mejor INNODB y si deberíamos o no migrar las bases de datos, pues en casos será conveniente y en otros no, pero si creamos bases de datos desde cero es conveniente establecer el mecanismo como INNODB.

Como cambiar de MyISAM a INNODB


ALTER TABLE nombre_tabla ENGINE=INNODB;

No existe un comando que nos permita cambiar todas las tablas de una base de datos de MyISAM a INNODB, y para hacerlo tenemos que cambiar una a una.

Para facilitar las cosas siempre podemos crearnos un script que acceda a nuestra base de datos, tenga permisos ALTER y hacerlo todo de una vez.

He desarrollado un script en PHP que lo hace


<?php
/**
* Created by Ruben Lacasa Mas
* User: Ruben Lacasa Mas <ruben@rubenlacasa.es>
* Date: 18/10/13
* Time: 12:18
*/
$dbhost = 'hostname';
$dbname = 'dbname';
$dbuser = 'dbuser';
$dbpass = 'dbpassword';
$dsn = 'mysql:dbname='.$dbname.';host='.$dbhost;
try {
$dbh = new PDO($dsn, $dbuser, $dbpass);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
$sql = "SHOW TABLES";
$query = $dbh->prepare($sql);
$query->execute();
$tables = $query->fetchAll(PDO::FETCH_CLASS);
foreach ($tables as $table) {
$sqlAlter = "ALTER TABLE ".$table->Tables_in_dbname." ENGINE=INNODB;";
$dbh->exec($sqlAlter);
}

view raw

alterEngine.php

hosted with ❤ by GitHub

Mas información: http://dev.mysql.com/doc/refman/5.0/es/converting-tables-to-innodb.html http://es.wikipedia.org/wiki/InnoDB

Funciones anonimas en PHP – PHP Tips

El otro día en la entrada cargando clases php automaticamente en el ultimo ejemplo usaba una función anomima o clausura para lanzar la función spl.

La definición que nos da la documentación es:

Las funciones anónimas, también conocidas como clausuras (closures), permiten la creación de funciones que no tienen un nombre especificado.
 

Estas funciones fueron introducidas en PHP 5.3 y su uso es prácticamente igual que cuando definimos funciones en Javascript.


//Ejemplo de definición de función en Javascript

var miFuncion = function (nombre) {

document.write('Tu nombre es ' + nombre);

};

miFuncion('Ruben'); // Escribe 'Tu nombre es Ruben'


// Ejemplo de definición de función anónima en PHP

$miFuncion = function ($nombre) {

echo 'Tu nombre es '. $nombre;

}

$miFuncion('Ruben'); //Escribe 'Tu nombre es Ruben'

Se puede ver en los dos ejemplos que el uso y definición de ambas es prácticamente igual. Otro de los usos para estas funciones es como callback en funciones tengan esa opción.


echo preg_replace_callback('~-([a-z])~', function ($coincidencia) {
return strtoupper($coincidencia[1]);
}, 'hola-mundo');
// Devuelve holaMundo

Para mas información sobre las funciones anónimas http://www.php.net/manual/es/functions.anonymous.php

Enhanced by Zemanta