Foros del Web » Programando para Internet » PHP »

Hacer que si un archivo existe ponga el link a este y sino no

Estas en el tema de Hacer que si un archivo existe ponga el link a este y sino no en el foro de PHP en Foros del Web. Bueno gente, eso... Les comento que no soy programador ni nada por el estilo, simplemente me las ingenio para hacer algunas cositas chicas, o para ...
  #1 (permalink)  
Antiguo 23/04/2009, 13:04
 
Fecha de Ingreso: abril-2009
Mensajes: 35
Antigüedad: 15 años
Puntos: 1
Hacer que si un archivo existe ponga el link a este y sino no

Bueno gente, eso... Les comento que no soy programador ni nada por el estilo, simplemente me las ingenio para hacer algunas cositas chicas, o para modificar levemente algunas ya hechas. Por mis propios medios he hecho este codigo php:

Código PHP:
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><div align="center"><img src="images/line.png" width="500" height="25" /></div></td>
  </tr>
</table>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#CFEBEF">
  <tr>
    <td width="80" rowspan="2"><div align="center"><a href="PHOTOS/<? echo str_pad($gal3"0"STR_PAD_LEFT)?>/zips/<? echo str_pad($gal3"0"STR_PAD_LEFT)?>.rar"><img src="images/zip.jpg" width="73" height="60"></div></td>
    <td width="200" height="30" valign="bottom"><div align="left" class="Estilo3">Download Full Photoset</div></td>
    <td width="200" height="30" valign="bottom"><div align="right" class="Estilo3">Download Full Photoset</div></td>
    <td width="80" rowspan="2"><div align="center"><a href="PHOTOS/<? echo str_pad($gal3"0"STR_PAD_LEFT)?>/zips/<? echo str_pad($gal3"0"STR_PAD_LEFT)?>_hi_res.rar"><img src="images/zip.jpg" width="73" height="60"></div></td>
  </tr>
  <tr>
    <td width="200" height="30" valign="top"><div align="left" class="Estilo3">Lo-Res (1024x768)</div></td>
    <td width="200" height="30" valign="top"><div align="right" class="Estilo3">Hi-Res (2560x1920)</div></td>
  </tr>
  <tr>
    <td width="80"><div align="center">
    <? 
    $number 
str_pad($gal3"0"STR_PAD_LEFT)?>
    <? 
    $endfile 
".rar" ;
    
$filename "PHOTOS/$number/zips/$number$endfile" ;
    print  
round(filesize($filename) / 1000000) . " Mb" ?>
    </div></td>
    <td height="30" valign="top">&nbsp;</td>
    <td height="30" valign="top">&nbsp;</td>
    <td width="80"><div align="center">
    <? 
    $number 
str_pad($gal3"0"STR_PAD_LEFT)?>
    <? 
    $endfile2 
"_hi_res.rar" ;
    
$filename2 "PHOTOS/$number/zips/$number$endfile2" ;
    print  
round(filesize($filename2) / 1000000) . " Mb" ?>
    </div></td>
  </tr>
</table>
Esto funciona perfectamente, pero a continuacion me he percatado, de que no siempre existiran dichos archivos que se intentan descargar. Por ello he intentado hacer una comprobacion previa de si el archivo existte, mediante la funcion file_exist, pero aqui es donde viene mi problema, ya que no logro que funcione. A primera vista me parecia algo bastante sencillo (y debe serlo) pero mi escasa o nula experiencia no me permite descubrir porque, este es el nuevo codigo que no funciona:

Código PHP:
<? 
    $number 
str_pad($gal3"0"STR_PAD_LEFT) ;
    
$endfile ".rar" ;
    
$endfile2 "_hi_res.rar" ;
    
$filename "PHOTOS/$number/zips/$number$endfile" ;
    
$filename2 "PHOTOS/$number/zips/$number$endfile2" ?>

<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><div align="center"><img src="images/line.png" width="500" height="25" /></div></td>
  </tr>
</table>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#CFEBEF">
  <tr>
    <td width="80" rowspan="2"><div align="center">
    <? 
    
if (file_exists($filename)) 
        print <
a href="$filename"/zips/"$filename$endfile><img src="images/zip.jpg" width="73" height="60"></div></td>" ;
    else print 
"<img src="images/zip.jpg" width="73" height="60"></div></td>" ?>
    <td width="200" height="30" valign="bottom"><div align="left" class="Estilo3">Download Full Photoset</div></td>
    <td width="200" height="30" valign="bottom"><div align="right" class="Estilo3">Download Full Photoset</div></td>
    <td width="80" rowspan="2"><div align="center">
    <? 
    
if (file_exists($filename)) 
        print <
a href="$filename2"/zips/"$filename2$endfile2><img src="images/zip.jpg" width="73" height="60"></div></td>" ;
    else print 
"<img src="images/zip.jpg" width="73" height="60"></div></td>" ?>
  </tr>
  <tr>
    <td width="200" height="30" valign="top"><div align="left" class="Estilo3">Lo-Res (1024x768)</div></td>
    <td width="200" height="30" valign="top"><div align="right" class="Estilo3">Hi-Res (2560x1920)</div></td>
  </tr>
  <tr>
    <td width="80"><div align="center"><? print  round(filesize($filename) / 1000000) . " Mb" ?>
    </div></td>
    <td height="30" valign="top">&nbsp;</td>
    <td height="30" valign="top">&nbsp;</td>
    <td width="80"><div align="center"><? print  round(filesize($filename2) / 1000000) . " Mb" ?>
    </div></td>
  </tr>
</table>
Lo que quiero es en la primer parte, que si el archivo no existe no agregue ningun link a la imagen, y en la segunda parte, donde muestra el tamaño del archivo, si este no existe, en lugar del tamaño mostrar un texto que diga "NO FILE" o "NOT AVAILABLE" o algo asi.

Desde ya muchas gracias por cualquier ayuda que me puedan dar.

Marcelo.
  #2 (permalink)  
Antiguo 23/04/2009, 13:31
 
Fecha de Ingreso: abril-2008
Mensajes: 435
Antigüedad: 16 años
Puntos: 10
Respuesta: Hacer que si un archivo existe ponga el link a este y sino no

seria algo asi

if (file_exists(ruta/archivo)) {
acciones
}
else {
echo "";
}

lo mismo seria con el otro punto

saludos
  #3 (permalink)  
Antiguo 23/04/2009, 14:18
 
Fecha de Ingreso: abril-2009
Mensajes: 35
Antigüedad: 15 años
Puntos: 1
Respuesta: Hacer que si un archivo existe ponga el link a este y sino no

Adell, muchas gracias, pero lamentablemente tu respuesta no me sirvio, seguramente debido a mi alto grado de ignorancia en este tema. Esa misma informacion la he encontrado previamente en el manual on line de PHP, pero no me funciona al intentar hacerlo. lo que yo necesitaria, si no es mucho pedir, es la sintaxis exacta de lo que tengo que poner para que funcione ese caso concreto, no en abstracto.

De hecho, eso mismo es lo que creo estar haciendo en este caso:

Código PHP:
<? 
    $number 
str_pad($gal3"0"STR_PAD_LEFT) ;
    
$endfile ".rar" ;
    
$endfile2 "_hi_res.rar" ;
    
$filename "PHOTOS/$number/zips/$number$endfile" ;
    
$filename2 "PHOTOS/$number/zips/$number$endfile2" ?>

<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><div align="center"><img src="images/line.png" width="500" height="25" /></div></td>
  </tr>
</table>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#CFEBEF">
  <tr>
    <td width="80" rowspan="2"><div align="center">
    <? 
    
if (file_exists($filename)) {
        print <
a href="$filename"/zips/"$filename$endfile><img src="images/zip.jpg" width="73" height="60"></div></td>" ;
        }
    else { print 
"<img src="images/zip.jpg" width="73" height="60"></div></td>" 
    } 
?>
    <td width="200" height="30" valign="bottom"><div align="left" class="Estilo3">Download Full Photoset</div></td>
    <td width="200" height="30" valign="bottom"><div align="right" class="Estilo3">Download Full Photoset</div></td>
    <td width="80" rowspan="2"><div align="center">
    <? 
    
if (file_exists($filename)) {
        print <
a href="$filename2"/zips/"$filename2$endfile2><img src="images/zip.jpg" width="73" height="60"></div></td>" ;
        }
    else {print 
"<img src="images/zip.jpg" width="73" height="60"></div></td>" 
    } 
?>
  </tr>
  <tr>
    <td width="200" height="30" valign="top"><div align="left" class="Estilo3">Lo-Res (1024x768)</div></td>
    <td width="200" height="30" valign="top"><div align="right" class="Estilo3">Hi-Res (2560x1920)</div></td>
  </tr>
  <tr>
    <td width="80"><div align="center"><? print  round(filesize($filename) / 1000000) . " Mb" ?>
    </div></td>
    <td height="30" valign="top">&nbsp;</td>
    <td height="30" valign="top">&nbsp;</td>
    <td width="80"><div align="center"><? print  round(filesize($filename2) / 1000000) . " Mb" ?>
    </div></td>
  </tr>
</table>
Pero obtengo este error:

Parse error: syntax error, unexpected '<' in /ruta/archivo.php on line 259




Desde ya muy agradecido por tu ayuda y las otras que puedan llegar.
  #4 (permalink)  
Antiguo 23/04/2009, 14:53
 
Fecha de Ingreso: abril-2008
Mensajes: 435
Antigüedad: 16 años
Puntos: 10
Respuesta: Hacer que si un archivo existe ponga el link a este y sino no

Bueno te comento hay algunos errores de sintaxis que habria que corregir primero, la sintaxis de cuando imprimes algo con print esta mal, ese seria el primer problema a corregir y despues una vez hecho esto nos centraremos en el problema (si no se soluciona con esto)

por ejemplo:

cuando imprimis algo asi
"PHOTOS/$number/zips/$number$endfile"

en realidad seria
"PHOTOS/".$number."/zips".$number.$endfile;

fijate como el texto normal va entre comillas y las variables sin comillas, y tambien atencion a la separacion con puntos entre cada texto y cada variable.

primero corrige esto y luego seguimos con el resto

saludos
  #5 (permalink)  
Antiguo 23/04/2009, 19:49
 
Fecha de Ingreso: abril-2009
Mensajes: 35
Antigüedad: 15 años
Puntos: 1
Respuesta: Hacer que si un archivo existe ponga el link a este y sino no

mmmmm..... la verdad que no entiendo nada.... Lo que decis me parece muy coherente, sin embargo en el primer ejemplo que di no lo escribi como vos decis (fijate en el primer codigo que pegue) y sin embargo funciona perfecto. El unico problema que me llevo a querer modificarlo, es que previa comprobacion de si el archivo existe o no, ponga o no el link segun corresponda, y es ahi donde no pude hacerlo funcionar mas.
Ahora modifique de todos modos textos con comillas y variables sin comillas y separadas por puntos entre texto y variables...sin embargo sigue sin funcionar, y este es el error que tengo ahora:

Parse error: syntax error, unexpected T_STRING in ... hace referencia a esta linea: print <a href=$filename."/zips/".$filename$.endfile><img src="images/zip.jpg" width="73" height="60"></div></td> ;

Código PHP:
<? 
    $number 
str_pad($gal3"0"STR_PAD_LEFT) ;
    
$endfile ".rar" ;
    
$endfile2 "_hi_res.rar" ;
    
$filename "PHOTOS/".$number."/zips/".$number.$endfile ;
    
$filename2 "PHOTOS/".$number."/zips/".$number.$endfile2 ?>

<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><div align="center"><img src="images/line.png" width="500" height="25" /></div></td>
  </tr>
</table>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#CFEBEF">
  <tr>
    <td width="80" rowspan="2"><div align="center">
    <? 
    
if (file_exists($filename)) {
        print <
a href=$filename."/zips/".$filename$.endfile><img src="images/zip.jpg" width="73" height="60"></div></td> ;
        }
    else { print <
img src="images/zip.jpg" width="73" height="60"></div></td> ; 
    } 
?>
    <td width="200" height="30" valign="bottom"><div align="left" class="Estilo3">Download Full Photoset</div></td>
    <td width="200" height="30" valign="bottom"><div align="right" class="Estilo3">Download Full Photoset</div></td>
    <td width="80" rowspan="2"><div align="center">
    <? 
    
if (file_exists($filename)) {
        print <
a href=$filename2."/zips/".$filename2.$endfile2><img src="images/zip.jpg" width="73" height="60"></div></td> ;
        }
    else {print <
img src="images/zip.jpg" width="73" height="60"></div></td> ; 
    } 
?>
  </tr>
  <tr>
    <td width="200" height="30" valign="top"><div align="left" class="Estilo3">Lo-Res (1024x768)</div></td>
    <td width="200" height="30" valign="top"><div align="right" class="Estilo3">Hi-Res (2560x1920)</div></td>
  </tr>
  <tr>
    <td width="80"><div align="center"><? print  round(filesize($filename) / 1000000) . " Mb" ?>
    </div></td>
    <td height="30" valign="top">&nbsp;</td>
    <td height="30" valign="top">&nbsp;</td>
    <td width="80"><div align="center"><? print  round(filesize($filename2) / 1000000) . " Mb" ?>
    </div></td>
  </tr>
</table>
  #6 (permalink)  
Antiguo 23/04/2009, 20:06
 
Fecha de Ingreso: abril-2008
Mensajes: 435
Antigüedad: 16 años
Puntos: 10
Respuesta: Hacer que si un archivo existe ponga el link a este y sino no

si de nuevo te faltaron comillas

print <a href=$filename."/zips/".$filename$.endfile><img src="images/zip.jpg" width="73" height="60"></div></td> ;

deberia ser asi, tenes 2 formas

Código PHP:
<?php print "<a href='".$filename."/zips/".$filename.$endfile."'><img src='images/zip.jpg' width='73' height='60'></div></td>"?>
o mas lindo asi

Código PHP:
<a href='<?php print $filename."/zips/".$filename.$endfile ?>'>><img src='images/zip.jpg' width='73' height='60'></div></td>
  #7 (permalink)  
Antiguo 24/04/2009, 08:18
 
Fecha de Ingreso: abril-2009
Mensajes: 35
Antigüedad: 15 años
Puntos: 1
Respuesta: Hacer que si un archivo existe ponga el link a este y sino no

Ok amigo Adell, poco a poco nos vamos acercando. Te pago aca la ultima version del codigo:

Código PHP:
<? 
    $number 
str_pad($gal3"0"STR_PAD_LEFT) ;
    
$endfile ".rar" ;
    
$endfile2 "_hi_res.rar" ;
    
$filename "PHOTOS/".$number."/zips/".$number.$endfile ;
    
$filename2 "PHOTOS/".$number."/zips/".$number.$endfile2 
    
$noexist "NO FILE"
    
?>

<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><div align="center"><img src="images/line.png" width="500" height="25" /></div></td>
  </tr>
</table>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#CFEBEF">
  <tr>
    <td width="80" rowspan="2"><div align="center">
    <? 
    
if (file_exists($filename)) {
        print 
'<a href=$filename><img src="images/zip.jpg" width="73" height="60"></div></td>' ;
        }
    else { print 
'<img src="images/zip.jpg" width="73" height="60"></div></td>' 
    } 
?>
    <td width="200" height="30" valign="bottom"><div align="left" class="Estilo3">Download Full Photoset</div></td>
    <td width="200" height="30" valign="bottom"><div align="right" class="Estilo3">Download Full Photoset</div></td>
    <td width="80" rowspan="2"><div align="center">
    <? 
    
if (file_exists($filename2)) {
        print 
'<a href=$filename2><img src="images/zip.jpg" width="73" height="60"></div></td>' ;
        }
    else { print 
'<img src="images/zip.jpg" width="73" height="60"></div></td>' 
    } 
?>
  </tr>
  <tr>
    <td width="200" height="30" valign="top"><div align="left" class="Estilo3">Lo-Res (1024x768)</div></td>
    <td width="200" height="30" valign="top"><div align="right" class="Estilo3">Hi-Res (2560x1920)</div></td>
  </tr>
  <tr>
    <td width="80"><div align="center">
    <? 
    
if (file_exists($filename)) {
        print  
round(filesize($filename) / 1000000) . " Mb" ;
        }
    else { print 
$noexist 
    } 
?>
  </div></td>
    <td height="30" valign="top">&nbsp;</td>
    <td height="30" valign="top">&nbsp;</td>
    <td width="80"><div align="center">
    <? 
    
if (file_exists($filename2)) {
        print  
round(filesize($filename2) / 1000000) . " Mb" ;
        }
    else { print 
$noexist 
    } 
?>
  </div></td>
  </tr>
</table>
Te cuento. Ahora todo funciona como esperaba que funcionara. En la primer parte verifica si el archivo existe, si existe pone el link al archivo y si no existe no hay ningun link. En la segunda parte hace la misma verificacion, si el archivo existe imprime su tamaño en Mb, y si no existe imprime "NO FILE".

Lo unico que esta mal es lo siguiente: el link que imprime no es correcto, el mismo es como sigue:

"ruta relativa al documento/$filename"
ó
"ruta relativa al documento/$filename2"

cuando deberia ser:

"ruta relativa al documento/PHOTOS/001/zips/001.rar"
ó
"ruta relativa al documento/PHOTOS/001/zips/001_hi_res.rar"

Estoy seguro que se trata de un error de sintaxis, pero he probado diferentes formas de combinar comillas simples y dobles si¿n haber podido solucionarlo. Es mas interpreto que el error de sintaxis se encentra dentro de <a href= > ya que el link se imprime o no segun corresponda, solo que en lugar de arrojar el valor correspondiente arroja el nombre de la variable.

Espero me ilumines un poco mas el camino, y prometo hacer un curso de PHP en cuanto pueda

Desde ya muchas gracias por toda tu ayuda.

Marcelo.
  #8 (permalink)  
Antiguo 24/04/2009, 08:32
Avatar de SergeMedina  
Fecha de Ingreso: septiembre-2007
Ubicación: Guadalajara, Jalisco
Mensajes: 459
Antigüedad: 16 años, 7 meses
Puntos: 20
Respuesta: Hacer que si un archivo existe ponga el link a este y sino no

Código PHP:
print '<a href=$filename><img src="images/zip.jpg" width="73" height="60"></div></td>' 
Eso oviamente te esta imprimiendo lo siguiente:
Código HTML:
<a href=$filename><img src="images/zip.jpg" width="73" height="60"></div></td> 
Tal cual.

Lo unico que necesitas hacer es lo siguiente:
Código PHP:
print '<a href='.$filename.'><img src="images/zip.jpg" width="73" height="60"></div></td>' 
Fijate en las comillas y puntos que estan en la cadena, esos significan que estas terminando una cadena para pegarla con la variable filename, igualmente esa parte la pegaras con lo que resta del codigo.
__________________
I see dead pixels
  #9 (permalink)  
Antiguo 24/04/2009, 09:22
 
Fecha de Ingreso: abril-2009
Mensajes: 35
Antigüedad: 15 años
Puntos: 1
Respuesta: Hacer que si un archivo existe ponga el link a este y sino no

Asi es

Problema solucionado, te agradezco muchisimo. Ahora me falta cumplir con mi promesa y hacer el curso de PHP jajajaja.

Un abrazo grande y gracias nuevamente.

Marcelo.
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 18:59.