Manejo de archivos con PHP y MySQL

Este Howto es acerca de como subir archivos atravez de PHP y guardarlos en MySQL asi como la extracción del archivo de MySQL atravez de PHP.

Requisitos:

  • Tener instalado PHP y MySQL.
  • Conocimientos basicos de PHP y MySQL.

Muchas veces necesitamos darle a los usuarios la facilidad de poder “subir” o guardar archivos en una base de datos y n es tan dificil como aparenta asi que comenzemos….

Primeramente necesitamos el diseño de la tabla

Imagen diseño de tabla para subir archivos con PHP y MySQL

y el script para crear la tabla es:

CREATE TABLE tbl_documentos (
id_documento INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
titulo VARCHAR(150) NULL,
descripcion MEDIUMTEXT NULL,
contenido LONGBLOB NULL,
tamanio INTEGER UNSIGNED NULL,
tipo VARCHAR(150) NULL,
nombre_archivo VARCHAR(255) NULL,
tamanio_unidad VARCHAR(150) NULL,
PRIMARY KEY(id_documento)
);

Explico un poco cada campo para darnos una mayor idea:

  • id_documento es el identificador o llave primaria
  • titulo contiene titulo para el documento
  • descripción contiene la descripcion del documento
  • contenido en este campo en donde se guardara nuestro documento
  • tamamio en este campo guardamos el tamaño del documento
  • tipo contendra el tipo MIME del documento
  • nombre_archivo contendra el nombre del documento
  • tamanio_unidad en este campo registraremos si la medida esta em kb,MB,GB

Ahora necesitamos un formulario
Aqui esta el codigo del archivo form.html:

<form id="test_upload" name="test_upload" action="upload.php" enctype="multipart/form-data" method="post">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
Titulo
</td>
<td>
<input type="text" id="titulo" name="titulo"/>
</td>
</tr>
<tr>
<td colspan="2">
Descripcion
</td>
</tr>
<tr>
<td colspan="2">
<textarea id="descripcion" name="descripcion" cols="50" rows="5"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
Archivo <input type="file" id="archivo" name="archivo"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Registrar Documento"/>
</td>
</tr>
</table>
</form>

Al formulario debemos como todos debe tener sus atributos
action que indica el archivo que sse encargara de procesar la información que le enviemos
y method que indica si los datos seran enviados por POST o GET para envio de archivos es obligatorio marcarlo como POST
adicinal a estos atributos debemos especificar enctype con el valor multipart/form-data para que se pueda realizar el envio.
Y aqui esta el codigo del archivo upload.php

< ?php
//ESTA FUNCION LA USAREMOS PARA OBTENER EL TAMAÑO DE NUESTRO ARCHIVO
function filesize_format($bytes, $format = '', $force = ''){
$bytes=(float)$bytes;
if ($bytes< 1024){
$numero=number_format($bytes, 0, '.', ',');
return array($numero,"B");
}
if ($bytes< 1048576){
$numero=number_format($bytes/1024, 2, '.', ',');
return array($numero,"KBs");
}
if ($bytes>= 1048576){
$numero=number_format($bytes/1048576, 2, '.', ',');
return array($numero,"MB");
}
}
//VERIFICAMOS QUE SE SELECCIONO ALGUN ARCHIVO
if(sizeof($_FILES)==0){
echo "No se puede subir el archivo";
exit();
}
// EN ESTA VARIABLE ALMACENAMOS EL NOMBRE TEMPORAL QU SE LE ASIGNO ESTE NOMBRE ES GENERADO POR EL SERVIDOR
// ASI QUE SI NUESTRO ARCHIVO SE LLAMA foto.jpg el tmp_name no sera foto.jpg sino un nombre como SI12349712983.tmp por decir un ejemplo
$archivo = $_FILES["archivo"]["tmp_name"];
//Definimos un array para almacenar el tamaño del archivo
$tamanio=array();
//OBTENEMOS EL TAMAÑO DEL ARCHIVO
$tamanio = $_FILES["archivo"]["size"];
//OBTENEMOS EL TIPO MIME DEL ARCHIVO
$tipo = $_FILES["archivo"]["type"];
//OBTENEMOS EL NOMBRE REAL DEL ARCHIVO AQUI SI SERIA foto.jpg
$nombre_archivo = $_FILES["archivo"]["name"];
//PARA HACERNOS LA VIDA MAS FACIL EXTRAEMOS LOS DATOS DEL REQUEST
extract($_REQUEST);
//VERIFICAMOS DE NUEVO QUE SE SELECCIONO ALGUN ARCHIVO
if ( $archivo != "none" ){
//ABRIMOS EL ARCHIVO EN MODO SOLO LECTURA
// VERIFICAMOS EL TAÑANO DEL ARCHIVO
$fp = fopen($archivo, "rb");
//LEEMOS EL CONTENIDO DEL ARCHIVO
$contenido = fread($fp, $tamanio);
//CON LA FUNCION addslashes AGREGAMOS UN \ A CADA COMILLA SIMPLE ' PORQUE DE OTRA MANERA
//NOS MARCARIA ERROR A LA HORA DE REALIZAR EL INSERT EN NUESTRA TABLA
$contenido = addslashes($contenido);
//CERRAMOS EL ARCHIVO
fclose($fp);
// VERIFICAMOS EL TAÑANO DEL ARCHIVO
if ($tamanio <1048576){
//HACEMOS LA CONVERSION PARA PODER GUARDAR SI EL TAMAÑO ESTA EN b ó MB
$tamanio=filesize_format($tamanio);
}

//CREAMOS NUESTRO INSERT
$qry = "INSERT INTO tbl_documentos ( titulo,nombre_archivo, descripcion, contenido, tamanio,tamanio_unidad, tipo ) VALUES
('$titulo','$nombre_archivo', '$descripcion','$contenido','{$tamanio[0]}','{$tamanio[1]}', '$tipo')";

//NOS CONECAMOS A LA BASE DE DATOS
//REMPLAZEN SUS VALOS POR LOS MIOS
mysql_connect("localhost","root","12345") or die("No se pudo conectar a la base de datos");

//SELECCIONAMOS LA BASE DE DATOS CON LA CUAL VAMOS A TRABAJAR CAMBIEN EL VALOR POR LA SUYA
mysql_select_db("test");

//EJECUTAMOS LA CONSULTA
mysql_query($qry) or die("Query: $qry <br />Error: ".mysql_error());

//CERRAMOS LA CONEXION
mysql_close();
//NOTIFICAMOS AL USUARIO QUE EL ARCHVO SE HA ENVIADO O REDIRIGIMOS A OTRO LADO ETC.
echo "Archivo Agregado Correctamente<br />";
echo '<a href="form.html">Subir Otro Archivo</a><br /> ';
}else{
echo "No fue posible subir el archivo";
echo '<a href="form.html">Subir Otro Archivo</a><br /> ';
}
?>

Ahora que ya tenemos nuestro script funcionando y podemos hacer los uploads que queramos vamos
hacer que se puedan explorar y descargar o mostrar en caso de que sea una imagen.
Primero creamos un archivo que nos imprima el contenido del documento y el tipo del mismo para poder renderizarlo
con este archivo que llamaremos getfile.php

< ?php
//NOS CONECAMOS A LA BASE DE DATOS
//REMPLAZEN SUS VALOS POR LOS MIOS
mysql_connect("localhost","root","12345") or die("No se pudo conectar a la base de datos");

//SELECCIONAMOS LA BASE DE DATOS CON LA CUAL VAMOS A TRABAJAR CAMBIEN EL VALOR POR LA SUYA
mysql_select_db("test");

//CONSTRUIMOS LA CONSULTA PARA OBTENER EL DOCUMENTO
$qry="Select * from tbl_documentos where id_documento={$_REQUEST['id_documento']}";
$res=mysql_query($qry) or die(mysql_error()." qry::$qry");
$obj=mysql_fetch_object($res);

//OBTENEMOS EL TIPO MIME DEL ARCHIVO ASI EL NAVEGADOR SABRA DE QUE SE TRATA
header("Content-type: {$obj->tipo}");

//OBTENEMOS EL NOMBRE DEL ARCHIVO POR SI LO QUE SE REQUIERE ES DESCARGARLO
header('Content-Disposition: attachment; filename="'.$obj->nombre_archivo.'"');

//Y PO ULTIMO SIMPLEMENTE IMPRIMIMOS EL CONTENIDO DEL ARCHIVO
print $obj->contenido;

//CERRAMOS LA CONEXION
mysql_close();
?>

Posteriormente crearemos un archivo para que nos liste los documentos registrados y
detecte si es una imagen en este caso imprimiremos un tag img y su src sera nuestro archivo getfile.php
cuando incluimos un archivo con php podemos pasarle parametros cono si se tratara de un query string del browser asi que le pasaremos el id_documento
para que nos muestre el archivo solicitado.
Este es e código de nuestro archivo list.php

< ?php
//NOS CONECAMOS A LA BASE DE DATOS
//REMPLAZEN SUS VALOS POR LOS MIOS
mysql_connect("localhost","root","12345") or die("No se pudo conectar a la base de datos");

//SELECCIONAMOS LA BASE DE DATOS CON LA CUAL VAMOS A TRABAJAR CAMBIEN EL VALOR POR LA SUYA
mysql_select_db("test");

//CONSTRUIMOS EL QUERY PARA OBTENER LOS ARCHIVOS
$qry="select
docs.*,
CASE docs.tipo
WHEN 'image/png' then
'image'
WHEN 'image/jpg' then
'image'
WHEN 'image/gif' then
'image'
WHEN 'image/jpeg' then
'image'
ELSE
'file'
END as display
from tbl_documentos AS docs";

//EJECUTAMOS LA CONSULTA
$res=mysql_query($qry) or die("Query: $qry ".mysql_error());

//RECORREMOS LA CONSULTA
//*********NOTA DONDE DICE alt='$obj-/>titulo' QUITA LA BARRA PARA QUE QUEDE ASI:
// alt='$obj->titulo'
// EL WORDPRESS ME ESTA REMPLAZANDO EL CODIGO

while ($obj=mysql_fetch_object($res)) {
//SI EL TIPO DE DOCUMENTO ES UMAGEN LA MOSTRAMOS SI NO SOLO HACEMOS EL LINK
switch ($obj->display){
case "image":
echo "<div>
<a href='getfile.php?id_documento={$obj->id_documento}'>
<img alt='$obj-/>titulo' src='getfile.php?id_documento={$obj->id_documento}'/>
</a>
</div><hr />";
break;
case "file":
echo "<div>
<a href='getfile.php?id_documento={$obj->id_documento}'>$obj->titulo</a>
</div><hr />";
break;
}

}

//CERRAMOS LA CONEXION
mysql_close();
?>

Ahora solo abrimos nuestro explorador con loas sigueintes direcciones:

  • http://url_deprueba/form.html -> Veremos nuestro formulario de subida
  • http://url_deprueba/list.php -> Veremos el listado de nuestros documentos

Descargar los archivos del howto de este

Y con esto terminamos este pequeño howto de como manejar archivos con php y MySQL
espero les sirva y cualquier comentario queja o sugerencia porfavor haganla saber asi como alguna duda que tengan y se pueda convertir en un howto
sera tomada en cuenta.
Cudense …

Enviar correo con PHP

Hola.

Seguimos con los howtos este how to tambien es corto simplemente hace lo que se necesita
ENVIAR CORREOS CON PHP

Requerimientos:

  • Conocimiento basico de PHP
  • PHP previamente instalado
  • Servidor de correo previamente instalado

Primero que nada necesitamos un formulario con digamos 2 campos que son:

  • El correo del destinatario
  • El Mensaje que le vamos a enviar

Aqui esta el codigo para el archivo form_mail.html
[code language='html']

Envio de correos

...

PHP snippet Como crear thumbnails desde MySQL con PHP

Bueno creo que ya estubo bien de tantos articulos sobre psp y otras cosas y es tiempo de volver a lo mio, los tutoriales con mas codigo que palabras, aunque de repente pondre uno que ptro post de posicionamiento :P,

Requisitos:

  • Tener instalado PHP y MySQL.
  • Conocimientos basicos de PHP y MySQL.
  • GD instalado y funcionando.

1.- Analicemos el problema tomando como base el articulo Manejo de archivos con PHP y MySQL en el cual explico como guardar archivos en MySQL, asi que tomaremos la tabla de ese ejemplo.

Bueno ya fue mucha platica mejor vemos el codigo por partes, al final lo pondre todo junto:

$id_doc=$_REQUEST['id'];
$qry="Select * from tbl_documentos where id_documento=$id ";
$res=mysql_query($qry) or die(mysql_error()." qry::$qry");
  • 1.- OBTENEMOS EL ID
  • 2.- CONSTRUIMOS LA CONSULTA …

Ndiswrapper Fedora 9 bcmwl5

Este es un breve howto de como instalar ndiswrapper en Fedora 9

Requerimientos:

  • Contar con conexion a internet obviamente por cable.
  • Contar con los drivers de la tarjeta para windows extraidos.
  • Paciencia.

1.-Abrir una consola y logearse como root

su -
"telclear el password"

2.- Tecleear lo siguiente para que se instale el repositorio de livna

rpm -ivh http://rpm.livna.org/livna-release-9.rpm

3.- Tecleear lo siguiente para instalar ndiswrapper y su modulo correspondiente

yum install ndiswrapper kernel-module-ndiswrapper-$(uname -r)

4.- Tecleear lo siguiente remplazando lo que se encuentra entre comillas para instalar el driver

ndiswrapper -i "ruta_al_archivo_inf_del_driver".inf

5.- Verificamos que se instalo correctamente conel siguiente comando:

ndiswrapper -l
deberiamos obtener algo similar a esto:
Installed ndis drivers:
bcmwl5  driver present, hardware present

6. Agregar a …

Jun 2008
18
En : Diseño, Linux, PHP

Tip para aumentar el CTR de los anuncios

Bueno primero vamos a definir CTR:

Click Through Rate (CTR) – Tasa de clicks: corresponde al número de veces que un enlace es seguido por los navegantes, dividido por el número de veces que dicho enlace es mostrado (llamado a su vez impresión).

Ejemplo:

Si un anuncio se muestra 10 veces y es visitado 6 veces: 6 / 10= 0.6%.

Segun tengo entendido entre mas alto sea el CTR masvalor tendra el vinculo mostrado.
Yo he implementado un pequeño pero util procedimiento en mi Template de Wordpress el cual consiste en mostrar anuncion en random, lo cual tambien me permite mostrar anuncios de diferentes proveedores.El proceso es el siguiente:

REQUISITOS:

I.- Comencemos registrado los anuncios en el Adsense-Deluxe

May 2008
31
Deja tu comentario