Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problemas en base de datos con codificación de caracteres

Estas en el tema de Problemas en base de datos con codificación de caracteres en el foro de PHP en Foros del Web. Buenas, en mi página tengo un código para subir archivos pdf. Hace poco migré a un nuevo servidor con plesk. El problema es raro,a ver ...
  #1 (permalink)  
Antiguo 26/08/2014, 10:33
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 9 años, 11 meses
Puntos: 0
Problemas en base de datos con codificación de caracteres

Buenas, en mi página tengo un código para subir archivos pdf. Hace poco migré a un nuevo servidor con plesk.

El problema es raro,a ver si me puedo explicar.

Cuando intento abrir un archivo de la copia del antiguo server al nuevo, me dice que no encuentra el archivo.

El link que intenta ver es, por ejemplo...

http://www.xxx.es/backup/historial/C...2014-05-14.pdf

El archivo está en el servidor con el siguiente nombre...

CIFP Avilés - Asturias 14-05-14.pdf

Como digo, no funciona, me lanza el siguiente error...

Not Found

The requested URL /backup/historial/CIFP Avilés - Asturias 14-05-14.pdf was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.

Bien, si vuelvo a subir el archivo en cuestión, funciona correctamente y se abre con normalidad el archivo. El link, sigue siendo el mismo, el archivo en el servidor el mismo... vamos, el link al subir el archivo nuevo es...

http://www.xxx.es/backup/historial/C...2014-05-14.pdf

Y el archivo en el servidor es...

CIFP Avilés - Asturias 14-05-14.pdf

Vamos, lo mismo que antes, pero antes no funcionaba ni poniendo el enlace directo y si lo resubo si funciona, :S

En la base de datos, tanto la copia como si lo subo de nuevo, en su campo corresponiente lo guarda de la misma forma "CIFP Avilés - Asturias 14-05-14.pdf"

No quiero tener que volver a subir todos los archivos, son más de 7000 y me costaría días hacerlo manualmente.

Pero he estado mirando y remirando y no encuentro la lógica de porque la copia de seguridad no funciona y resubiendolos si, :/

¿Alguna idea?

Gracias.

Añado info, la parte del código que se encarga de subir y descargar los archivos es la siguiente...

Código PHP:
<?php if ($totalRows_HistorialProfesor>0){?>
           <ul>
            <?php do{?>
            <?php  $fechahistorialprofe substr$row_HistorialProfesor['fchFecha'],8,2)."-".substr$row_HistorialProfesor['fchFecha'],5,2)."-".substr$row_HistorialProfesor['fchFecha'],0,4);?>
            <li>
            <?php echo  $fechahistorialprofe" - <strong>".$row_HistorialProfesor['strResena']."</strong> - ";?> 
            <?php if (isset($row_HistorialProfesor['strTexto']) && $row_HistorialProfesor['strTexto']<>''){ ?>
            <img src="images/iconos/icono_add.png" class="iconomano" width="16" height="16" title="Ver/Ocultar" onclick="javascript: textoaccion(<?php echo $row_HistorialProfesor['intId']; ?>)">
            <?php }?>
            <?php if (isset($row_HistorialProfesor['strArchivo']) && $row_HistorialProfesor['strArchivo']<>''){ ?>
             <a href="historial/<?php echo $row_HistorialProfesor['strArchivo']; ?>" target="_blank"><img src="images/iconos/icono-download.png" width="16" height="16" title="Descargar"></a>
             <?php }?>
             <a href="<?php echo $editFormAction?>&recordIdBorrar=<?php echo $row_HistorialProfesor['intId'?>&recordArchivoBorrar=<?php echo $row_HistorialProfesor['strArchivo'?>"><img src="images/iconos/eliminar2.png" width="16" height="16" title="Eliminar" onclick="javascript:return asegurar();"></a>
             <a href="accion-editar.php?centro=<?php echo $_GET['recordId']; ?>&recordId=<?php echo $row_HistorialProfesor['intId']; ?>"><img src="images/iconos/icono_edit.png" width="16" height="16" title="Editar Acción"></a>    
            </li>
            <div class="textoaccion ocultar" id="textoacccion<?php echo $row_HistorialProfesor['intId']; ?>">
            <?php echo nl2br($row_HistorialProfesor['strTexto']); ?>
            </div>
            <?php } while ($row_HistorialProfesor mysql_fetch_assoc($HistorialProfesor)); ?>
            </ul>
<?php }?>
<?php
mysql_free_result
($HistorialProfesor);
?>
<?php 
if ($totalRows_HistorialProfesor==0){?>
<p>Aún no se dispone de historial.</p>
<?php }?>
La tabla en cuestión es tblhistorial.str.Archivo y la codificación en la bdd es utf8_spanish_ci

Última edición por mortisdj; 26/08/2014 a las 11:06
  #2 (permalink)  
Antiguo 26/08/2014, 13:00
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Cosa rarisima,:/

Quizá ya lo habrás sospechado, pero seguramente se trata de problema de codificación de caracteres.

Te sugiero que cuando leas en la base de datos el nombre de un archivo de los "viejos" hagas la conversión al set de caracteres adecuado, normalmente se usa utf8_encode o utf8_decode, dependiendo, incluso podría usarse otro set de caracteres.


O bien, para los registros viejos, hacer la conversión de los nombres en la base de datos una sola vez, para no hacerla cada vez que alguien use un enlace


Otra opción es que conviertas el nombre de los archivos, podrías hacer alguna rutina que haga la conversión y renombrado de forma masiva, usando las funciones de lectura de directorios de php, pero esto es ligeramente más complicado.
  #3 (permalink)  
Antiguo 26/08/2014, 14:41
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Cosa rarisima,:/

Gracias ocp001a, he revisadola base antigua y la nueva y la tabla en cuestión en ambas está la codificación en utf8_spanish_ci y en operaciones/cotejamiento, ambas están en latin1_spanish_ci, vamos, en un principio en ambas están igual.

Tus soluciones,con lo de utf8_encode o utf8_decode el problema es que desde esa página, desde donde descargo los pdfs, he de descargar igualmente los antiguos como los nuevos sin problemas.

Vamos... que estoy más perdido que perdido
  #4 (permalink)  
Antiguo 26/08/2014, 15:05
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Problemas en base de datos con codificación de caracteres

Si no es problema del set de caracteres de la base de datos, puede ser problema del sistema de archivos, igualmente debería probar a forzar una conversión de lo almacenado en la base de datos para ajustarte al nombre del archivo, para no tener que renombrar el archivo directamente.

Y también verifica los permisos de los archivos, no sea que el usuario esté incorrecto, o no tengan permisos de lectura.
  #5 (permalink)  
Antiguo 27/08/2014, 00:05
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Problemas en base de datos con codificación de caracteres

Buenas y gracias de nuevo. Todos los archivos tienen permisos 0644 y el propietario es el 10000 503, vamos, por esta parte esta correcto ya que los viejos archivos y los nuevos están igual.

Cuando dices, forzar una conversión de lo almacenado en la base de datos para ajustarte al nombre del archivo, supongo que te refieres a cambiar el cotejamiento de la tabla strArchivos, ¿no?, si es eso he probado con utf8_generic_ci, utf8_spanish_ci, latin1_spanish_ci.... y nada, no funciona,si no te refieres a eso, ¿a que te refieres con lo de forzar una conversion?
  #6 (permalink)  
Antiguo 27/08/2014, 00:55
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Problemas en base de datos con codificación de caracteres

Un dato curioso es que si subo por FTP un archivo con acento o ñ, digamos coruña.pdf y voy a la url del archivo http://www.xxx.es/historial/coruña.pdf me muestra el mismo mensaje de error.

Not Found

The requested URL /historial/yó.pdf was not found on this server.

Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
  #7 (permalink)  
Antiguo 27/08/2014, 02:35
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Problemas en base de datos con codificación de caracteres

Solucionado, los he subido desde el gestor del plesk en vez desde filezille y solucionado, :/

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:25.