Problema al subir un archivo - Verificación post

Hola a todos:
Tenemos el siguiente problema en la subida de archivos:
Contamos con un formulario con un campo ef_popup, hemos limitado la subida de archivos a 25M en php.ini.
La subida de archivos inferiores a 25M funciona perfecto. El problema viene a la hora de gestionar la excepción lanzada cuando un usuario sube un archivo superior a 25M, aquí desearíamos poder capturarla y mostrar un mensaje más amigable al usuario. En estos casos, la aplicación desarrollada no carga y queda todo en blanco con un mensaje que dice ERROR INTERNO.
Analizando un poco más a fondo, vemos que no pasa la validación del método verificar_pedido_post(), y es allí donde se produce la excepción que es de tipo toba_error_seguridad. Según entendemos aquí se hace una validación por CSRF para evitar ataques por inyección de código.
¿Cómo podemos hacer para que la validación no tome en cuenta el tamaño del contenido enviado por post cuando se suben archivos? ¿Nos faltará alguna configuración de seguridad en nuestro servidor?
Como siempre, agradecemos su ayuda.

Saludos a todos.

Te paso como lo solucione, extendiendo el formulario, lo que hago es desactivar los botones de Alta y Modificar, si no cumplen con el máximo permitido

<?php class extension_descargas extends toba_ei_formulario { function extender_objeto_js() { echo " {$this->objeto_js}.evt__archivo__procesar = function(es_inicial) { if (! es_inicial && this.ef('archivo').get_estado()) { var uploadedFile = this.ef('archivo').input(); //contiene el document.getElementById(ef) var fileSize = uploadedFile.files[0].size; var datos_descarga = []; datos_descarga['cliente_descarga'] = fileSize; this.controlador.ajax('datos_descarga', datos_descarga, this, this.validar_descarga); return false; } } {$this->objeto_js}.validar_descarga = function(datos_descarga) { var servidor_descarga = 5; //los megabytes permitidos var maxima_permitida = 1024 * 1024 * servidor_descarga; if (datos_descarga['cliente_descarga'] > maxima_permitida) { alert ('La descarga supera el máximo permitido de ' + servidor_descarga + ' Mega Bytes' + ' - ' + 'Comprima y subalo nuevamente o Cancele la Operación'); if (datos_descarga['operacion'] == 'alta') this.desactivar_boton('alta'); else this.desactivar_boton('modificacion'); this.ef('archivo').set_estado (null); return false; } if (datos_descarga['operacion'] == 'alta') this.activar_boton('alta'); else this.activar_boton('modificacion'); return true; } "; } } ?>

Cualquier duda me cuentas

Hola Roberto

te diria que tenes otro problema si aparece un error interno, no precisamente el tamaño del archivo. De hecho acabo de probar en el proyecto toba_referencia y el error que se muestra es el correcto, ya que el ef_upload es capaz de detectar que el archivo supero el tamaño maximo y dicha informacion se pasa a la validacion del formulario.

Contame un poco mas de la operacion, tienen redefinido el html del CI?.. abren el upload del archivo en algun popup?.

Por otro lado, no es un tema de validacion de toba unicamente, PHP no acepta ningun archivo que este por encima del limite especificado en el ini, eso quiere decir que en realidad el archivo no se sube (o si… pero se descarta). Por lo que aun desactivando toda la validacion en toba, lo que recibis no sirve para absolutamente nada… ya que el archivo no existe en el servidor.

Saludos

Hola a todos, me han servido mucho sus respuestas.
Jhon, quiero agracederte por tu solución, me ha servido y funciona a la perfección.
Richard, de acuerdo a lo que me contaste, analizamos un poco más y creemos que nunca llega a ejecutarse la validación del ef_upload (¿primero está la otra validación? (verificar_pedido_post’)).
Hicimos pruebas con un script php aparte para ver si $_FILE tomaba el error UPLOAD_ERR_INI_SIZE y vimos que no.
Googleando un poco y analizando el php.ini y el error de apache (HP Warning: POST Content-Length of 146996055 bytes exceeds the limit of 8388608 bytes ), caímos en la cuenta que teníamos que poner la variable post_max_size del php.ini en 0, para no restringuir el límite. Intentamos poner el mismo valor que upload_max_filesize. Sin embargo si alguien sube un archivo superior a ese valor, vuelve a ocurrir el error. ¿Uds cómo tienen configurada esa variable en el php.ini?
La solución fue poner la variable post_max_size en 0.( Jhon quizá este también sea tu problema).
Sin embargo lo que propone Jhon igual nos funcionó cuando teníamos la variable post_max_size en 8M/25M (un valor inferior al archivo que estábamos intentando subir).
Saludos a ambos.

Hola Roberto,

buenisimo que lo resolvieron, la verdad que ni se me ocurrio relacionarlo con el tamaño del post… pense que si se pasaba de tamaño php liquidaba el archivo, no el resto de los campos del form… evidentemente por eso tiraba el error de seguridad. Todos los dias se aprende algo :).

Saludos y gracias por la aclaracion