Td> td> Tr> Table> Form> Un
formulario de carga debe tener encytype = "multipart / form-data" de lo contrario no funcionará en absoluto.Por supuesto, el método de formulario también es necesario establecer a method = "post". Asimismo, recuerda a poner un MAX_FILE_SIZE entrada oculta antes de que el archivo de entrada. Es para restringir el tamaño de los archivos. Después se envía el formulario al que tenemos que leer la autoglobal $ _FILES. En el ejemplo anterior el nombre de entrada para el archivo se userfile lo que el contenido de $ _FILES son así: $ _FILES ['Userfile'] ['name'] El nombre original del archivo en la máquina cliente. $ _FILES ['Userfile'] ['type'] El tipo mime del archivo, si el navegador proporciona esta información. Un ejemplo podría ser "image / gif". $ _FILES ['Userfile'] ['size'] El tamaño en bytes del archivo subido. $ _FILES ['Userfile'] ['tmp_name'] El nombre del archivo temporal del archivo en el que el archivo subido se almacena en el servidor. $ _FILES ['Userfile'] ['error'] El código de error asociado a esta carga de archivos. ['Error'] fue agregado en PHP 4.2.0
Ejemplo: upload.php Php if (isset ($ _POST ['upload']) && $ _FILES ['userfile'] ['size']> 0) { $ Archivo = $ _FILES ['userfile'] ['name']; $ Tmp Name = $ _FILES ['userfile'] ['tmp_name']; Tamaño: $ $ _FILES ['userfile'] ['size']; $ TipoArchivo = $ _FILES ['userfile'] ['type'];
$ Fp = fopen ($ tmp Name, 'r'); $ Contenido = fread ($ fp, filesize ($ tmp Name)); $ Contenido = addslashes ($ contenido); fclose ($ fp); if (! get_magic_quotes_gpc ()) { $ Archivo = addslashes ($ archivo); } incluir "la biblioteca / config.php '; incluir "la biblioteca / opendb.php; $ Query = "INSER T INTO subir (nombre, tamaño, tipo de contenido)". "VALUES ('$ archivo', '$ Tamaño', '$ tipoArchivo', '$ contenido')"; mysql_query ($ query) or die ('Error, no consulta'); incluir "la biblioteca / closedb.php; echo "El archivo $ file Name subida"; } > Antes de hacer nada con el fichero. Usted no debe asumir que el archivo se ha subido correctamente al servidor. Siempre revise para ver si el archivo se ha subido correctamente observando el tamaño del archivo. Si es mayor que cero bytes, entonces podemos suponer que el archivo se ha subido correctamente. PHP guarda el archivo subido con un nombre temporal y guardar el nombre en $ _FILES ['userfile'] ['tmp_name']. Nuestra siguiente tarea es leer el contenido de este archivo e insertar el contenido de la base de datos. Siempre asegúrese de que utilice addslashes () para escapar de los contenidos. Addslashes usando () para el no mbre del archivo también se recomienda porque nunca se sabe lo que el nombre del archivo será. Eso es que ahora usted puede subir sus archivos a MySQL. Ahora es el momento de escribir el guión para descargar los archivos.
Descarga de ficheros desde la base de datos MySQL Cuando se carga un archivo en la base de datos también guardar el tipo de archivo y la longitud. Estos no eran necesarios para cargar los archivos, pero es necesario para descargar los archivos de la base de datos. La lista de página de descarga de los nombres de archivos almacenados en la base de datos. Los nombres están impresos en una url. La URL se vería download.php? Id = 3. Para ver un ejemplo de trabajo, haga clicaquí. salvé varias imágenes en mi base de datos, usted puede intentar descargarlos.
Ejemplo: descarga de archivos de MySQL title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> Head> Php incluir "la biblioteca / config.php '; incluir "la biblioteca / opendb.php; $ Query = "SELECT id, nombre DE subir"; $ Result = mysql_query ($ query) or die ('Error, no consulta'); if (mysql_num_rows ($ resultado) == 0) { echo "Base de datos es vacío"; } más { while (list ($ id, $ nombre) = mysql_fetch_array ($ resultado)) { > "> php = $ nombre ;?> a> Body> Html> Al
hacer clic en el enlace de descarga, el $ _GET ['id'] se ajustará. Podemos utilizar este id para identificar los archivos que se obtiene de la base de datos. A continuación se muestra el código de descarga de archivos de base de datos MySQL. Ejemplo: Php if (isset ($ _GET ['id'])) { / / Si la ID se establece a continuación, obtener el fichero con el ID de la base de datos incluir "la biblioteca / config.php '; incluir "la biblioteca / opendb.php; $ Id = $ _GET ['id']; $ Query = "SELECT nombre, tipo, tamaño, contenido".
"DESDE subir WHERE id = ' $ id'";
$ Result = mysql_query ($ query) or die ('Error, no consulta'); list ($ nombre, $ tipo, $ size, $ contenido) = mysql_fetch_array ($ resultado); header ("Content-Length: $ size"); header ("Content-type: $ tipo"); header ("Content-Disposition: attachment; filename = $ nombre");
echo $ contenido; incluir "la biblioteca / closedb.php; salida;
} > Antes
de enviar el contenido del archivo con el primer eco que necesitamos para establecer varios encabezados.Ellos son: 1. header ("Content-Length: $ size") Esta cabecera indica al navegador el tamaño del archivo es. Algunos navegadores lo necesitan para poder descargar el archivo correctamente. De todos modos es una buena manera diciendo el tamaño del archivo es. De esta manera cualquier persona que descargue el archivo se puede predecir cuánto tiempo tomará la descarga. 2. header ("Content-type: $ tipo") Esta cabecera le dice al navegador qué tipo de archivo que intenta descargar. 3. header ("Content-Disposition: attachment; filename = $ nombre"); Indica al navegador que guarde el archivo descargado con el nombre especificado. Si no envía esta cabecera el navegador tratará de guardar el archivo con el nombre del script (download.php). Después de enviar el archivo de la secuencia de comandos no se ejecuta llamando a la salida. NOTA:
Al
enviar las cabeceras del mensaje de error más común que se ve es algo como esto:
Advertencia:
No se puede modificar la información de cabecera - cabeceras ya enviado por (la producción comenzó en C: \ Webroot \ biblioteca \ config.php: 7) en C: \ Webroot \ download.phpon line 13 Este error se produce debido a que algunos datos han sido enviados ya antes de enviar la cabecera. En cuanto al mensaje de error anterior que se debe a que i "accidentalmente" añadir un espacio a la derecha después de la etiqueta de cierre PHP (>) en el archivo config.php. Así que si usted esta viendo este mensaje de error cuando se está enviando una cabecera sólo asegúrese de que no tienen todos los datos enviados antes de llamar a header (). Revise el expediente mencionado en el mensaje de error e ir al número de línea especificado
Carga, almacenamiento y descarga de datos binarios en una base de datos MySQL por Joao Prado Maia 09/15/2000
Este artículo está dirigido a responder a una de las preguntas más frecuentes sobre la lista de correo de PHP y foro s de discusión por igual: Cómo guardar archivos binarios en una base de datos MySQL.
Me encontré con esta misma pregunta cuando se le preguntó por un posible empleador prueba mis habilidades de programa ción para crear un conjunto de scripts para subir archivos a una base de datos MySQL, descargar archivos del mismo, y también muestran una imagen, si el archivo era de hecho una imagen. De todos modos, no p ude encontrar ningún artículo sobre la manera de hacer eso, así que busqué un montón en las listas de correo de PHP para encontrar mi respuesta. Este artículo es mi manera de "devolver" a la comunidad. :) Puedo dividir el artículo en tres páginas, y y y
La La La
creación
de creación de creación de
la
base de datos la 'upload' scripts la 'descarga' script
así que todo puede ser explicado en el momento correcto, y también porque añade algunas características adicionales, como un guión de descarga para ob tener los archivos binarios de nuevo a partir de la base de datos. Esto es muy útil para descargar archivos de dif erentes tipos a partir de una base de datos de empresa, o incluso visualizar las imágenes almacenadas en campos BLOB.
La creación de la base de datos Doy instrucciones para bases de datos MySQL, ya que f ue la base de datos que utiliza en el desarrollo de mi aplicación web. Antes de salir, tengo q ue explicar lo que es un campo BLOB. Como un prof esor decí a: "Un BLOB es un b l inaryarge ob jeto que puede contener una cantidad variable de datos." En esencia, esto significa que es un tipo de datos BLOB que puede almacenar contenido binario, y podemos usarlo para a lmacenar archivos. Con el fin de establecer nuestra base de datos, debemos optimizar los campos de nuestras tablas para no perder los recursos. Esto significa que usted no deberí a usar un campo LONGBLOB cuando sólo se necesita cargar los archivos de 1,5 Kb.Citando de la documentación de MySQL en lí nea : y y y
y
- Una columna BLOB con longitud máxima de 255 (2 8 - 1) caracteres. BLOB - Una columna BLOB con longitud máxima de 65.535 (2 16 - 1) caracteres. MEDIUMBLOB - Una columna BLOB con longitud máxima de 16,777,215 (2 ^ 24 - 1) caracteres. LONGBLOB - Una columna BLOB con longitud máxima de 4,294,967,295 (2 32 - 1) caracteres. TINYBLOB
Para la mayorí a de las aplicaciones, un campo MEDIUMBLOB es más que suficiente, ya que puede contener hasta 15 megas de datos binarios. De todos modos, vamos a crear la base de datos y tablas de nuestra aplicación web. Tenemos que conectar con el servidor MySQL:
mysql -u root -p Introduce el password : ****** Si el servidor se está e jecutando en otra máquina, utilice la siguiente:
mysql -u root -h hostname -p Introduce el password : ****** Ahora, para crear la base de datos actual:
mysql> CREATE DATABASE binary_files; Query OK, 1 row affected (0.00 sec
)
Ok, ahora tenemos una base de datos para jugar. Podemos crear las tablas ahora.
mysql> CREATE TABLE tbl_Files ( >id_filestinyint(3 ) unsigned NOT NULL auto_increment, >bin_datalongblob NOT NULL, > description tinytext NOT NULL, > filename varchar(50 ) NOT NULL, >filesizevarchar(50 ) NOT NULL, >filetypevarchar(50 ) NOT NULL, > PRIMARY KEY (id_files ) > ); Ahora tenemos que crear un usuario personalizado para esta base de datos / aplicaciones para una máxima seguridad:
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER > ON binary_files.* > TO binary_user@localhost> IDENTIFIED BY 'binary_password'; Esoestodo. Ahora podemos conectar con el servidor de Apache / PHP usando el usuario binary_user y contraseña binary_password . No me cree? Compruébalo
por ti
mismo!
Creando los scripts de carga Para hacer lo más f ácil, he creado un open_db.inc archivo de inclusión, por lo que no tiene que seguir usando el mismo código para conectarse a un servidor y seleccione la base de datos. Soy un programador perezoso, y usted debe ser un también!
Ver el contenido de open_db.inc. Este script siguiente se utiliza para cargar un archivo en la base de da tos. Siempre tienes que comprobar la variable ( $binFile ) para los contenidos. Cada vez que alguien acaba de éxitos como "Sube" sin seleccionar un archivo, el archivo de entrada variable de campo tendrá "ning una". También tenemos que hacer un cheque extra de seguridad sobre el contenido binario de sí mismo, ya que puede contener algunos caracteres extraños que necesitan una barra. Esto puede acabar con nuestra declaración de SQL, por lo que addslashes( ) es!
Ver el contenido de add.php. Estamos utilizando el mismo guión para mane jar tanto las acciones: subir un nuevo archivo y muestra el formulario para agregar la información relacionada con este nuevo archivo. El campo de entrada oculto llamado MAX_FILE_SIZE en el formulario que se necesita para que el cliente
puede limitar el tamaño del archivo de los archivos nuevos. Además, no se olvide de añadir el atributo adicionalENCTYPE="multipart/form-data" al formulario, o bien el guión no va a f uncionar en absoluto. Bueno, que parecí a casi demasiado f ácil, ¿verdad? Ahora lo que tenemos que hacer es crear el script de descarga, así como el guión que muestra la lista de archivos que están actualmente en la base de datos. Página siguiente: Crear los scripts de descarga
Open.db.inc "); ?>
Add.php "; echo " Continue "; } mysql_close( ); } else { ?>
Creando los scripts de descarga En primer lugar vamos a crear el guión para mostrar la lista de archivos en la actualidad en nuestra mesa, y entonces podemos empezar a trabajar en el guión para descargar los archivos.
Ver el contenido de main.php. Esto deberí a crear una mesa limpia y hermosa, con todos los archivos sobre la mesa. Para una aplicación real, es probab le que desee limitar el número de archivos que se muestran aquí , y también hacer algo de formato en el tamaño del archivo y los campos de tipo de archivo. Voy a de jar esto como un e jercicio para el lector.
Vamos a ir a la secuencia de comandos de descarga gratuita.Es muy simple, y se va a trabajar con cualquier tipo de archivo dentro de la base de datos. Cada vez que los usuarios hacen clic en "Descargar" enlaces, un diálogo de descarga se abrirá con el nombre viene de la base de datos. Ver el contenido de download.php. A veces, en otras secuencias de comandos, archivos de texto (. Txt) o incluso las imágenes se muestran en la ventana del navegador, en lugar de abrir el diálogo de descarga. Esto se debe a la cabecera HTTP " Content-Disposition : ", que tiene que tener algo reconocible como el primer argumento. Si usted pone un tipo MIME reconocible ahí , como una imagen de tipo MIME, el navegador intenta abrirlo en la ventana. Lo mismo ocurre con los archivos de texto o cualquier otro tipo de archivo que el navegador pueda reconocer. Muchas veces la gente se pregunta cómo pudo saber el número de descargas de cada archivo. Este script puede modificarse f ácilmente para realizar el seguimiento del "hits", e incluso se podrí a crear un script adicional para mostrar las estadísticas de cada archivo. Divertirse y seguir escribiendo! Joao Prado Maia es un desarrollador web que viven en Houston con más de cuatro años de experiencia desarrollando aplicaciones basadas en web y le encanta aprender nuevas tecnologías y lenguajes de programación.
main
echo echo echo echo echo echo echo echo
"\n"; " \n"; " Filename \n"; " Type \n"; " Size \n"; " Description \n"; " \n"; " \n";
for ($i = 0; $i < $rows; $i++) { $data = mysql_fetch_object( $result ); // since our script is very small, i'm not going to escape out to html mode here echo " \n"; echo " $data->filename \n"; echo " $data->filetype \n"; echo " $data->filesize \n"; echo " " . stripslashes( $data->description ) . " \n"; echo " ( Download ) \n"; echo " \n"; } mysql_free_result( $result); mysql_close( $db); ?>
download
= @mysql_query( $sql, $db); @mysql_result( $result, 0, "bin_data" ); @mysql_result( $result, 0, "filename" ); @mysql_result( $result, 0, "filesize" ); @mysql_result( $result, 0, "filetype" );
header("Content-type : $type"); header("Content-length : $size"); header("Content-Disposition : attachment; filename= $name"); header("Content-Description : PHP Generated Data" ); echo $data; } ?>