Foros del Web » Programando para Internet » PHP »

Problemas al generar un path

Estas en el tema de Problemas al generar un path en el foro de PHP en Foros del Web. Hola amigos. Resulta que estoy haciendo un trabajo para un amigo y me ocurre algo muy raro que no puedo solucionar. Tengo que generar un ...
  #1 (permalink)  
Antiguo 10/05/2013, 12:26
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 10 meses
Puntos: 1
Problemas al generar un path

Hola amigos.

Resulta que estoy haciendo un trabajo para un amigo y me ocurre algo muy raro que no puedo solucionar.

Tengo que generar un path para encontrar archivos en distintas carpetas y lo tengo que hacer por medio de variables para que me sirva para todas las direcciones.

Este es el código que estoy utilizando:

$ESelegido = "entrada";
$periodoelegido = "julio";
$archivo = "docu.php";

//Genero la dirección
$URLdestino = "Facturas/".$ESelegido."/".$periodoelegido."/";

echo $URLdestino; //Devuelve "Facturas/entrada/julio/" y hasta aquí todo bien.

Sin embargo al tratar de utilizar esta dirección como:

$URLdestino.$archivo; //me devuelve "Facturas/docu.php" saltándose entrada y julio

También he probado a crear la variable de esta forma y los resutlados son los mismos

$URLdestino="Facturas/$ESelegido/$periodoelegido/;

¿Alguna idea por qué pasa eso?, agradecería cualquier ayuda.

Muchas gracias.
  #2 (permalink)  
Antiguo 10/05/2013, 12:30
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problemas al generar un path

No tiene sentido lo que dices, el código debería funcionar correctamente.

Mira aquí es tu código y funciona bien:
https://ignite.io/code/518d3c02ec221ef878000002

Pero bueno, como nos es imposible adivinar tu código real, contexto y demás, pues está complicado entender si haces algo mal o no.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 10/05/2013, 13:41
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Problemas al generar un path

Gracias por responder.

Bueno, el código real es el siguiente (es un poco extenso)...

Código PHP:
Ver original
  1. <?php
  2. // Recojo datos del formulario.
  3.  
  4. $periodoelegido=$_POST['mes'];
  5. $ESelegido=$_POST['EmiReci'];
  6. $URLdestino="Facturas/".$ESelegido."/".$periodoelegido."/";
  7.  
  8. {
  9. echo"ladireccion es: ".$URLdestino; // Aquí se muestra correctamente
  10.  
  11. }
  12.  
  13. $accion_subir = 'enviar_archivos';
  14. $accion_eliminar = 'eliminar';
  15. $directorio_destino = $URLdestino;
  16. global $directorio_destino;
  17.  
  18. // Bloque subir archivos
  19. if ($_POST['accion'] == $accion_subir) {
  20.     $i=0;
  21.     $num = count($_FILES['archivos']['name']);
  22.     if ($num>1) {$tagMensaje='li'; $html .= '<ul>';} else {$tagMensaje='p';}
  23.     $mensaje = '1';
  24.     $char1 = array(' ','á','Á','é','É','í','Í','ó','Ó','ú','Ú','ü','Ü',',',"'",'ç','Ç');
  25.     $char2 = array('_','a','A','e','E','i','I','o','O','u','U','u','U','_','_','c','C');
  26.     while ($i<$num) {
  27.         $archivo_solo = str_replace($char1,$char2,basename($_FILES['archivos']['name'][$i]));
  28.         $archivo = $directorio_destino.$archivo_solo;
  29.        
  30.         if (move_uploaded_file($_FILES['archivos']['tmp_name'][$i], $archivo)) {
  31.             $html .= '<'.$tagMensaje.'><em>'.$archivo.'</em> se ha enviado correctamente</'.$tagMensaje.'>';
  32.         } else {
  33.             $html .= '<'.$tagMensaje.'><em>'.$archivo.'</em> no se ha podido enviar.</'.$tagMensaje.'>';
  34.             $mensaje = '2';
  35.         }
  36.         $i++;
  37.     }
  38.     if ($num>1) {$html .= '</ul>';}
  39.     if (empty($_POST['js'])) {header("Location: uploader.php?mensaje=".$mensaje."");} else {echo '<div id="iframe_mensaje">'.$mensaje.'</div>';}
  40. }
  41.  
  42. if ($_GET['accion'] == $accion_eliminar) {
  43.     eliminarArchivo();
  44.     header("Location: uploader.php?mensaje=3");
  45. }
  46.  
  47. if ($_GET['listar']=='si') {
  48.     echo listarArchivos();
  49. }
  50.  
  51. if ($_GET['eliminar']=='si') {
  52.     eliminarArchivo();
  53.     echo '<div id="iframe_mensaje">3</div>';
  54. }
  55.  
  56. function eliminarArchivo () {
  57.     global $directorio_destino;
  58.     $archivo_a_eliminar = $directorio_destino.$_GET['archivo'];
  59.     unlink($archivo_a_eliminar);
  60. }
  61.  
  62. function listarArchivos () {
  63.     global $directorio_destino;
  64.    
  65.     $dir = opendir($directorio_destino);
  66.    
  67.     $i=0;
  68.     while ($file = readdir($dir)) {
  69.         // quitamos lo que no sean archivos
  70.         $tamano = round((filesize(''.$directorio_destino.$file.'')/1024),1);
  71.         if ($file != '.' && $file != '..') {
  72.             $extension = explode('.',$file);
  73.             $extension = end($extension);
  74.             $htmlLista .= '
  75.             <table><tr><td align="left">
  76.             <li class="clear">
  77.                 <a href="'.$directorio_destino.$file.'" class="archivo archivo_'.$extension.'">'.$file.'</a>
  78.                 <span>('.$tamano.' KB)</span></td><td>
  79.                 <a href="uploader.php?confirmarEliminacion=si&amp;archivo='.$file.'" class="eliminar" rel="'.$file.'">Eliminar</a>
  80.             </li>';$htmlLista .="\n</td></tr></table>";
  81.             $i++;
  82.         }
  83.     }
  84.     if ($i>0) {$html = "<ul>\n".$htmlLista."</ul>"; } else {$html = '<p>No hay archivos</p>';}
  85.     closedir($dir);
  86.     return $html.'<p class="indentado"><a href="#formulario_archivos">Saltar a selección de archivos</a>.</p>';
  87. }
  88. /*---------------------------------------------------------------------------*/
  89. if (empty($_REQUEST['js'])) {
  90. ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  91. <html xmlns="http://www.w3.org/1999/xhtml">
  92. <head>
  93. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  94.     <title>Uploader</title>
  95.     <link rel="stylesheet" type="text/css" media="screen" href="ficheros/UP_CSS_estilos.css" />
  96.     <script type="text/javascript" src="ficheros/UP_JS_jquery-1.4.2.min.js"></script>
  97.     <script type="text/javascript" src="ficheros/UP_JS_comportamientos.js"></script>
  98. </head>
  99. <body>
  100. <div id="contenedor">
  101. <h1><?php echo"Facturas: ".$periodoelegido." ".$ESelegido; ?></h1>
  102. <table width="100%" border="0" cellspacing="0" cellpadding="5">
  103.   <tr>
  104.     <td bgcolor="#000066">&nbsp;<?php
  105. if (isset($_GET['confirmarEliminacion'])) {
  106. $archivo = $_GET['archivo'];
  107. include('mensaje.php');
  108. } else {
  109. ?>
  110.       <?php if (isset($_GET['mensaje'])) {
  111.     include('mensaje_resultado.php');
  112. } ?>
  113.       <p class="indentado" id="fin_cabecera"><a href="#lista_archivos">Saltar a listado de archivos</a>.</p></td>
  114.   </tr>
  115. </table>
  116. <div id="contenido">
  117.    
  118. <form action="uploader.php" method="post" enctype="multipart/form-data" id="formulario_archivos">
  119.         <fieldset>
  120.             <legend>Selecci&oacute;n de archivos</legend>
  121.             <div id="zona_upload">
  122.                 <p class="clear"><label for="arch_inicial"><span>Seleccionar archivo: </span><input type="file" name="archivos[]" id="arch_inicial" /></label></p>
  123.             </div>
  124.             <input type="hidden" name="accion" value="<?php echo $accion_subir; ?>" />
  125.         </fieldset>
  126.         <p class="botonera"><input type="submit" value="Subir Archivo(s)" id="boton_envio" /></p>
  127.     </form>
  128.     <h1>Listado de archivos</h1>
  129.     <div align="left" id="lista_archivos" >
  130. <?php
  131. echo listarArchivos();
  132. ?>
  133.  
  134. </div>
  135. </div>
  136. </div>
  137. </body>
  138. </html><?php }} ?>

El caso es que este código lo tengo instalado en otra carpetas y funciona perfectamente, la única diferencia que tiene con este es la variable del path.

Si lo escribo así me origina el fallo:

$URLdestino="Facturas/".$ESelegido."/".$periodoelegido."/";

Pero si lo pongo así funciona perfectamente:

$URLdestino="Facturas/Emitidas/Julio";

Esto es de locos y llevo una semana tratando de ver por que pasa esto y no doy con ello.

Última edición por GatorV; 10/05/2013 a las 20:20
  #4 (permalink)  
Antiguo 11/05/2013, 10:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problemas al generar un path

Pues no se ve en tu código donde dices que anda todo mal, sólo indicas donde si funciona pero donde tienes el problema no.

Tampoco somos adivinos para leer tu mente en entender tu problema con solo leer código, debes explicar con mas detalles lo que te ocurre y por favor indica dónde es que no puedes acceder bien a la variable del problema.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 11/05/2013, 13:15
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Problemas al generar un path

Veamos, el código que nos interesa es el siguiente:

Código PHP:

<?php
// Recojo datos del formulario que envío de otra página donde 'mes' es igual 
// a "Julio" y 'EmiReci' tiene el valor de 'Emitidas'.

// Ahora paso las variables vía POST... 
$periodoelegido=$_POST['mes'];
$ESelegido=$_POST['EmiReci'];

// Ahora creo el path a partir de la carpeta 'Facturas'
$directorio_destino="Facturas/".$ESelegido."/".$periodoelegido."/";
 
{
echo
"La Direccion es: ".$directorio_destino
// Aquí se muestra correctamente
// La Dirección es: Facturas/Emitidas/Julio/
El Código para subir los archivos es el siguiente:

Código PHP:

// Bloque subir archivos
if ($_POST['accion'] == $accion_subir) {
    
$i=0;
    
$num count($_FILES['archivos']['name']);
    if (
$num>1) {$tagMensaje='li'$html .= '<ul>';} else {$tagMensaje='p';}
    
$mensaje '1';
    
$char1 = array(' ','á','Á','é','É','í','Í','ó','Ó','ú','Ú','ü','Ü',',',"'",'ç','Ç');
    
$char2 = array('_','a','A','e','E','i','I','o','O','u','U','u','U','_','_','c','C');
    while (
$i<$num) {
        
$archivo_solo str_replace($char1,$char2,basename($_FILES['archivos']['name'][$i]));
        
$archivo $directorio_destino.$archivo_solo;
        
        if (
move_uploaded_file($_FILES['archivos']['tmp_name'][$i], $archivo)) {
            
$html .= '<'.$tagMensaje.'><em>'.$archivo.'</em> se ha enviado correctamente</'.$tagMensaje.'>';
        } else {
            
$html .= '<'.$tagMensaje.'><em>'.$archivo.'</em> no se ha podido enviar.</'.$tagMensaje.'>';
            
$mensaje '2';
        }
        
$i++;
    }
    if (
$num>1) {$html .= '</ul>';}
    if (empty(
$_POST['js'])) {header("Location: uploader.php?mensaje=".$mensaje."");} else {echo '<div id="iframe_mensaje">'.$mensaje.'</div>';}

Y el que los lee es el siguiente:

Código PHP:

function listarArchivos () {
    global 
$directorio_destino;
    
    
$dir opendir($directorio_destino);
    
    
$i=0
    while (
$file readdir($dir)) {
        
// quitamos lo que no sean archivos
        
$tamano round((filesize(''.$directorio_destino.$file.'')/1024),1);
        if (
$file != '.' && $file != '..') {
            
$extension explode('.',$file);
            
$extension end($extension);
            
$htmlLista .= '
            <table><tr><td align="left">
            <li class="clear">
                <a href="'
.$directorio_destino.$file.'" class="archivo archivo_'.$extension.'">'.$file.'</a>
                <span>('
.$tamano.' KB)</span></td><td>
                <a href="uploader.php?confirmarEliminacion=si&amp;archivo='
.$file.'" class="eliminar" rel="'.$file.'">Eliminar</a>
            </li>'
;$htmlLista .="\n</td></tr></table>";
            
$i++;
        }
    }
    if (
$i>0) {$html "<ul>\n".$htmlLista."</ul>"; } else {$html '<p>No hay archivos</p>';}
    
closedir($dir);
    return 
$html.'<p class="indentado"><a href="#formulario_archivos">Saltar a selección de archivos</a>.</p>';

En la cabecera del documento si configuro el path de esta manera:
$directorio_destino="Facturas/".$ESelegido."/".$periodoelegido."/";
se queda en la carpeta 'Facturas' y no va más allá.

Si la configuro de esta forma:
$directorio_destino="Facturas/Emitidas/Julio/";
funciona perfectamente.

Espero haber sido más claro esta vez y perdona la confusión.
  #6 (permalink)  
Antiguo 11/05/2013, 14:40
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Problemas al generar un path

Pues yo no entiendo aún, lo que si alcanzo a ver es que las variables con las cuales construyes $directorio_destino vienen de $_POST, eso puede ser un problema, ya que dichos valores no siempre están presentes.

Te sugiero leer lo siguiente para que veas como funcionan dichas variables: http://www.php.net/variables.external
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 11/05/2013, 14:50
Avatar de bulter  
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 16 años, 10 meses
Puntos: 20
Respuesta: Problemas al generar un path

Yo no me entere de nada en el comentario del codigo dices:

Cita:
$directorio_destino="Facturas/".$ESelegido."/".$periodoelegido."/";

}
echo"La Direccion es: ".$directorio_destino;
// Aquí se muestra correctamente
// La Dirección es: Facturas/Emitidas/Julio/
y ahora dices:

Cita:
En la cabecera del documento si configuro el path de esta manera:
$directorio_destino="Facturas/".$ESelegido."/".$periodoelegido."/";
se queda en la carpeta 'Facturas' y no va más allá.
:O Lo primero ...

otra cosa:

Cita:
{
echo"La Direccion es: ".$directorio_destino;
este { de que viene ?

Cita:
global $directorio_destino;
Iak ... usa parámetros no uses variables globales :|

Otra cosa usa:

Código PHP:
var_dump($_POST); 
para que puedas ver si $_POST realmente contiene lo que necesitas.
  #8 (permalink)  
Antiguo 12/05/2013, 01:22
 
Fecha de Ingreso: enero-2010
Mensajes: 76
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: Problemas al generar un path

Los datos que llegan mediante $_POST son correctos y los he comprobado varias veces, para ello me aseguro con este código:

Código PHP:

echo"La Direccion es: ".$directorio_destino
Y el resultado es este:
La Dirección es: Facturas/Emitidas/Julio/
Es correcto...

Por otro lado he realizado la comprobación var_dump + echo y sin duda los parámetros llegan bien:

Código PHP:

var_dump
($_POST);     
echo
"La Direccion es: ".$directorio_destino
Y me devuelve:

array(3) { ["mes"]=> string(5) "Julio" ["EmiReci"]=> string(8) "Emitidas" ["button"]=> string(26) "Acceder al periodo elegido" } La Direccion es: Facturas/Emitidas/Julio/

En cuanto a no utilizar global, no se si debería tocar esto ya que es un script que encontré hecho y funciona perfectamente (siempre que no utilice variables en el path).

Etiquetas: path, variables
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 21:18.