Hoy por casualidad he dado con un problema molesto, muy molesto, en WordPress 2.x, no he probado versiones anteriores. Se trata de un problema en el upload del sistema de posts, me he dado cuenta que posts antiguos con imagenes, estas han sido sobreescritas por imagenes más modernas, osea que imagenes que uso en posts como «La API de Digg ya ha empezado a dar sus frutos» que contienen imagenes y al ser más modernas han sobre escrito imagenes anteriores como en el posts «Microsoft Popfly, el pipes de Microsoft» o el de unZippy, y más que no me habré dado cuenta.
El problema es bastante chorra y generalmente no te das cuenta, a no ser que se cumpla una premisa.
- El nombre de los ficheros que se suban no puede tener espacios.
Uno de los motivos por los que es dificil causar el error es que WordPress crea un sistema de directorios por mes y año para alojar los ficheros que subimos mediante la aplicación, por este motivo y sinó subimos muchas imagenes podemos nunca sufrir este desastre.
La función que comprueba el nombre del fichero en el directorio no aplica un filtro con el que convierte los espacios en guiones y por este motivo nunca encuentra el fichero.
Ejemplo:
Imaginemos que subimos el ficero «Soy Fichero.jpg», este fichero al subirse sufre una transformación a «Soy-Fichero.jpg», que es un nombre correcto para uso en web, si despues de unos días subimos un fichero con el mismo nombre «Soy Fichero.jpg» hará una comprobación y verá que no existe ya que no realiza el reemplazo a «Soy-Fichero.jpg» a la hora de comprobar el nombre sinó que lo busca con espacio.
¿Conclusión? Fichero sobreescrito, dejando posts con imagenes o archivos que no concuerdan con el archivo que quieres mostrar.
Solución
Le acabo de enviar un mail a Matt con el fallo para que lo tenga en cuenta, y por lo tanto no hay ningún parche o solución al problema, que repito, es muy molesto, he perdido 3 o 4 posts de imagenes que no tengo ya.
Por el mometo podemos hacer 2 cosas:
- Tener cuidado con el nombre de ficheros que subimos mediante WordPress, la más facil.
- Modificar el fichero admin-functions.php y añadir justo detrás de la definición de la funcion wp_handle_upload() (sobre la línea 1791) la siguiente línea.
function wp_handle_upload( &$file, $overrides = false ) {
$file['name'] = strtolower(str_replace(" ", "-",$file['name'])); //Añado strtolower() para servidores Linux.
4 comentarios, 0 referencias
+
#