Ayuda codigo PHP, duda

Bueno, uso este script que encontre por "san google"

Archivos necesarios: index.php & passwords.txt

Este seria el passwords.txt

Joe|1235
Pedro|qwer
Noe|Gty45e
kermit|rwe4v


Este seria el index.php

<?php // Manual de PHP de WebEstilo.com
    if (!isset($PHP_AUTH_USER)) {
      header('WWW-Authenticate: Basic realm="Acceso restringido"');
      header('HTTP/1.0 401 Unauthorized');
      echo 'Authorization Required.';
      exit;
   }
   
   $fich = file("passwords.txt");
   $i=0; $validado=false;
   while ($fich[$i] && !$validado) {
      $campo = explode("|",$fich[$i]);
      if (($PHP_AUTH_USER==$campo[0]) && ($PHP_AUTH_PW==chop($campo[1]))) $validado=true;
      $i++;
   }

   if (!$validado) {
      header('WWW-Authenticate: Basic realm="Acceso restringido"');
      header('HTTP/1.0 401 Unauthorized');
      echo 'Authorization Required.';
      exit;
   }
?>
<!-- Manual de PHP de WebEstilo.com -->
<html>
<head>
   <title>Ejemplo de PHP</title>
</head>
<body>
Ha conseguido el acceso a la <B>zona restringida</B> con el usuario <?php echo $PHP_AUTH_USER?>.
</body>
</html>


Lo quiero usar para que no se vea el contenido de un directorio, por ejemplo "www.web.com/juas/jij/", y que al introducir el user y el pass se vea lo que hay dentro, por ejemplo, si subo algun archivo, que no se pueda ver a noser que metas el user y la pass, y creo que eso serviria, el problema, lo subo a ese directorio, lo abro en el navegador, pongo user y pass, se quita la ventana, parece que va a conectar cuando derrepente, vuelve aparecer, es lo que no entiendo, ¿¡Porque!?

Espero puedan ayudarme, saludos
Hola,
debes hacer referencia a las variables que recogen el usuario y el password mediante la variable predefinida de PHP $_SERVER, tal que así: $_SERVER['PHP_AUTH_USER'] y $_SERVER['PHP_AUTH_PW']. La documentación, aquí: http://es2.php.net/manual/es/reserved.v ... server.php
Jabatus escribió:Hola,
debes hacer referencia a las variables que recogen el usuario y el password mediante la variable predefinida de PHP $_SERVER, tal que así: $_SERVER['PHP_AUTH_USER'] y $_SERVER['PHP_AUTH_PW']. La documentación, aquí: http://es2.php.net/manual/es/reserved.v ... server.php
No entiendo muy bien lo que quieres decir, soy nuevo con el tema y para hacer esto me ayudaron, pero no funciona (la documentacion no fufa .-.) hacer referencia donde, tengo que quiter lo del if?
Vale, igual no me he explicado demasiado bien :D

<?php // Manual de PHP de WebEstilo.com
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
      header('WWW-Authenticate: Basic realm="Acceso restringido"');
      header('HTTP/1.0 401 Unauthorized');
      echo 'Authorization Required.';
      exit;
   }
   
   $fich = file("passwords.txt");
   $i=0; $validado=false;
   while ($fich[$i] && !$validado) {
      $campo = explode("|",$fich[$i]);
      if (($_SERVER['PHP_AUTH_USER']==$campo[0]) && ($_SERVER['PHP_AUTH_PW']==chop($campo[1]))) $validado=true;
      $i++;
   }

   if (!$validado) {
      header('WWW-Authenticate: Basic realm="Acceso restringido"');
      header('HTTP/1.0 401 Unauthorized');
      echo 'Authorization Required.';
      exit;
   }
?>
<!-- Manual de PHP de WebEstilo.com -->

Fíjate que he sustituído en tu código el $_PHP_AUTH_USER y el $_PHP_AUTH_PW por $_SERVER['$_PHP_AUTH_USER'] y $_SERVER['PHP_AUTH_PW'].
Parece que funciona, muxismas gracias, pero (siempre lo ay), yo tengo archivos dentro de esa carpeta, y con ese code, al no aver puesto nada, se queda en blanco, me gustaria que mostrase lo que ay. Lo que yo querria seria, pones esa url, te pide user y pass, y ya puedes ver lo que hay dentro, lo que esta subido por FTP u otro medio a esa carpeta, seria posible modificar ese code para poder ver lo que esta dentro de la carpeta en cuestion?

Saludos y muxas gracias
Tu problema seguramente se deba a la configuración del Apache. Deberías revisar el archivo httpd.conf que está en el directorio del servidor, tal que así: <directorio_donde_tengas_el_apache>/conf/httpd.conf.

Ese archivo configura el comportamento del servidor, y entre otras cosas, le dice a éste que debe hacer cuando alguien solicita un directorio y éste no tiene el archivo que debería mostrar por defecto (index.php, index.html, etc...).
Esta configuración se encuentra en la etiqueta <Directory>, que puede consistir en sólo una para una configuración global, y/o varias para configurar distintos directorios.

Dentro de esta etiqueta tienes una directiva Options dónde especificas, por ejemplo, que quieres listar el contenido del directorio cuando no exista el archivo por defecto que te mencionaba antes. Y, con estas directivas de las que te hablo, es como normalmente se protegen los directorios de la forma que quieres hacer tú, sin tener que recurrir a ningún código en PHP.

Tienes más información sobre el tema en http://httpd.apache.org/docs/2.0/mod/core.html#options. Más dudas, pregunta.

Saludos.
5 respuestas