A la hora de realizar aplicaciones PHP/MySQL, normalmente se suele utilizar la librerÃa mysql, cuando existe la librerÃa mysqli, la cual puede ser más eficiente.
Os paso 4 motivos que a mà me han parecido muy importantes:
Prepared statements: a parte de ser más cómodo a la hora de montar nuestras querys, ofrece mucha seguridad contra el SQL injected.
$mysqli = new $stmt = $mysqli->prepare("select usuario from usuarios where i = ?");
$stmt->bind_param('i',$id);
$stmt->execute();
Conexiones seguras: la posibilidad de usar mysqli_ssl_set() permite realizar conexiones seguras indicando detalles del certificado mediante los parámetros.
Múltiples querys: posibilidad de ejecutar varias querys separadas por punto y coma, en una conexión.
Interfaz orientado a objetos: esta caracterÃstica permite al desarrollador ampliar el objeto para añadir nuevas funcionalidades más especÃficas. Por ejemplo se podrÃan separar los errores de operación (conexión) a los de desarrollo (querys mal formadas).
Un truco que no conocía y que me puede venir muy bien (y espero que a vosotros). Se trata de ejecutar scripts de MySQL muy extensos (provenientes de un dump, por ejemplo) sin que nos dé el problema del tamaño máximo del fichero a subir.
El truco es sencillo, nos creamos una carpeta donde subimos el fichero con los scripts, y a la hora de importar, seleccionamos el “Web server upload directory”, para lo que habrá que modificar el fichero de configuración (config.inc.php) para indicar el directorio de uploads (UploadDir). Execute large MySQL scripts through phpMyAdmin
Comienzo: Symfony tiene mucha documentación y gente por detrás desarrollando y ayudando, algo de lo que anda un poco corto Zend.
Testing: Symfony viene con tareas de testing por lÃnea de comandos y genera una clase vacÃa para ello al crear un controlador. Mientras que Zend no ofrece soporte para testing.
Plantillas: Zend tiene un sistema de plantillas un poco verde al que hay que hacerle algunos hacks para realizar algunas cosas. Symfony, al contrario, su sistema de plantillas es muy maduro, al cual le puedes añadir módulos.
Plugins: más de lo mismo, Symfony es extensible, Zend no.
Módulos de bases de datos: Zend usa ActiveRecord, mientras que en Simfony le puedes añadir el motor que desees, incluso Zend_Db.
Algo que siempre se usa que realmente solo se deberÃa crear una vez en nuestras aplicaciones web es el gestor de la base de datos. Y si seguimos con el estudio del framework de Zend, nos encontramos con unas funcionalidades sobre la BD bastante aceptables, aunque ellos mismos digan que deben añadir cosas.
Para mí, uno de los mayores fracasos de Twitter es su API, una limitación de su uso increíble para algo que le podría dar mucho juego a la aplicación. Ahora mismo no sé en cuánto está el límite, pero la posibilidad de realizar una aplicación basada en Twitter es una pesadilla.
Para aquellos que no quieran sufrir lo que hemos sufrido con TwitterPoster (los espacios en blanco es porque la gente actualiza su imagen y no podemos recuperar la de todos los usuarios por el límite en el API de Twitter), les recomiendo usar Twitter mediante CURL.
Os paso un script sencillito que he realizado:
<?php
// Primer hacemos login
$url ="https://twitter.com/sessions";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
// Por si tienen limitación por navegador
curl_setopt($ch, curlOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)");
// Poned una ruta para las cookies
curl_setopt ($ch, CURLOPT_COOKIEJAR, '/temp/');
curl_setopt ($ch, CURLOPT_COOKIEFILE, '/temp/');
curl_setopt ($ch, CURLOPT_POSTFIELDS, "username_or_email=[usuario]&password=[contraseña]");
// Para que funcione el https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, curlOPT_SSL_VERIFYHOST, 2);
curl_exec ($ch);
// Cargamos el home, porque Twitter añade dos campos ocultos para poder publicar por web
$url ="http://twitter.com/home";
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec ($ch);
// Recuperamos los campos ocultos
preg_match('//', $result, $match);
$authenticity_token = $match[1];
preg_match('//', $result, $match);
$siv = $match[1];
// Insertamos el texto
$res = $url ="http://twitter.com/status/update";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'siv='.$siv.'&authenticity_token='.$auth.'&status=[texto]');
curl_exec ($ch);
curl_close ($ch);
unset($ch);
?>
¿Qué fallo tiene este script? pues que si cambian el HTML (campos de formulario, …) o las URLs deja de funcionar, pero al menos no tenemos limitaciones. Eso sí, es más costoso para sus servidores y para los nuestros, porque en vez de hacer una llamada, hacemos 3, y en nuestro caso, a parte parseamos una página para obtener dos campos ocultos.
Open Flash Chart es una de los mejores componentes Flash para crear gráficas, su uso es bastante sencillo, pero aún así, siempre viene bien tener una capa de abstracción para despreocuparnos de cómo se usa. Los que desarrollen usando CakePHP disponen de una librería que les facilitará la labor de realizar gráficas.
New on PHPBuilder.com today there’s a tutorial showing you how to download and parse messages from Google Mail. In their case it’s grabbing and parsing submissions from a form. Some friends of mine publish a literary journal that accepts submissions via email. At their request I wrote a script to download messages from the journal’s Gmail account a …