Listar archivos del servidor

Este código me muestra los archivos del servidor pero cuando click en el hipervínculo me dice que no fue encontraso en el mismo . Que esta mal?
Saludos
<?php
$dir = "\AppServ\www";
$directorio=opendir($dir);
echo "<span class='texto_menu_Titulo'>Aplicaciones y Utilerias</span>";
echo "<br><br>";
while ($archivo = readdir($directorio)){
 if($archivo=='.' or $archivo=='..'){
 echo "";
 }else {
 $enlace = $dir.$archivo;
 echo "
<ul type='square'>
<li>";
 echo "<a href=$enlace class='menu'>$archivo<br></a>";
 echo "</li>
</ul>
";
 }
 }
closedir($directorio);
?>

1 respuesta

Respuesta
1
En la asignación del valor a $enlace no estas poniendo el separador de directorio.
O se lo pones al final en la variable $dir o se lo agregas en enlace:
$enlace = $dir . DIRECTORY_SEPARATOR . $archivo;
Supongo no obstante que lo lanzas en local, estando en el propio servidor en el que está el php, sino no te va a funcionar.
¿Quedaría así?
$enlace = $dir . "\". $archivo;
Disculpame sino te entendí, es que soy novato en php
¿Te referís a la barra como separador de dir?
Si, exactamente.
DIRECTORY_SEPARATOR es una constante que tiene el valor del separador de directorio del sistema en el que esté el php, es mejor ponerlo así.
Como indicas el separador de directorios de Windows, si es ruta absoluta pon la unidad.
Si estás en linux, utiliza "/"
Sigo sin tener claro si estas pretendiendo acceder a fichero desde el mismo equipo en el que está el php o si es en equipo remoto, en este último caso, la URL el separador de directorios debe ser "/" independientemente de que sea Windows, Linux o una tostadora :-)
Lo pruebo con el local, pero después lo subo a mi web o sea al public_html
Ahí lo cambie pero me tira error en la linea 17
Te paso el código completo, lo trabajo con IDE que ya tiene todas las funciones cargadas, y me marca ahí.
<?php
$dir = "\AppServ\www";
$directorio=opendir($dir);
echo "<span class='texto_menu_Titulo'>Aplicaciones y Utilerias</span>";
echo "<br><br>";
while ($archivo = readdir($directorio)){
 if($archivo=='.' or $archivo=='..'){
 echo "";
 }else {
 $enlace = $dir . "\" . $archivo;
 echo "
<ul type='square'>
<li>";
 echo "<a href=$enlace class='menu'>$archivo<br></a>";
 echo "</li>
</ul>
";
 }
 }
closedir($directorio);
?>
Entiendo por tanto que el enlace si va a ser una URL real.
En ese caso te recomiendo que agregues otra variable para tener la ruta en "internet" de ese directorio.
Es decir tienes el $dir que sera la ruta real del directorio en el servidor y luego por ejemplo $uripath que será el path que corresponde con la ruta para acceder a ese directorio en Internet a través del servidor web en el que esté.
$dir = ""/AppServ/www";
$uripath = "http://dominio.com/ruta/";
y la línea en la que das valor a $enlace lo cambias por:
$enlace = $uripath . $archivo;
Fíjate que a $uripath ya le he puesto el / final.
Mientras haces las pruebas en local $uripath pones el que te corresponda y luego en la versión en "internet" lo cambia por el adecuado.
Lo del fallo, mejor si indicas exactamente el fallo que devuelve el php y la parte del código, lo del número de línea al tener líneas en blanco que puede que haya alguna más o menos no sé exactamente dónde está el error.
El href del a encierralo también con comillas dobles.
En este código como es sencillo y para evitar posibles errores, los "echo" que separas en varias líneas ponlo en una sola.
Y ya puestos, es conveniente que compruebes si $directorio es FALSE ya que en ese caso indica que no ha podido listarte, por no tener permisos o por que esa ruta es incorrecta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas