Foros del Web » Programando para Internet » PHP »

PHP OO Problema al adjuntar archivos con PHP

Estas en el tema de Problema al adjuntar archivos con PHP en el foro de PHP en Foros del Web. Estimados, Tengo un problema con adjuntar archivos a una Base de Datos con un sistema PHP. El problema no es al adjuntar ni tampoco que ...
  #1 (permalink)  
Antiguo 14/03/2016, 14:44
 
Fecha de Ingreso: agosto-2012
Ubicación: Lima, Peru
Mensajes: 51
Antigüedad: 11 años, 8 meses
Puntos: 0
Problema al adjuntar archivos con PHP

Estimados,

Tengo un problema con adjuntar archivos a una Base de Datos con un sistema PHP.

El problema no es al adjuntar ni tampoco que no adjunte los archivos, el sistema si adjunta los archivos, los guarda correctamente en la base de datos, respetando los acentos y las "ñ" pero cuando cuando reviso los archivos en la carpeta donde fueron subidos los nombres fueron cambiados ya que las letras con acentos y las "Ñ's" se han cambiado por caracteres raros.

Todos los registros los guarda sin ningún problema con acentos y con Ñ, y en la base de datos también aparecen tal como las subi pero no ocurre lo mismo con los archivos subidos, eso me causa problemas para descargarlos o mostrarlos.

Este es parte del codigo:

  #2 (permalink)  
Antiguo 14/03/2016, 18:03
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 2 meses
Puntos: 11
Respuesta: Problema al adjuntar archivos con PHP

El problema es la codificación de caracteres y vuelvo a pegar esto que respondido en otros post. Y te recomiendo sobre todo leer la url que adjunto. Aqui va:


Primero que nada decirte que eso es un gran problema y hacerlo correctamente casi nunca funciona de forma que sea multiplataforma. Mira esta pagina http://evertpot.com/filesystem-encoding-and-php/

Para que funcione correctamente la codificación para español en linux. Primero tienes que instalarle la codificación en español de tu país al Sistema Operativo. Por ejemplo yo que estoy en México sería utf8_spanish_ci. Muchas distros linux hacen esto en la instalación preguntandote donde vives.

Despues, si estas usando xampp debes configurar apache y php para que usen utf8:

En apache:
[httpd.conf]
AddDefaultCharset utf-8

en algunas versiones de apache no se encuentra AddDefaultCharset en el lugar habitual y tienes que buscar $cfg['DefaultCharset'] = 'utf-8';
en toda la instalacion o variables similares.

En php:
[php.ini]
default_charset = "utf-8"
mbstring.internal_encoding=utf-8
mbstring.http_output=UTF-8
mbstring.encoding_translation=On
mbstring.func_overload=0

Si estas usando una versión superior o igual a php 5.6 estos parametros estan obsoletos:
mbstring.internal_encoding
mbstring.http_input
mbstring.http_output
y basta con poner default_charset = "utf-8"

Si estas usando XML-RPC:
[xmlrpc.inc]
cambia $GLOBALS['xmlrpc_internalencoding']='ISO-8859-1';
por $GLOBALS['xmlrpc_internalencoding']='UTF-8';

Si usas mysql toda la collation de Base de datos y tablas debe ser utf8 - utf8_spanish_ci y en la conexión:
$Conex=new mysqli(.....);
$Conex->set_charset("utf8");

Si usas correo como por ejemplo PHPMailer:
$mail= new PHPMailer();
$mail->CharSet = 'UTF-8';

por ultimo todos tus HTMLs o PHP que usen html tiene que tener:
<meta charset="UTF-8">

Esto funcionara perfectamente en linux pero si tratas de escribir archivos a disco en windows veras que no funciona (lo explica la url que puse hasta arriba). Es entonces cuando hay que recurrir a iconv. Ejemplo:

$nombre="ññ.txt"
$f2=fopen(iconv("UTF-8", "ISO-8859-1",$nombre),"w");
fwrite($f2,$texto);
fclose($f2);

ó

$tam=filesize(iconv("UTF-8", "ISO-8859-1",$nombre));

Creo que así no debería haber problemas. Y así practicamente ya no se usa utf8_decode y utf8_encode. Y el problema de origen es porque los 3 sistemas operativos principales manejan la codificacion de diferente forma. Lo explica el enlace que puse.
Espero les sirva.
  #3 (permalink)  
Antiguo 14/03/2016, 18:20
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 2 meses
Puntos: 11
Respuesta: Problema al adjuntar archivos con PHP

Tambien te recomiendo este articulo de investigación http://research.microsoft.com/pubs/64525/tr-2006-45.pdf
Se llama To BLOB or Not To BLOB:Large Object Storage in a Database or a Filesystem?
y basicamente explica que le conviene mas a tu aplicación ¿Guardar los archivos en el filesystem o en BLOBs en la base de datos? Todo ello dependiendo de varios factores que explican con graficas.
Saludos
  #4 (permalink)  
Antiguo 16/03/2016, 11:18
 
Fecha de Ingreso: agosto-2012
Ubicación: Lima, Peru
Mensajes: 51
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Problema al adjuntar archivos con PHP

Estimado, el problema es solo con los archivos que se guardan en la carpeta indicada ya que los nombres lo cambia.

Todo lo demás está configurado para que lo guarde en la base de datos respetando las Ñ y los acentos, por lo que no se en donde estoy fallando.

Tengo windows 7, uso XAMPP ya agregue a mi archivo httpd.conf el AddDefaultCharset utf-8 , en php.ini agregue lo que me habías pedido en el archivo php de conexión esta el <meta charset="UTF-8">.

Como estaba indicando todo se guarda en la base de datos correctamente pero el problema es con los archivos que se estan cambiando los nombre, probablemente tengo que cargarlos de otra manera, probare y comentare.
  #5 (permalink)  
Antiguo 17/03/2016, 09:52
Avatar de danielpatc  
Fecha de Ingreso: marzo-2016
Mensajes: 40
Antigüedad: 8 años, 1 mes
Puntos: 4
De acuerdo Respuesta: Problema al adjuntar archivos con PHP

Lo que yo hago es renombar, mira:
Código:
function trans($cadena) {
                    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞ
                    ßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';
                    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuy
                    bsaaaaaaaceeeeiiiidnoooooouuuyybyRr';
                    $cadena = utf8_decode($cadena);
                    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);
                    $cadena = strtolower($cadena);
                    return utf8_encode($cadena);
}
$target_file = trans($target_file);
  #6 (permalink)  
Antiguo 17/03/2016, 12:09
 
Fecha de Ingreso: enero-2009
Ubicación: Kandor
Mensajes: 209
Antigüedad: 15 años, 2 meses
Puntos: 11
Respuesta: Problema al adjuntar archivos con PHP

No leiste esta url que puse en mi respuesta???-> https://evertpot.com/filesystem-encoding-and-php/ verdad?? Si no sabes ingles dale traducir con google.

No tienes que hacer funciones. Estas en windows y windows usa ISO-8859-1 no utf8 y como todo esta configurado en utf8 tienes que convertirlo, pero ojo solo a la hora de que lo escribas y leas del disco, en otros lados como escribir el nombre en BD no lo tienes que hacer. Tampoco cuando quien lo lee es el navegador (es decir, la 1ra vez) porque el navegador te entrega la codificación correcta.Esto es lo unico que hay que hacer.

$nombre="ññ.txt"
$f2=fopen(iconv("UTF-8", "ISO-8859-1",$nombre),"w");
fwrite($f2,$texto);
fclose($f2);

ó al leer:

$tam=filesize(iconv("UTF-8", "ISO-8859-1",$nombre));

y si no lees la url que te pongo, pues más ya no puedo ayudarte.

Espero te sirva.

Saludos

Etiquetas: adjuntar, registro
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 20:40.