Problema con los campos longblob

Hola,
Tengo una base de datos mysql e intento subir archivos a un campo longblob. Pasa que si pesa más de un mega la aplicación peta, no deja subirlo.
¿Por qué puede estar pasando esto? Cualquier dato de configuración que necesites ver para orientarme me lo pides.
Muchas gracias

3 Respuestas

Respuesta
El problema común para el límite de archivos suele estar en la configuración de PHP en el archivo php.ini. En ese archivo se puede especificar el tamaño máximo de archivo que se puede enviar.
Respuesta
1
Pasan 2 cosas, primero el navegador esta tratando de transmitor más de 1 mega por http, cosa jodida si las hay (sobre todo sobre un server remoto), segundo, una vez transmitido, se pone a esperar que el mysql le devuelva el control al php una vez que termino la operación de carga, y todo esto dentro de los segundos estipulados en max_execution_time, si ocurre un error DESPUÉS de ese tiempo, lo único que vas a ver es 'tiempo excedido' cuando lo que puede pasar es que haya un error de php o de mysql.
Si la carga que estas haciendo no es la prueba de un sitio web, sino que usas el phpmyadmin para la carga, te repito que te conviene hacerlo desde el cliente de consola mysql. Generalmente cuando tienes grandes volúmenes de carga o es un trabajo en lote de varios registros, te conviene usar primero (o SIEMPRE) la consola, porque es más rápida.
Con
Mysql -u user -ppass database
Entras a 'database'
Pero desde dentro del cliente podes hacer 'use otradatabase'
¿Estas familiarizado con las sentencias sql?
¿Con esta orden entro directo al mysql del server o a una sola base de datos?
Por el error que da, el tema no es exactamente el tamaño del campo, sino lo que tarda en cargarse. La cuestión esta en la opción max_execution_time que esta en /etc/php.ini o en algún archivo bajo /etc/httpd como
php_value max_execution_time=120
Este valor tendría que ser mayor. Quizá te convenga probar la carga desde el cliente mysql, cronometrar la duración en segundos y poner un valor más alto que este para max_execution_time.
Ahora el que no tiene memoria es el php, que se asigna 32M para ejecutar el script Y NO LE ALCANZA.
La configuración de eso esta en /etc/php.ini, la opción a cambiar es memory_limit
INSISTO en que antes hagas una prueba desde el cliente mysql y te familiarices con el tuning de los servicios.
Mysql -u usuario -ppassword database
Te recomiendo que te habitúes a la consola, es más ágil.
Hola,
El subir el tiempo de ejecución ya lo he hecho pero tampoco resulta, se queda colgado, es como si más de un mega no se pudiese subir
Ahora mismo no puedo acceder por consola, igualmente la idea es que los archivos se suban por web, el usuario de una página querrá subir archivos y estos pueden pesar más de un mega.
Me decías de mirar el max_allowed_packet, no se encontrarlo, en el my.cnf no está y por lo que estoy viendo en foros y por lo que me comentas tú puede que aquí esté la limitación.
Muchas gracias por la ayuda.
Hola,
en el my.cnf me viene esto:
[mysqld]
safe-show-database
innodb_data_file_path=ibdata1:10M:autoextend
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
[mysql.server]
user=mysql
basedir=/var/lib
[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
No viene lo de max_allowed_paquet.
Cuando desde phpmyadmin intento subir el archivo se me cuelga el navegador, vamos que he de cerrarlo como puedo y no sube nada más, por eso lo dejé de nuevo a 120.
Muchas gracias
¿Para qué tanto foro?
RTFM
http://dev.mysql.com/doc/refman/5.0/en/server-parameters.html
Sospecho que lo que en realidad te pierde es la parte no estándar de MySQL. Pegale una repasada concienzuda al manual.
¿Cómo hago desde el shell para conectarme al mysql? En este punto ando muy perdido.
Gracias por tu paciencia.
Acabo de mirar y no se porqué no se ha puesto a 16 megas, ¿qué es lo que he hecho mal? Menuda lata te estoy dando je je.
Por fin estoy dentro, ahora si ya estaba perdido ahora aún más. El sql si me lo conozco de sobras pero el linux me pierde.
Gracias por la paciencia de nuevo.
Se cuelga se cuelga, es muy raro la verdad, debe ser por alguna limitación de la base de datos en estas versiones pues en anteriores yo recuerdo haber subido archivos superiores a un mega. Las pruebas hechas son ya ne tres servidores distintos y lo mismo.
Gracias por la ayuda, ya veo que esto es más jodido de lo que parecía.
Hola de nuevo,
He estado mirando el archivo my.cnf pero no he sabido encontrar nada. Aquí te mando el php info a ver si me puedes orientar a partir de ello:
http://www.rockestatal.com/phpinfo.php
Muchas gracias
¿Qué se cuelga? Todo el sistema, ¿no te responde para nada? O se cuelga el proceso cliente, ¿o el servicio mysqld? Miraste tambien el max_allowed_packet?
Suena como que hay que tunear el my.cnf el php.ini y el httpd.conf
Bueno ya he dado un paso pero sigue sin ir, te cuento:
he conseguido aumentar el valor del max_allowed_packet a 16 megas, he puesto mysql --max_allowed_packet=16M. Pero ahora el error que me sale es este:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2870495 bytes) in /var/www/vhosts/meddia.net/httpdocs/administracio/pma260pl3/libraries/sqlparser.lib.php on line 1637
¿Está relacionado esto? Menudo jaleo todo esto.
¿Colgado? ¿Seguro? ¿No sera que simplemente se toma su tiempo para terminar? ¿Te fijaste con top o con pues si el proceso sigue? ¿Mataste el proceso y libero los recursos? No esta corrompida la tabla debido a los 'cuelgues'? (myisamchk /var/lib/mysql/database/tabla )
Conviene probar por fuera del servidor web, desde el cliente mysql con un 'load data infile'
Quiza sea cuestion de la opcion 'max_allowed_packet', el maximo tamaño de un elemento que se puede intercambiar con mysql, esto se cambia en my. Cnf, que puede estar en /etc/my.cnf o en el directorio de usuario.
Ayudaria conocer el error que da cuando se hace el intento
Hola,
Me sale este error:
Fatal error: Maximum execution time of 120 seconds exceeded in /home/httpd/vhosts/davidegea.com/httpdocs/admin/phpmyadmin/libraries/string.lib.php on line 76
Muchas gracias por la ayuda
Te explico: pasa que queremos subir archivos a la base de datos, estos archivos solo queremos que se puedan descargar si se cumplen unas condiciones, es decir por ejemplo si han pagado por ellos, de aquí que ñps tengamos en base de datos. Estos archivos los sube el administrador ya sí ya se pueden bajar luego si se reúnen las condiciones.
A parte, personalmente a la hora de programar una aplicación con php me es más cómodo enchufar el archivo a la base de datos que andar con permisos y carpetas. Manías de programador.
Lo curioso es que en otro servidor donde programaba aplicaciones de este tipo nunca tuve problemas con el tamaño de los archivos y deduzco que a lo mejor al cambiar de versión del mysql es cuando me he encontrado con este problema.
Muchas gracias por la ayuda, si quieres puntualizar algo para tener en cuenta antes de cerrar la incidencia me escribes.
Muchas gracias de nuevo, ¡Eres un crack!
Si una persona esta a cargo de la subida, es más rapido que lo haga por sftp y después ejecute el script por consola, algo así como:
php -f actualiza.php /path/to/archivo.mp3
Doy fe, transferir archivos por http es una tortura.
Olvida lo del error, es algo relacionado con la versión del phpmyadmin.
No se, creo que ya está todo correcto, antes de cerrar la incidencia coméntame si ves que todo está ya ok.
Muchas gracias por la ayuda de nuevo, estaba metido en un problema gordo que parece ya tiene solución.
Lo que me llama la atención es el tamaño de lo que se sube, es muy ineficiente por web. ¿Los usuarios son internos o forman parte de una comunidad que se registra? Si es el primer caso, ¿por qué no les das una cuenta sftp y que suban las cosas ahí?
Hola, buenos días,
Ayer ya tuve que cerrar y no pude seguir mirándome el tema. Te cuento. Después de mirar las instrucciones una y otra vez e intentando familiarizarme con todo esto lo que hice fue tocar el archivomy. cnf. Añadí la línea "set-variable = max_allowed_packet=16M" y ahora si que sube los archivos, ¡Milagro!
Lo que me encuentro es que en el phpmyadmin cuando le doy a navegar para ver la tabla donde he subido el archivo me sale un error como este:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2870467 bytes) in /var/www/vhosts/meddia.net/httpdocs/administracio/pma260pl3/libraries/common.lib.php on line 1438
Muchas gracias por la ayuda!
Gracias por la ayuda y los consejos, poder subir los archivos de más de un mega era una necesidad en el curro.
¡Muchas gracias y hasta otra!
Respuesta
1
Ok me parece que depende mucho de la configuración del php.ini:
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 16000 ; Maximum execution time of each script, in seconds
max_input_time = 3000 ; Maximum amount of time each script may spend parsing request data
memory_limit = 40M ; Maximum amount of memory a script may consume (8MB)
Aquí hay un detalle para que tu script no se corte rápidamente sino que se demore más para dar tiempo de poder cargar los archivos
; Maximum size of POST data that PHP will accept.
post_max_size = 15M
aqui podras ver un dato mas
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =D:/PHP4/uploads/
; Maximum allowed size for uploaded files.
upload_max_filesize = 15M
Aquí es muy importante para que puedas subir archivos
Revisa eso de la configuración y recuercda que si levantas tu archivo con php liberar la memoria después de cargar o utilizar parte de la misma.
Hola,
Gracias por la ayuda, al final acabé encontrando la solución que es lo mismo que me acabas de poner tú.
De nuevo muchas gracias, un saludo!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas