En este blog voy dejando información que me suelo encuentro en Internet. Para poder tenerla a mano siempre, al igual que otra gente del palo.. Los temas están relacionados con informática, programación, desarrollo web y móvil.
2010-07-29
Cache de páginas con PHP con PHPguru.org
Question: Whats the best way to improve performance of your website?
Answer: Get rid of it, and stop worrying.
Unfortunately, that's not always practical (livelihoods etc). So lets have a look at caching instead. Rather miraculously I've just written and published some nifty caching code.
The code is PHP5 only, and built with a static class mindset. This kinda uses the OOP system as namespaces, though also uses inheritance to reuse common code. The code is separated out into three classes, Cache, OutputCache and DataCache. Groups and unique IDs are used to identify individual cached content. This comes in handy if you have to clear just a certain section of the cached data.
The Cache class is the base class, and contains common code for generating filenames, and reading and writing data files. Most of the code here is protected, as you shouldn't be interfacing with this class directly except in one instance, which is enabling or disabling the cache.
Output Cache
The OutputCache class is used for caching the generated output of your scripts, or certain sections of them. It has Start and End methods, and is used like this:
if (!OutputCache::Start("myGroup", "myID", 600)) {
// Generate some output (as you do)...
OutputCache::End();
}
?>
So whats happening here? Well first off the call to Start() passes the group, unique ID and the TTL (Time To Live) for this particular bit of caching. So the data will be uniquely identified on disk by the group/id combo, and will be considered stale after the TTL number of seconds have passed. This function returns true if the data is found in the cache, and also prints the data to the screen. This means the code inside the if() block is skipped (thanks to the not (!) operator), and so the data isn't printed twice.
If however, the given combo of group/id isn't found in the cache, the Start() method will return false. When this happens output buffering is turned on to record the output. The code inside the if() block will then run (again - the not (!) operator), generate the output (which gets buffered), and then call the End() method. This method stops output buffering, saves the data to disk, and then prints it.
Elegant, efficient, and sexy. What more could you ask for?
Data Cache
The DataCache is used to cache data structures, as opposed to script output. This allows you to cache the creation of large arrays for example, or the results of slow queries. This is helpful if your pages are rather dynamic, though some areas aren't. Or in a recently experienced situation of mine: You have one central DB server, and multiple front end webservers. A common setup. If the load is getting high on the database, you might want to move some portion of queries (ORDER BY RAND() is a good example) to the webservers instead of the database server. Thus randomisation (eg using shuffle()) happens on one of 5 webservers, instead of your single resource limited database server. Anyway, some code:
if (!$data = DataCache::Get("myGroup", "myOtherID")) {
$result = $db->query("SELECT BIG_ASS_QUERY()");
DataCache::Put("myGroup", "myOtherID", 600, $result);
}
// Do something useful with $result
?>
So in this example (very similar to output caching), if the data is cached, it's assigned to $data and the if() block is skipped. If not, then the if() block is run, and the data is cached at the Put() method call.
Miscellaneous Bits
There's a few configuration bits and bobs you can twiddle with if you like twiddling. setPrefix() as you can well imagine sets the prefix used in the cache data filenames. This defaults to "cache_". setStore() sets where the data files themselves are stored. This defaults to "/dev/shm/", since this is a convenient way to store the data files in shared memory. If you don't have this, try changing the path to "/tmp/". Must be given with a trailing slash.
And last, and least (so as not to be a corny ass), there's the static variable Cache::$enabled. That's how your refer to static class variables in case you didn't know. This is a boolean which enables or disables the cache. Surprising that.
C'est tout. Get the code here.
Fuente: LINK EJEMPLO LINK CLASES
Clase para crear Captcha con PHP demanera simple.
La utilización de captcha es muy importante en todos los sitios Web, principalmente cuando se tiene algún tipo de formulario que realice la acción de mandar un email o registrar información en la base de datos.
SimpleCaptcha es una clase en PHP que nos permite realizar captcha fácilmente, su estilo particular se asemeja al captcha que utiliza Google para sus formularios.
Para poder utilizarlo debemos bajarnos el paquete que vendrá con un ejemplo incluido.
Este es un ejemplo básico de como utilizarlo:
Paso 1: Generar la imagen captcha con php
Primero iniciamos sesión para poder guardar la variable captcha en ella, luego instanciamos la clase SimpleCaptcha.
Podemos también configurar las opciones que vienen por defecto.
- session_start();
-
- $captcha = new SimpleCaptcha();
-
- //$captcha->wordsFile = 'words/es.php';
- //$captcha->session_var = 'secretword';
- //$captcha->imageFormat = 'png';
- //$captcha->scale = 3; $captcha->blur = true;
- //$captcha->resourcesPath = "/var/cool-php-captcha/resources";
-
- $captcha->CreateImage();
session_start(); $captcha = new SimpleCaptcha(); //$captcha->wordsFile = 'words/es.php'; //$captcha->session_var = 'secretword'; //$captcha->imageFormat = 'png'; //$captcha->scale = 3; $captcha->blur = true; //$captcha->resourcesPath = "/var/cool-php-captcha/resources"; $captcha->CreateImage();
Paso 2: Crear el formulario html
Este es un simple formulario donde en el src de la imagen pondremos la ruta del captcha generado con php.
- <div>
- <img src="captcha.php" id="captcha" /><br/>
- <a href="#"
- onclick="document.getElementById('captcha').src='captcha.php?
- '+Math.random();" id="change-image">
- Recargar Captcha.a> <br/>
- <input type="text" name="captcha" id="captcha-form" />
- <input type="submit" value="Enviar" />
- div>
Paso 3: Validar el captcha
- if (!emptyempty($_REQUEST['captcha'])) {
-
- $txt=trim(strtolower($_REQUEST['captcha']));
-
- if ( emptyempty($_SESSION['captcha']) ||
- $txt != $_SESSION['captcha'] ){
- echo "Captcha incorrecto";
- } else {
- echo "Captcha correcto!";
- }
- unset($_SESSION['captcha']);
- }
if (!empty($_REQUEST['captcha'])) { $txt=trim(strtolower($_REQUEST['captcha'])); if ( empty($_SESSION['captcha']) || $txt != $_SESSION['captcha'] ){ echo "Captcha incorrecto"; } else { echo "Captcha correcto!"; } unset($_SESSION['captcha']); }
Fuente: Link Link2
Cache de páginas con PHP
Para muchos sitios Web que utilizan la potencia de PHP, MySQL o alguna otra base de datos, siempre que carga una página realizan consultas a la DB y su debido procesamiento con el lenguaje de programación, en este caso PHP.
Para las páginas con poco cambio de contenidos como blogs por ejemplo, difícilmente editaríamos un Post cada rato, seria de gran utilidad y rendimiento ponerle cache.
Ejemplo de petición
Este grafico nos muestra como se realiza todo el proceso para mostrar el contenido al usuario que esta realizando una petición mediante Internet:
- Primero se conecta a la base de datos.
- Luego procesa las noticias para mostrarlas
- Finalmente lee una plantilla para reemplazar variables y mostrar las noticia.
Para optimizar la rapidez de respuesta del servidor al usuario, se arma el cache con la ultima consulta que realizo el usuario, de este modo se obviarían los pasos que mencionamos anteriormente.
Este grafico muestra el proceso que se realizaría si la página tuviera u archivo cache.
Este script realiza esta función de guardar en cache toda la respuesta en html, para esto se debió crear una carpeta “cache/” con permisos de escritura, donde se almacenaran los archivos.
- // iniciar el buffer de salida
- ob_start();
- //Aqui pones tu codigo HTML y PHP
- $cachefile = "cache/home.html";
- $fp = fopen($cachefile, 'w');
- fwrite($fp, ob_get_contents());
- fclose($fp);
- ob_end_flush();
// iniciar el buffer de salida ob_start(); //Aqui pones tu codigo HTML y PHP $cachefile = "cache/home.html"; $fp = fopen($cachefile, 'w'); fwrite($fp, ob_get_contents()); fclose($fp); ob_end_flush();
Esta función nos guardara el archivo, ahora debemos tener un script que compruebe que existe cache para evitar la interacción con la DB.
- $cachefile = "cache/home.html";
- if (file_exists($cachefile)) {
- include($cachefile);
- exit;
- }
$cachefile = "cache/home.html"; if (file_exists($cachefile)) { include($cachefile); exit; }
Agregar un tiempo de expiración para las páginas cache.
No es recomendable dejar una pagina con cache de por vida, para esto tenemos que darle un tiempo determinado y que renueve su información con datos más actuales.
- $cachetime = 5 * 60;
- if (file_exists($cachefile) &&
- (time() - $cachetime < filemtime($cachefile)))
- {
- include($cachefile);
- echo "n";
- exit;
- }
$cachetime = 5 * 60; if (file_exists($cachefile) && (time() - $cachetime <>n"; exit; }
Esta seria la forma en que podría quedar el proceso para armar y consultar una pagina cache.
- $cachefile = "cache/".$reqfilename.".html";
- $cachetime = 5 * 60; // 5 minutes
- if (file_exists($cachefile) && (time() - $cachetime
- < filemtime($cachefile)))
- {
- include($cachefile);
- echo "n";
- exit;
- }
- ob_start();
- //.. Your usual PHP script and HTML here ...
- $fp = fopen($cachefile, 'w');
- fwrite($fp, ob_get_contents());
- fclose($fp);
- ob_end_flush();
$cachefile = "cache/".$reqfilename.".html"; $cachetime = 5 * 60; // 5 minutes if (file_exists($cachefile) && (time() - $cachetime <>n"; exit; } ob_start(); //.. Your usual PHP script and HTML here ... $fp = fopen($cachefile, 'w'); fwrite($fp, ob_get_contents()); fclose($fp); ob_end_flush();
Original de: The UK Web Design Company
Fuente: Link
Implementando un sistema de caché en PHP
Lo primero que debemos hacer es pensar en que necesitamos para su correcto funcionamiento, así que, manos a la obra.
Como sabemos, una caché es un sistema al que le pasamos un objeto X y él lo almacenará en su sistema de una manera determinada, por lo tanto, necesitaremos una función que dado un identificador único y unos datos, guardará la información. Además de esto, necesitamos indicarle un tiempo de vida (ttl) a esa información cacheada, sino estaremos devolviendo eternamente el valor almacenado.
Un concepto que nos puede resultar interesante es el de caché de grupo. Imaginemos que tenemos un sistema que va cacheando información de nuestra base de datos; tenemos una tabla user y una tabla user_profile y cacheamos los resultados de ambas tablas por separado. Imaginemos también que por temas de LOPD el usuario solicita que eliminemos todos sus datos de nuestras máquinas, así que eliminaremos el registro de la tabla user y user_profile y procederemos a eliminar el cacheo de los datos de cada tabla por separado. Si tuviesemos agrupada la información de usuario, con una única llamada a la función remove y pasándole el identificador de grupo, eliminará la caché de ambas tablas.
A medida que vaya explicando cada función, os pondré el resultado final para que os hagais una idea de como va quedando el código:
LINK
DESCARGAR CLASE: cache.class.php
2010-07-25
SEO: Posicionamiento en Google
Como parte de las ponencias en Navarparty 5, evento desarrollado recientemente en Pamplona; rescato la charla de Antonio Javier Ortiz, sobre SEO.
El video se segmenta en una primera media hora sobre conceptos SEO y el resto en un pin-pong de preguntas y respuestas.
Antonio no deja títere con cabeza: mitos y verdades sobre SEO, técnicas de posicionamiento, análisis de estadísticas, tráfico web, redes sociales, BlackHat y WhiteHat, etc, etc, etc.
Si querés aprovechar los mejores 60 minutos de tu día, este es el video.
Vía: RinconSEO
4 Herramientas para análisis SEO
Si eres webmaster o tienes sitios a tu cargo quizás debas prestar mas atención a las optimizaciones SEO, en este breve texto voy a describir algunas herramientas de análisis SEO que suelo utilizar y quiero compartirlas con ustedes.
Popuri
Esta herramienta mezcla en un solo reporte un montón de información de tu sitio proveniente de otros servicios de rankeo, también muestra tu pagerank, enlaces en Del.icio.us, enlaces reportados por Yahoo entre otras cosas.
Raven
Una de las herramientas de predilección, la misma consiste en brindarte un score a tu sitio, el mismo es obtenido del análisis de tu sitio, contenido, califica la utilización de tags, etc, Muy recomendable.
Websitegrader
Otra gran herramienta de reporte SEO, con ella obtendrás un muy completo reporte SEO de tu sitio, en el encontraras el estado de tu pagerank, paginas indexadas, nivel de trafico, apariciones en Dmoz como también en otros directorios, estas informaciones y otras podrás ver utilizando esta poderosa herramienta SEO.
SEOCentro
Un set de útiles herramientas para análisis SEO, la herramienta que mas me llamo la atención es la KeyWord Density, siempre es bueno chequear nuestra densidad de palabras en nuestros sitios, no es bueno abusar con la densidad de palabras clave en el contenido, puede ser perjudicial para el posicionamiento.
Fuente: chicaseo.com
Nueva Forma de Embeber Videos de Youtube
Youtube ahora nos ofrece un nuevo código para embeber nuestros videos, hasta ahora lo hacíamos con el tag
Youtube ha abierto una página donde tratan sobre las características del Reproductor de video HTML5, también un foro de discusión para saber que opinan sobre este nuevo reproductor y anunciar cualquier limitación o falla.
Código del nuevo Embed.
- iframe class="youtube-player" type="text/html" src="http://www.youtube.com/embed/VIDEO_ID" width="640" frameborder="0" height="385"
- iframe
Nice Entity – Todas las entidades HTML organizadas por pestañas
Nice Entity es un portal que nos permite informarnos sobre las entidades y nos permite colocarlas en nuestros sitios web, es útil por ejemplo si queremos mostrar que nuestro blog o sitio web tiene licencia copyright.
Todas las entidades están organizadas mediante pestañas, las cuales están repartidas por símbolos, símbolos matemáticos, figuras, caracteres acentuados y muchas más.
Nice Entity, un servicio realmente útil, recomendado para personas que tengan un sitio web o blog o sean desarrolladores web.
Fuente:wwwhatsnew.com
Piwik – Sistema de estadísticas de sitios web open source ahora con nueva interfaz
Piwik es una aplicación web open source disponible para descargar e instalar en un servidor web, que permite registrar el tráfico de un sitio web. Recientemente han liberado una nueva versión con interesantes mejoras, la más importa de ellas, es el nuevo aspecto de la interfaz que luce más estilizada y configurable.
Características principales de Piwik:
- Reportes en tiempo real.
- Ofrece a los desarrolladores/webmasters un sistema de plugins y API.
- Se trata de un desarrollo open source.
Piwik es una muy buena alternativa (no la única) a Google Analytics. Para montarlo en un servidor web sólo requiere de MySQL y PHP.
Mi experiencia personal con Piwik es muy buena; llevo usándolo en algunos proyectos algo más de una año. Todas las personas que consultan sus reportes están muy contentas, ya que les agrada que los datos sean en tiempo real, la simpleza de su interfaz y la forma sencilla de mostrar los datos.
Piwik
Sitio: piwik.org
Fuente: pixelcoblog.com
2010-07-22
Excelentes aplicaciones web para crear presentaciones online
Prezi
En Prezi podemos crear presentaciones muy particulares, ya que lo armamos todo en una sola pantalla, enfocando cada punto como un “slide”, y con la opcion de zoom para verse como un mapa mental.
web: Prezi.com
Empressr
Com Empressr podemos realizar presentaciones con videos, audios e imagenes, dandonos la posibilidad de compartirlo o de generar un codigo para ponerlo en nuestro blog.
web: Empressr.com
Imageloop
Se caracteriza por la rapidez en subir los archivos para las presentaciones, con esta aplicacion web tambien podemos compartir nuestras presentaciones en las redes sociales y embeberlas en nuestras paginas web.
web: Imageloop.com
MyPlick
En esta aplicacion web no solo podemos crear presentaciones, tambien las podemos subir siempre y cuando esten en formatos Power Point, Open Office, PDF, Word, Excel.
web: Myplick.com
PreZentit
Con PreZentit podras crear buenas presentaciones escogiendo si las quieres publicas o privadas, tambien genera una url unica para cada presentacion en caso quieras compartirla con alguien.
web: PreZentit.com
WordPress Cheat Sheet o "resumen de tags"
http://ekinertac.com/wp-content/uploads/2009/07/Wordpress-Cheat-Sheet.pdf
2010-07-15
Fragmento caché - una introducción / PHP
Código fuente
Este artículo viene con dos archivos de PHP (5,3) Código fuente: el real de la clase FragmentCache y un archivo de prueba. Este código fuente está sujeta a la licencia MIT.
Optimización de contenido web
Cuando un sitio web en la complejidad aumenta y comienza a depender de numerosas fuentes de datos y miles de líneas de código, se retrasa, no importa qué lenguaje de programación o bases de datos usado. Y eso afecta tanto a la hora de servir a la página y el número de páginas por segundo que pueden ser atendidas por su servidor web. Hay muchas maneras de este problema se puede abordar y todas ellas deben ser consideradas. Más de hardware y más rápido, más y mejor software, y luego está la optimización de código fuente.
Aca hay esta clase para hacer Cachin con PHP 5.3
Este artículo viene con dos archivos de PHP (5,3)
Código fuente: el real de la clase FragmentCache y un archivo de prueba.
Este código fuente está sujeta a la licencia MIT.
2010-07-10
Recopilación de las funciones más utilizadas para el manejo de archivos y su respectiva sintaxis.
Cambiar el nombre del propietario de un archivo
chown ('El_archivo.xxx','Mi nombre');
Copiar un archivo
copy('El_archivo.xxx','/nuevo_directorio/');
Optener el directorio inicial de un archivo o subdirectorio
dirname('directorio_raiz/subdirectorio');
Obtener el espacio disponible en un directorio en Bytes.
disk_free_space('directorio');
Verificar si un archivo existe
file_exists ('archivo.xxx');
Obtener la hora del ultimo acceso a un archivo
fileatime('archivo.xxx');
Obtener la hora de la ultima modificación de un archivo
filemtime('archivo.xxx');
Obtener el dueño de una archivo
fileowner ('archivo.xxx');
Obtener los permisos de una archivo
fileperms ('archivo.xxx');
Obtener el tamaño en bytes de un archivo
filesize('archivo.xxx');
Obtener el tipo de archivo
filetype('archivo.xxx');
Abrir un archivo o dirección URL
fopen ('archivo.xxx','r');
Saber si un archivo es ejecutable
is_executable('archivo.xxx');
Indicar si el archivo se puede leer
is_readable('archivo.xxx');
Indica si un archivo fue subido mediante HTTP POST upload
is_uploaded_file ('archivo.xxx');
Saber si un archivo se puede escribir
is_writable ('archivo.xxx');
Crea un directorio con permisos.
mkdir('/nuevo_directorio',0777);
Mover un archivo cargado a través de HTTP POST de un directorio a otro predefinido
move_uploaded_file ('directorio/archivo.xxx','directorio2/archivo.xxx');
Leer el contenido resultante de archivo file_get_contents('el_archivo.xx');
Renombrar un archivo o directorio
rename("/tmp/archivo_temp.txt", "/home/usuario/login/docs/mi_archivo.txt");
ELIMINAR UN DIRECTORIO
rmdir('/directorio');
CREAR UN ARCHIVO TEMPORAL
tmpfile();
ELIMINAR UN ARCHIVO
unlink('ARCHIVO.XXX');
Importante: Alguna de estas funciones requieren tener permisos 0777 chmod para poder trabajar correctamente. |
La mayoría de ellas devuelven un booleano, por lo cual se puede imprimir un resultado en pantalla de la siguiente manera:
if(unlink('el_archivo.txt') echo 'se ha eliminado el archivo';
else echo 'Imposible eliminar el archivo, compruebe que el fichero exista y que tenga permiso xxx.';
?>
Recuerda que para establecer permisos a directorios o archivos se deben emplear 4 cifras no 3 como usualmente se hace y produce error.
Ejemplos:
0777, 0755, 0666, etc…
Esto se debe a que el número para especificar el permiso debe incluirse en octal (Base 8). En PHP y otros lenguajes de programación.
Los números en Base 8 se escriben con un 0 delante para diferenciarlos de los números en Base 10 o sistema decimal.
Trabajando con archivos
Otras de las gran ventajas de PHP, es la manipulación de archivos internos y remotos. Para ello se utiliza una función esencial fopen(); que se encarga de abrir un archivo o URL, Basándose en una serie de parámetros que iremos describiendo.La sintaxis de esta función con la que trabajaremos es la siguiente: fopen ('archivo.xxx','Modo');
Donde archivo es el nombre del mismo y (.xxx) su extensión, cabe destacar que si la llamada de este archivo se hace de la siguiente forma: esquema://, se asume que es una URL y Php buscara un gestor de protocol para tal esquema. Recordemos que los protocoles pueden ser (http, https, ftp, ftps, pop, pop3, y otros), si Php no encuentra una o más envolturas registradas para dicho protol, se emitirá un mensaje de error.
Modo, se refiere a la forma en que abrimos el archivos (bajo que recursos). Por ejemplo:
Si queremos hacer una apertura para solo lectura, o lectura y escritura u otro. Estos modos se designan con Letras predefinidas en Php, que son las siguientes:
'r' Apertura para sólo lectura; ubica el apuntador de archivo al comienzo del mismo.
'r+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo del mismo.
'w' Apertura para sólo escritura; ubica el apuntador de archivo al comienzo de éste y lo trunca a una longitud de cero. Si el archivo no existe, intenta crearlo.
'w+' Apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de éste y lo trunca a una longitud cero. Si el archivo no existe, intenta crearlo.
'a' Apertura para sólo escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo.
'a+' Apertura para lectura y escritura; ubica el apuntador de archivo al final del mismo. Si el archivo no existe, intenta crearlo.
'x' Creación y apertura para sólo escritura; ubica el apuntador de archivo al comienzo de éste. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no existe, intenta crearlo. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT en la llamada de sistema open(2) interna. Esta opción es soportada en PHP 4.3.2 y versiones posteriores, y sólo funciona con archivos locales. ´
'x+' Creación y apertura para lectura y escritura; ubica el apuntador de archivo al comienzo de éste. Si el archivo ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el archivo no existe, intenta crearlo. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT en la llamada de sistema open(2) interna. Esta opción es soportada en PHP 4.3.2 y versiones posteriores, y sólo funciona con archivos locales.
Un ejemplo:
$archivo= fopen("documento.txt" , "r");
if ($archivo) {
while (!feof($archivo)) {
echo fgets($archivo, 255).'
';
}
}
fclose ($archivo);
?>
Explicando:
Primero abrimos el archivo en modo de lectura y lo agrupamos a la variable $archivo, si se puede realizar la apertura (ósea si fopen() devuelve TRUE), Ejecutamos un bucle WHILE y en el argumento introducimos la función feof(), Encargada de verificar si el apuntador a un fichero esta al final del mismo. Luego la función fgets(), se encarga de imprimir la línea del fichero apuntado. y finalmente cerramos el archivo con fclose();
Otro Ejemplo:
$archivo=fopen("documento.txt" , "w");
if ($archivo) {
fputs ($archivo, "Resulto el script");
}
fclose ($archivo);
?>
Explicando:
Abrimos el archivo nuevamente pero esta vez en modo de solo Escritura. Si se puede ejecutar ese proceso if($archivo), agregamos una línea con fputs(), que tendrá como contenido Resulto el script.
El ultimo paso en esta oportunidad como ya conocemos es cerrar el archivo. Cabe destacar que para que este ultimo ejemplo funcione, obviamente el archivo documento.txt, requiere tener PERMISO DE ESCRITURA, preferiblemente 0777 CHMOD.
Fuente: link
2010-07-09
Maquillar un Input file upload CSS para el campo FILE del XHTML
Vamos a ver de que forma podemos maquillar los feos controles de upload de los formularios sin utilizar javascript y validando xhtml.
Lo que vamos a hacer es colocar un div en lugar del input_file, y este dentro del div de la siguiente manera
Aplicamos ahora una capa de maquillaje que lo deje irreconocible
div.upload {
position: relative;
width: 80px;
height: 24px;
overflow:hidden;
background:url(btn_upload.png) left top no-repeat;
clip:rect(0px, 80px, 24px, 0px );
}
div.upload input {
position: absolute;
left: auto;
right: 0px;
top: 0px;
margin:0;
padding:0;
filter: Alpha(Opacity=0);
-moz-opacity: 0;
opacity: 0;
}
Qué es lo que hemos hecho ? Simplemente hacer transparente el input_file, y mediante la propiedad css “clip” evitamos que el control se salga de los límites del div.
Y para que su aspecto sea más profesional todavía, le añadimos al div una imagen como esta
2010-07-08
Utilidades para comprobar la calidad del código PHP
5 herramientas para comprobar la calidad de código PHP:
- PHP_CodeSniffer comprueba si falta algún elemento de código estándar en los scripts PHP, Javascript y CSS
- phpmd busca en el código PHP posibles problemas como bugs, código no óptimo o expresiones complicadas.
- phpcpd detector de código PHP copiado/pegado.
- PHP_Depend herramienta de métricas PHP.
- PHPUnit framework de unidades de test.
Quality Assurance Tools for PHP
Vía / PHPDeveloper.org
Lista de herramientas para generar datos de prueba
Una de los grandes problemas con los que nos podemos enfrentar a la hora de desarrollar una aplicación web es que el rendimiento en las etapas iniciales no es similar a cuando hay muchos datos y muchos usuarios concurrentes. Para los usuarios se pueden hacer pruebas de estrés, pero para el volumen de datos que debe manejar la base de datos hay que rellenar las tablas con datos de prueba. Para ello, este listado puede sernos bastante útil:
- GenerateData: para mí uno de los mejores, y del que ya hablé hace tiempo.
- DBMonster: para generar datos aleatorios en la base de datos. Muy completo pero algo más complejo.
- CSV Data Generator: basado en Ruby genera ficheros CSV.
- Datagenerator: este me ha gustado bastante, es sencillo y no por ello simple. Permite introducir datos en Mysql, Firebird, Interbase, MSSQL, Oracle, SQLite y PostgreSQL.
En el post original mencionan otros, pero no me han llegado a gustar.
2010-07-07
500 Iconos Free - Gratis para nuestro sitio web.
Link: http://pc.de/icons/
Template para paginacion - Clean Pagination Styles – Pack1
Clean Pagination Styles – Pack1
1. Easy change colors
2. .psd files are well organized
3. 6 different styles of pagination
4. Only free/system fonts
> 1 .PSD file ; fully layered & editable.
> 1 High-resolution JPG Preview file