Archivos grandes
Buenas,
El bueno de Pablo, en su tenaz labor de tener una copia funcional de las webs de todas las jornadas en este nuestro servidor, ha encontrado unos archivos de gran tamaño (conocidos genéricamente como Libros de actas de las Jornadas) que deberían ser subidos a la Tiki.
El problema es que algunos de estos libros de actas (Cádiz, Zaragoza) ocupan más de 2MB.
¿Por qué es un problema? Pues porque en el archivo php.ini del servidor, que nosotros no podemos modificar, hay una variable, upload_max_filesize, que fija el tamaño máximo de los archivos que se pueden subir php mediante, y en nuestro servidor toma el valor de 2MB.
Para intentar timar a Tikiwiki y subir las actas de Zaragoza dentro de la Tiki, he intentado lo siguiente:
- He subido de manera ortodoxa un archivo del mismo tipo (application/pdf) y con el nombre que quería (Libro.actas.Zaragoza.pdf), pero con tamaño mucho menor.
- He localizado el archivo subido en el servidor, en la correspondiente carpeta, utilizando el viejo truco de "desconfigura la carpeta en la tiki, y en vez de bajarte el documento te saldrá un mensaje de error diciéndote qué archivo quieres trastear".
- He substituido este archivo por el archivo correcto de actas de Zaragoza (con el nombre que tocaba), subiéndolo por ftp.
- He bajado directamente desde el servidor (no vía Tiki) el archivo que había subido, lo he differenciado del original, y coincidían.
- He intentado bajar el archivo vía Tiki, pero el descargado estaba corrupto.
- He comprobado la información que aparece en la tabla de la base de datos sobre el archivo. Que yo haya entendido, sólo había dos campos que podrían haber sido problemáticos: a) el tamaño del archivo y b) el hash.
- He echado un vistazo al tiki-upload_file.php, y me ha parecido entrever (no lo he entendido bien) que nada de lo cambiado influía en el cómputo del hash (cosa muy extraña), así que lo he dejado tal y como estaba.
- He recalculado el tamaño del archivo en local, y he modificado el campo de la tabla correspondiente.
- El archivo continuaba bajándose corrupto inexplicablemente vía Tiki.
- He jugado un poco más con los diff's (y con los diff -a's), y he encontrado lo que parece ser la fuente del problema: en medio del código del archivo aparece repetidas veces un mensaje de error:
<br /> <b>Notice</b>: ob_flush() [<a href='ref.outcontrol'>ref.outcontrol</a>]: failed to flush buffer. No buffer to flush. in <b>/home/site21/public_html/tiki-download_file.php</b> on line <b>29</b><br />
- Con otros archivos de otros tipos, he podido comprobar que este código aparece independientemente de que haya tocado el campo de tamaño de archivo.
- He echado un vistazo a la línea 29 del tiki-download_file.php, y por lo visto tiene que ver con un trozo de código Borrowed from http://php.net/manual/en/function.readfile.php#54295 to come over the 2MB readfile() limitation
- He estado charlando un rato en #tikiwiki, y los presentes no acababan de ver por dónde podía estar el problema.
Vista la no simplicidad de la cuestión, y a la espera que alguien más ducho en la materia nos saque las castañas del fuego, Pablo y yo hemos decidido lo siguiente, que esperamos cuente con vuestra aprobación:
- Creamos la carpeta big_files en el directorio público de html.
- Los archivos mayores de 2MB se guardarán por ahora allí, a la espera de una mejor solución. Por ejemplo, podéis bajaros el libro de actas de Zaragoza desde aquí: big_files/Libro.actas.Zaragoza.pdf.
- Estos archivos grandes los tendrá que subir alguien con acceso al servidor, sí o sí, por ahora.
De cara al futuro:
- Cuando tenga tiempo, intentaré jugar con la configuración del php de alguno de los ordenadores con Tikiwiki en los que tengo pleno dominio, para intentar acabar de delimitar cuál es el problema que estamos teniendo.
- Tal vez dependiendo de los resultados del punto anterior, en los contactos con Trimedia, deberíamos plantearles que nos dejen modificar nuestro php.ini, para que, si bien en condiciones normales nadie pueda subir archivos de más de 2MB, cuando sea necesario se pueda autorizar formando hashes correctos sin tener que pervertir la Tiki.
Espero que lo hecho os parezca razonable, correcto y no demasiado perverso.
Saludos,