Manejo de archivos con PHP y MySQL

Jul 2008
15
2,906 views
22

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 &lt;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 …

Links Relacionados

Jul 2008
09
974 views
0

Enviar correo con PHP

Jul 2008
09
974 views
2

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

Jun 2008
28
1,126 views
3

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

Jun 2008
18
1,065 views
2

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 …

Tip para aumentar el CTR de los anuncios

May 2008
31
187 views
1

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

Formato Fecha y hora GMT con PHP

Apr 2008
03
617 views
1

En uno de mis recientes desarrollos http://www.youthcalabaza.com (Pagina de tatuajes en Monterrey) incorpore un blog y me tope cn un pequeño detallito al momento de guardar la fecha y hora toma como fecha y hora la qu tenga el servidor configurado :P asi que googleando un rato encontre la solución.

El codigo es el siguiente espero a alguien mas le sirva:

//Mi zona horaria el GMT -6
$clientGMT=intval( -6 );
$serverGMT=intval( date('Z') );
$fecha_gmt=date('Y-m-d H:i:s',time()+$clientGMT-$serverGMT);

PHP Snippet Max Upload File Size

Mar 2008
20
563 views
0

En algunas ocaciones necesitamos poder subir archivos muy pesados, y probablemente nuestra configuración no lo permita, asi que tenemos 2 opciones:

1.- CAMBIAR LA CONFIGURACION DEL archivo php.ini

SI NO SABEMOS DONDE SE ENCUENTRA NUESTRO php.ini utilicemos la funcion:

phpinfo();

Y esto nos mostrara la ubicacion del archivo asi como los valores actuales de la configuración.

Una ves que encontrmos el archivo buscamos estos parametros y los cambiamos
[code]
;Esta Opcion debe estar en On para permitir el upload de archivos
file_uploads = On;

;Aqui especificamos el limite
upload_max_filesize = 50M

;Como los archivos se mandan por POST tambien debemos modificar este parametro
post_max_size = 50M
[/code]

PARA QUE ESTA CONFIGURACION SE APLIQUE ES NECESARIO REINICIAR EL SERVICIO httpd o el IIS DEPENDIENDO DE NUESTRO OS.

2.-CAMBIAR LA CONFIGURACION EN EL ARCHIVO .htaccess
Agregamos estos …

Links Relacionados

Mar 2008
13
287 views
0

PHP Snippet weekday function

Mar 2008
13
287 views
1

Nativamente php no cuenta con una funcion para obtener el numero de dia de la semana de una fecha determinada, que por cierto necesitaba en este momento, asi que si alguien mas necesita esta funcion es libre de usarla.

Esta funcion regresa el numero del dia de la semana pasandole como parametro una fecha los valores que regresa son:

  • 0 Lunes
  • 1 Martes
  • 2 Miercoles
  • 3 Jueves
  • 4 Viernes
  • 5 Sabado
  • 6 Domingo
// ESTA FUNCION ACEPTA COMO PAREMETRO LA FECHA EN FORMATO
// DD/MM/YYYY
function weekday($fecha){
$fecha=str_replace("/","-",$fecha);
list($dia,$mes,$anio)=explode("-",$fecha);
return (((mktime ( 0, 0, 0, $mes, $dia, $anio) - mktime ( 0, 0, 0, 7, 17, 2006))/(60*60*24))+700000) % 7;
}
//LA PODEMOS PROBAR CON LA FECHA ACTUAL
echo weekday(date("d/m/Y"));

PHP snippet Sumar Tiempo a Fechas

Feb 2008
05
365 views
0

Con esta funcion cortesia de Titux podemos sumarle a una fecha dada ya sean dias,minutos,segundos y /o combinaciones de las mismas y obtenemos como resultado la nueva fecha

function dateadd($date, $dd=0, $mm=0, $yy=0, $hh=0, $mn=0, $ss=0){
$date_r = getdate(strtotime($date));
$date_result = date("m/d/Y h:i:s", mktime(($date_r["hours"]+$hh),($date_r["minutes"]+$mn),($date_r["seconds"]+$ss),($date_r["mon"]+$mm),($date_r["mday"]+$dd),($date_r["year"]+$yy)));
return $date_result;
}
$fecha = "02/04/2008"; //mes/dia/año
$fecha_actualizada = dateadd($fecha,1,0,0,0,0,0); // suma 1 dia a la fecha

Lo vi en :http://www.alterbrain.net/

Deja tu comentario