Foros del Web » Programando para Internet » PHP »

Cabio de caracteres

Estas en el tema de Cabio de caracteres en el foro de PHP en Foros del Web. Hola amigos. Tengo un problema, seguramente ya estará comentado por algún sitio, pero ya llevo varias horas buscando y no encuentro la solución. Tengo un ...
  #1 (permalink)  
Antiguo 09/08/2009, 19:37
Avatar de CHUJALT  
Fecha de Ingreso: enero-2002
Mensajes: 60
Antigüedad: 18 años
Puntos: 0
Cabio de caracteres

Hola amigos.
Tengo un problema, seguramente ya estará comentado por algún sitio, pero ya llevo varias horas buscando y no encuentro la solución.

Tengo un formulario en el que hay un campo "file", una imagen, que en realidad sólo me interesa la ruta, pues al pasar a la pagína siguiente quiro que se muestre esa imagen.

Resulta que la ruta que sale es toda con dobles barras invertidas
C:\\AppServ\\www\\
y claro, en la siguiente página no muestra la imagen, necesito que esas dobles barras invertidas se cambien por una barra normal, he probado con
$fichero = str_replace("\\","/",$fichero);
que me cambia las dos barras inveritdas por dos normales, no por una.....
¿alguna ayuda?

Gracias de antemano
__________________
http://www.chujalt.com
  #2 (permalink)  
Antiguo 10/08/2009, 13:22
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 11 años
Puntos: 46
Respuesta: Cabio de caracteres

puedes probar con la ruta relativa a la imagen y absoluta

Ej.
ESTRUCTURA DE DIRECTORIOS
Carpeta de imagenes -> C:\\AppServ\\www\\img
Carpeta de Modulos -> C:\\AppServ\\www\\modulos

lo que tu intentas es desde tu carpeta de modulos poner un elemento img:
<img src='C:\\AppServ\\www\\foto1.jpg'>
eso lo puedes cambiar por su ruta relativa
<img src='../img/foto1.jpg'>

aclaro que esta ruta relativa seria si el archivo que va mostrar la imagen se encuentra en la carpeta de modulos.

espero que sea eso lo que preguntas, sino aqui estamos en espera de mas informacion para poder darte una mejor solucion.

suerte
  #3 (permalink)  
Antiguo 10/08/2009, 13:40
Avatar de CHUJALT  
Fecha de Ingreso: enero-2002
Mensajes: 60
Antigüedad: 18 años
Puntos: 0
Respuesta: Cambio de caracteres

Lo que intento es meter en una base de datos la ruta de una imagen que está en una carpeta cualquiera de mi ordenador, en la primera página está el formulario que, entre otros, hay un campo file (para buscar la imagen en el disco duro) y en la segunda página, que es donde recoge la información del formulario, introducir los datos en la base de datos.
Pues bién, esa segunda página recoge la ruta de la imagen con dos barras invertidas "\\" y claro, luego al poner la ruta de la imagen en una página no la muestra, lo que necesito es cambiar las dos barras invertidas "\\" por una barra normal "/" para que el navegador lo entendiera y mostrara la imagen.

Esta ruta es la que me devuelve el formulario: C:\\mis documentos\\imagenes\\fotos
Y esta es la que tendría que salir C:/mis documentos/imagenes/fotos.

Espero que me entendais lo que quiero decir y así poder ayudarme.

Muchas gracias de antemano por la ayuda.
__________________
http://www.chujalt.com
  #4 (permalink)  
Antiguo 10/08/2009, 13:58
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 11 años
Puntos: 46
Respuesta: Cabio de caracteres

por eso, eso es lo que digo, no necesitas TODA la ruta, si tu subes los archivo los almacenas en una carpeta img (por ejemplo), entonces con eso sabras la ruta de tu archivo, con esto puedes hacer lo siguiente.

1) subes un archivo fotoN.png
2) la almacenas en la carpeta img (carpeta a la cual conoces su ruta RELATIVA)
3) almacenas la imagen en la base de datos (con ruta o no)
4) cuando vas a mostrar la imagen tu ya conoces la ruta de la carpeta donde esta almacenada la imagen por lo que si almacenaste solo el nombre tu contruyes la ruta.

la consulta a la base de datos te retornaria el nombre de la imagen fotoN.png, como tu ya conoces la ruta donde se encuentra la carpeta contenedora pondria lo siguiente en el src de tu etiqueta img
<img src='la/ruta/de/la/carpeta/img/<?php echo $consulta['nombre_de_la_imagen'] ?>'>

con eso no es necesario saber la ruta ABSOLUTA a la imagen, solo manejar una ruta RELATIVA.

creo que seria mas facil si nos muestra como es que estas guadando la imagen, puedes mostrarnos ese fragmento de codigo??

espero tu respuesta
  #5 (permalink)  
Antiguo 11/08/2009, 11:42
Avatar de CHUJALT  
Fecha de Ingreso: enero-2002
Mensajes: 60
Antigüedad: 18 años
Puntos: 0
Respuesta: Cabio de caracteres

No, no puedo hacer eso:

1º El formulario lo va a utilizar varias personas.
2º Aunque el formulario y la foto esté en el mismo fichero el formulario te devuelve la ruta completa desde C:
3º Las fotos estará en la misma carpeta, pero ésta estará dividida en subcarpetas.

No puedo arriesgarme a que un compañero meta a mano la ruta por si se equivoca por eso quiero automatizarlo.

He probado con str_replace y tambiém strstr, las dos funciones me cambian el sentido de la barra, pero me siguen saliendo 2 en lugar de una, que es lo que yo quiero.

¿alguna sugerencia?

Gracias de antemano.
__________________
http://www.chujalt.com
  #6 (permalink)  
Antiguo 11/08/2009, 13:10
Avatar de lair  
Fecha de Ingreso: enero-2009
Ubicación: header('Location: Morelia");
Mensajes: 1.052
Antigüedad: 11 años
Puntos: 46
Respuesta: Cabio de caracteres

bueno, mira dado que tu no puedes mostrar nos codigo te mostrare el mio para que veas lo que yo hago, quiza no estoy entendiendo bien pero bueno, te muestro como es que yo organizo los archivo que subo

Código PHP:
        function upload(){
                
//verifica que el data no venga vacio
                
if(!empty($this->data)){


                        
/*ATENCION A ESTAS LINEAS
                        captura el nombre del archivo temporal en la carpeta de apache
                        */
                        
$fuente=$this->data['Archivo']['arch']['tmp_name'];
                        
//establece la base de la url donde se almacenara el archivo
                        
$destino="files";



                        
//busca el proyecto correspodiente al archivo en cuestion 
                        
$proyecto $this->Archivo->query("select * from proyectos as Proyecto where id = ".$this->data['Archivo']['proyecto_id']);
                        if(!empty(
$proyecto)){
                                
$destino.='/'.$proyecto[0]['Proyecto']['nombre'];
                                
//si lo encuentra verifica que la carpeta contenedora exista
                                
if(file_exists($destino)){
/*
                                        En esta parte completo la url carpeta_destino/Nombre_archivo
                                        reemplaza los %20 por espacios 
*/
                                        //si existe, completa la url con el nombre de proyeto y nombre del archivo
                                        
$destino.="/".str_replace('%20','_',$this->data['Archivo']['arch']['name']);
                                }else{
                                        
//en caso de no existir el contenedor primero lo crea
                                        
mkdir('files/'.$proyecto[0]['Proyecto']['nombre']);
                                        
//y completa la url

/*
                                        lo mismo para esto
*/
                                        
$destino.="/".str_replace('%20','_',$this->data['Archivo']['arch']['name']);
                                }
                                
//verifica que el archivo se alla podido copiar

/*
                                        aqui trato de mover los archivos de la carpeta temporal a su
                                        destino final 
*/
                                
if(move_uploaded_file($fuente,$destino)){
                                        
//contruyo un arreglo con los campos correspondientes a la tabla
                                        
$file=array(
                                                
"categoria_id"=>$this->data['Archivo']['categoria_id'],
                                                
"nombre"=>$this->data['Archivo']['arch']['name'],
                                                
"url"=>$destino,
                                                
"proyecto_id"=>$this->data['Archivo']['proyecto_id'],
                                                
"descripcion"=>$this->data['Archivo']['descripcion']
                                        );
                                        if(
$this->Archivo->save($file)){
                                                echo 
"{success:true}";
                                        }else{
                                                echo 
"{success:false, mensaje:'El archivo no pudo ser registrado'}";
                                        }
                                }else{
                                        echo 
"{success:false, mensaje:'El archivo no pudo ser almacenado'}";
                                }
                        }else{
                                echo 
"{success:false, mensaje:'El proyecto no existe'}";
                        }
                }
                exit();
        } 
yo en este ejemplo utilice cakephp pero las pero las instrucciones que resalto no varian

y para la descarga hago lo siguiente:

Código PHP:
<?php
        
echo $html->css('site');

        echo(
"<meta http-equiv='refresh' content='5;url=../../".$download[0]['Archivo']['url']."'>");
?>
<div id='header'>
        <img src='../../img/logo.png'></img>
        <h1>Site Ecosistemas De Negocios</h1>
</div>
<br><br>
<div id='dwnld'>
        Si la descarga no se realiza automaticamente en 5 seg.<br>


<!-- NOTA QUE LA URL LA MANEJO RELATIVA ../../ -->
        Descargue manualmente aqui<a href='../../<?php echo $download[0]['Archivo']['url'?>'><img alt='Descargar' src='/animacion/img/download.png'></img></a>



        <br><br><br>
        <a href='javascript:window.close()'>Cerrar ventana</a>
</div>
espero te sea util, si no es lo que intentabas hacer espero tu respuesta con mas detalles y asi poder ayudarte
  #7 (permalink)  
Antiguo 12/08/2009, 06:59
Avatar de CHUJALT  
Fecha de Ingreso: enero-2002
Mensajes: 60
Antigüedad: 18 años
Puntos: 0
Respuesta: Cabio de caracteres

SOLUCIONADO
No se si la solución es muy ortodoxa, pero funciona:

1º De las dos barras invertidas quito una
$fichero = stripslashes($fichero);

2º La barra invertida que me queda la cambio por una normal
$fichero = strtr($fichero, "\\", "/");

3º De toda la ruta hago no solo aparezca el final, que es lo que me interesa
$fichero = substr ("$fichero", -31);

No ponía el código de la página porque no tenía nada especial, eran pruebas que estaba haciendo antes de hacerlo en serio:

1º Página 1
<form method="post" action="12.php">
<p><input type="file" name="fichero" size="100"><input type="submit" value="Ver imagen" name="B1"></p>
</form>

2º página 2
echo "la imagen es la siguiente <p><img src=imagenes/$fichero></p>";

Solucionado el tema ya me pondré a currar con la base de datos.

Gracias LAIR por el interés mostrado
__________________
http://www.chujalt.com
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 02:56.