lunes, 21 de diciembre de 2009

Configurar Apache en Windows

En el siguiente tema se explica la configuración básica a realizar para poner en funcionamiento un Servidor Web en Windows. Para saber cómo instalar este servidor existe un artículo Instalación Apache en Windows .
Cuando se instala este servidor, automáticamente se almacena en el ordenador en que se ha instalado una documentación de referencia a la que se puede acceder através de la dirección http://localhost/manual/index.html.
Toda la configuración del servidor web Apache en Windows se guarda en el fichero C:/Archivos de Programa/ApacheGroup/Apache2/conf/httpd.conf.
Todos los cambios en la configuración de nuestro servidor web deberán hacerse en dicho fichero.
En el fichero httpd.conf  hay líneas con información útil para ejecutar el servidor(parámetros y sus valores) y otras líneas con anotaciones para entender qué significan las líneas que se ejecutan.Este último tipo de líneas, llamadas comentarios, llevan un # al comienzo, por eso las líneas que realmente se ejecutan de nuestro fichero de configuración son las que no tienen un # al comienzo de la línea.
El modo de funcionamiento del servidor web dependerá de los valores que tengan los parámetros(¡¡OJO!!, siempre se pone un único espacio en blanco entre el nombre y el valor del parámetro). El formato de un parámetro es:
nombre_parámetro
valor_del_parámetro

A la hora de modificar este fichero se pueden seguir las siguientes recomendaciones:

REGLAS GENERALES PARA MODIFICAR UN FICHERO DE CONFIGURACION

1. Hacer una copia del fichero que vamos a modificar. Esta copia la podemos guardar en otra carpeta diferente o bien en el directorio en que estamos trabajando cambiándole el nombre(poniéndole el mismo nombre + un número correlativo, p.ej: para el fichero httpd.conf, la copia que creemos puede llamarse httpd-1.conf, así para cada cambio que vayamos haciendo tendremos una versión anterior al cambio que acabamos de realizar).
2. Abrir el fichero de configuración original con el Bloc de Notas, ya que al escribir en él, otros programas como el Word o el Wordperfect introducen caracteres que nosotros no vemos y los programas que utilizan estos ficheros de configuración dejan de funcionar correctamente.
3. Realizar en el fichero los cambios necesarios. Otra norma no escrita al realizar cambios en los ficheros de configuración consiste en poner un comentario antes o al lado del cambio que hayamos hecho. También se suelen ir haciendo cambios de uno en uno para comprobar que funciona bien cada uno de ellos.
4. Guardar el fichero.
5. Comprobar si los cambios han conseguido el resultado esperado. Si todo ha ido bien, podemos borrar el fichero copia que hicimos antes. Si no funciona bien, debemos restituir el fichero de configuración que duplicamos antes de realizar los cambios en el fichero, comprobar otra vez que todo va bien tras el paso de vuelta atrás y volver al punto 1.
En nuestro caso, para comprobar si los cambios funcionan o no, se debe reiniciar el Servidor Apache(no
hace falta reiniciar el ordenador, solo el servidor web)
.
Para realizar cambios en parámetros concretos es muy útil el uso de la herramienta de búsqueda del bloc de notas, ya que así le podemos poner el nombre del parámetro a cambiar y ésta lo encuentra dentro del fichero de configuración:

A continuación, se da un repaso a los parámetros básicos para una correcta configuración del servidor web como son: el directorio donde se guardan las páginas web, a quién se deja acceder a ciertas páginas, las páginas web asociadas a usuarios del ordenador(donde se instala el servidor), qué se pondrá en la barra de direcciones del navegador para llegar a nuestras páginas(cual es la URL para acceder a nuestras páginas), por donde escucha nuestro ordenador las peticiones de páginas que le llegan de fuera, etc.
Antetodo quiero comentar como explicaré el contenido de este fichero. El texto que aparece en color azul representa texto original encontrado en el fichero httpd.conf. Cuando cuente como se modifican ciertos parámetros o etiquetas, el texto que deberemos copiar o con el cual sustituir el contenido original aparecerá en color rojo.

¿COMO SABER DONDE PONER NUESTRAS PAGINAS WEB?

Las páginas web de nuestro servidor deben estar todas guardadas en una misma carpeta. Dentro de esta podremos crear más subcarpetas y clasificar así nuestros contenidos guardando cada página donde consideremos más oportuno.
¿Cómo sabe el servidor web, cuando se va a ejecutar, dónde buscar los archivos que debe mostrar a los navegadores que le pedirán las páginas? mediante el parámetro DocumentRoot. Por defecto al instalar el
servidor, este parámetro tiene el valor C:/Archivos de programa/Apache Group/Apache2/htdocs.
Este parámetro aparece por defecto en nuestro fichero de configuración de la siguiente forma:
DocumentRoot "C:/Archivos de programa/Apache Group/Apache2/htdocs"

Si quisiéramos colgar nuestras páginas web de otra carpeta distinta a la propuesta por defecto, por ejemplo de C:/Mis paginas web, deberíamos cambiar el valor del parámetro en el fichero de configuración, poniendo en esa línea:
DocumentRoot "C:/Mis paginas web"
( Además, deberemos guardar los cambios en el fichero y volver a lanzar el servidor web para que el cambio sea efectivo).

¿QUE FICHERO INTENTA ABRIR EL SERVIDOR WEB?

Cuando desde un ordenador intentan acceder a las páginas de nuestro servidor, el servidor web sabe que tiene que ir a buscar esas páginas a donde le diga DocumentRoot. Pero de esa carpeta, ¿el servidor qué archivo muestra?
El archivo o archivos a mostrar es lo que se indica en el parámetro DirectoryIndex, en el fichero httpd.conf
aparece con el siguiente valor por defecto:
DirectoryIndex index.html
index.html.var

Así que nosotros tendremos que poner al menos un fichero llamado index.html en la carpeta especificada en DocumentRoot, en nuestro caso en C:/Mis paginas web/index.html. O bien, cambiar el valor del parámetro DirectoryIndex con el nombre de la página que queremos que se abra al invocar a nuestro servidor web:
DirectoryIndex mipagina.html
Si hacemos este cambio cuando al servidor web le llegue una petición de página desde un ordenador, buscará en C:/Mis paginas web, un fichero que se llame mipagina.html y si no lo encuentra entonces enseñará una página como la siguiente:

En este parámetro se pueden poner tantas páginas como queramos separadas por un espacio en blanco, e irá buscando una tras otra hasta que encuentre alguna.

¿COMO PERMITIR Y RESTRINGIR ACCESO A ALGUNAS DE LAS CARPETAS WEB?

Se puede dar distintos permisos de acceso a las carpetas y archivos que conforman nuestro espacio web.
Dentro de la carpeta especificada en DocumentRoot se guardarán páginas y carpetas. Para ello se utiliza la
etiqueta  . Esta etiqueta está formada por un signo < , la palabra Directory, un espacio en blanco, el camino completo de dicha carpeta en nuestro disco duro, y el signo >. Después de poner esta etiqueta se ponen las propiedades que se quiere tenga en cuenta el servidor web respecto a esta carpeta y por último otra etiqueta de cierre.
En el fichero de configuración aparece de la siguiente forma:

Primero, se configura lo que debe hacer el servidor "por defecto"(es decir para cualquier URL con la que se acceda a él y no sabe qué página mostrar). Para este caso normalmente no se permitirá acceder a ningún sitio que nosotros no dejemos. Para conseguirlo, en el código original introduciremos la línea que aparece en
color rojo, para denegar acceso:
<DIRECTORY
/>
   Options
FollowSymLinks
   AllowOverride
None
   Deny from
all

</DIRECTORY>

Después se dan permisos o restringe el acceso a la carpeta de la que cuelgan todas nuestras páginas y por último se irán dando o quitando permisos a subcarpetas o a archivos concretos que no queremos que se vean.
Con el siguiente código, hacemos visible el directorio del que cuelgan todas nuestras páginas.
Si ahora ponemos en el navegador http://dirIP_del_ServidorWebnos mostrará la página que hayamos indicado en el parámetro DirectoryIndex, normalmente index.html y que debe estar guardada en C:/Mis paginas web (el valor del parámetro DocumentRoot).

<DIRECTORY "C:/Mis
paginas web">
   Options
Indexes
FollowSymLinks
   AllowOverride
None
   Order
deny,allow
   Allow from
all
</DIRECTORY>

Las propiedades que se pueden definir para cada carpeta son las siguientes:


  • Options, son opciones del servidor disponibles para la carpeta a la que se refiere. Valores habituales:
          Indexes, si en la carpeta no hay un fichero index.html, se mostrará en el navegador de quien quiera acceder a nuestras páginas un índice con todos los ficheros guardados en la carpeta a la que intenta acceder.
        
    FollowSymLinks
    , el servidor seguirá enlaces simbólicos a esta carpeta(alias de esa carpeta). Es decir, permitimos que este directorio, tenga otros nombres diferentes al real en nuestro ordenador, y aún así los navegadores de los equipos que intenten acceder a nuestra página , lo entenderán.





  • AllowOverride, permite decidir el tipo de directivas(opciones de configuración avanzadas) que se pueden escribir en los ficheros .htaccess(ficheros donde se puede ampliar la configuración que se quiere para una carpeta determinada). En una configuración básica, como la que trata de enseñar este artículo no conviene utilizar este tipo de parámetro. Para inutilizarlo le damos el valor None.




  • Deny, si ponemos from all prohibirá el acceso a cualquier navegador a todos los ficheros y carpetas que estén dentro de dicha carpeta. En lugar de all ,se puede indicar un nombre de dominio o un nombre de equipo o una dirección IP o un grupo de direccionesIP.




  • Allow, si ponemos from all permitirá acceder a cualquier navegador a todos los ficheros y carpetas que estén dentro de dicha carpeta.En lugar de all ,se puede indicar un nombre de dominio o un nombre de equipo o una dirección IP o un grupo de direccionesIP.


Por ejemplo, con el siguiente código, se permite el acceso a una carpeta llamada contenidos publicos situada dentro de la carpeta C:/Mis paginas web:

Con las siguientes líneas se prohibe el acceso a una carpeta llamada contenidos personales situada dentro de la carpeta C:/Mis paginas web:
<DIRECTORY "C:/Mis paginas web/contenidos personales">
   Options Indexes FollowSymLinks
   AllowOverride None
   Order deny,allow
   Deny from all
</DIRECTORY>

Por último, si se quiere prohibir el acceso excepto a ciertas direcciones IP, se deberá poner después de la directiva de Deny, una directiva de Allow con las direcciones IP desde las cuales dejamos acceder a nuestras páginas:

   .......
    Order deny,allow
    Deny from all
    Allow from 192.168.1.25

</DIRECTORY>

O bien, si estamos dentro de un dominio DNS(están registrados los nombres de nuestros ordenadores en algún servidor de nombres, DNS), podremos dar permiso a todo un dominio o a algún equipo dentro de este dominio:
   .......
   Order deny,allow
   Deny from all
   Allow from micentro.es
</DIRECTORY>

¿COMO PROHIBIR EL ACCESO A CIERTOS FICHEROS DE UN SITIO WEB?

Se puede prohibir el acceso a un fichero (o tipo de fichero) almacenado en una carpeta determinada.
Si se quiere prohibir el acceso a un fichero(p. ej: prohibido.htm) en una carpeta determinada, se deberá poner un grupo <FILES..>.... </FILES>entre las etiquetas que determinan las directivas para el directorio en cuestión:
   <FILES prohibido.htm>
      Order deny,allow
      Deny from all
   </FILES>
   AllowOverride FileInfo
   Order allow,deny
   Allow from all
</DIRECTORY>

Si lo que se quiere es prohibir el acceso a un fichero(p. ej: prohibido.htm) en todo nuestro espacio web, se deberá poner un grupo <FILES..>.... </FILES>pero fuera de las etiquetas de directorio:
<FILES prohibido.htm>
   Order deny,allow
   Deny from all
</FILES>

Si lo que se quiere es prohibir el acceso a un tipo de ficheros(p. ej: todos los .htm), pondremos el grupo <FILES..>.... </FILES>de la siguiente manera:
<FILES *.htm>
   Order deny,allow
   Deny from all
</FILES>

¿COMO CREAR UN ENLACE SIMBOLICO (ALIAS) A UNA CARPETA?

Un alias para una carpeta, permitirá que los navegadores que acceden a nuestras páginas no sepan los nombres que tienen las carpetas del ordenador que contienen las páginas web. Aunque realmente se podrá acceder a las páginas de esa carpeta tanto con el alias como con el nombre del directorio donde se guardan las páginas. Tiene sentido utilizar alias para ocultar el directorio real donde guardamos las páginas web o bien para hacer más sencilla la navegación por nuestras páginas.
Para crear el alias se introduce, antes de la etiqueta < Directory ...... > de la carpeta a la que queremos dar un alias, la siguiente línea:
Alias  /nombre_simbolico  "camino_de_la_carpeta_en_el_ordenador".
Si el nombre_simbólico lleva la barra / al final, en el camino_real_completo también la tendremos que poner.
Por ejemplo, mediante la siguiente línea llamamos ejercicios a la carpeta "contenidos publicos". Los navegadores que quieran acceder a su contenido podrán poner la dirección http://dirIP_del_ServidorWeb/ejercicios en el navegador:
Alias /ejercicios "C:/Mis paginas web/contenidos publicos"
En el fichero de configuración quedará así:

Nota: El siguiente apartado ha sido modificado por el Administrador del Observatorio.

¿COMO CREAR ESPACIO WEB ASOCIADO A LOS USUARIOS DE LA MAQUINA?

Cada usuario del sistema operativo donde estamos instalando el servidor web puede tener su propio directorio web. Los visitantes podrán acceder a dicho directorio poniendo como URL http://dirIP_del ServidorWeb/nombreusuario, donde dirIP_delServidorWeb es la dirección IP de la máquina donde está instalado el servidor web.
Así cada usuario podrá publicar sus páginas web dentro de una carpeta misitio. Deberemos crear esa carpeta en C:/Documents and Settings/ nombre_del_usuario/ y cada usuario debe meter sus páginas en dicha carpeta.
Apache, utiliza la directiva UserDir para especificar la ubicación de directorios de usuario. Windows no admite el mismo método. En su lugar, debe utilizar directivas Alias para asignar un directorio de usuario.
Alias /NombreUsuario "Ruta Directorio Usuario"
<DIRECTORY "Ruta Directorio Usuario">
   Options Indexes FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all
</DIRECTORY>

De modo, que para poder acceder en local a la carpeta misitio de un usuario llamado 'jorge' tendremos que añadir las siguientes líneas al fichero httpd.conf:
Alias /pilar "C:\Documents and Settingspilar\Mis documentos\misitio"
<DIRECTORY "C:\Documents and Settings\jorge\Mis documentos\misitio">
   Options Indexes FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all
</DIRECTORY>

Para acceder a este directorio web habrá que poner en la barra del navegador http://localhost/jorge.
<DIRECTORY "C:/Mis paginas web/contenidos publicos">
   Options Indexes FollowSymLinks
   AllowOverride None
   Order deny,allow
   Allow from all
</DIRECTORY>

CheckBox Dinámicos


Código PHP:


<form action="apuntarse_eventos.php" method="post">
<?
$i 
0;
while (
$i 10){
?>
Evento <? echo $i?>: <input type="checkbox" name="eleccion[]" id="eleccion<? echo $i?>" value="<? echo $i?>" /><br />
<? $i++; } ?>
<input type="submit" name="boton" value="Confirmar" />
</form>




apuntarse_eventos.php:

Código PHP:


<?
if(isset($_POST['eleccion'])){
    for(
$i 0$i count($_POST['eleccion']); $i++){
        
$sql "INSERT INTO tbl_quiera_asistir_a (id_evento) VALUES ("$_POST['eleccion'][$i] .")";
        echo 
$sql "<br />";//completar el codigo grabar en la bd Mysql
    }
}
?>


sábado, 19 de diciembre de 2009

Saber si CheckBox esta seleccionado

<html>
<head>

<script>
function comprobarCheckBox(){
if
(document.frm.checkbox1.checked)
alert("PrimeroCheckeado");
if
(document.frm.checkbox2.checked)
alert("SegundoCheckeado");
}
</script>
</head>
<body>
<form
name="frm">
<input type="checkBox" id="checkbox1" value="checkbox1" name="st">Selection A<br>
<input type="checkBox" id="checkbox2" value="checkbox2">Selection B<br>

<input type="button" value="Comprobar" onClick="comprobarCheckBox()">
</form>
</body>
</html>

Cambiar color de boton (input) en Html

<html>
<head>
<title> Cambiar colores </title>

<style type="text/css">

input { font-family: Tahoma, Verdana, Arial; font-size: 11px; color: #FFFFFF; background-color: #7F99D4; border: #000099; border-style: solid; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; cursor: hand}
</style>

<script language="JavaScript">
<!--
function cambiar(b,bg,tx){
b.style.backgroundColor = bg;
b.style.color = tx;

}
//-->
</script>
</head>
<body>

<input type="button" name="bot" value="Mi Boton" onMouseOver="cambiar(this,'#CCAAFF','#000000')" onMouseOut="cambiar(this,'#7F99D4','#FFFFFF')"><br>
</body>
</html>

Sistema de Autenticación (login,password) en PHP y MySql

Primer Paso: Creación de la base de datos

Lo primero que necesitas es crear la base de datos en la que vas a almacenar tu información. Si ya tienes creada una salta al paso dos.
Para crear la base de datos la mejor manera es desde algun tipo de software que te permita manejar MySql ya que el uso de scripts no está autorizado en todos los servidores.

Segundo Paso: Configuración de tablas

Ya está creada la base de datos y tenemos que configurar las tablas y campos en los que vamos a almacenar la información.
Utiliza este código o modifícalo adaptándolo a tus gustos.
// Configura los datos de tu cuenta
$dbhost='localhost';
$dbusername='username';
$dbuserpass='password';
$dbname='database';
// Conexión a la base de datos
mysql_connect ($dbhost, $dbusername, $dbuserpass);
// Seleccion de la base de datos
mysql_select_db($dbname) or die('Cannot select database');
// Creacion de la tabla (puedes elegir otros nombres para los campos)
$query = 'CREATE TABLE users(
id INT NOT NULL
AUTO_INCREMENT,
PRIMARY KEY(id),
username VARCHAR(30) NOT
NULL,
password VARCHAR(20) NOT NULL,
email VARCHAR(40) NOT
NULL)';
$result = mysql_query($query);
echo "!Tabla
creada!";
?>

Tercer Paso: Registro de usuarios

Ya hemos creado y configurado la base de datos, ahora escribiremos el código de una simple página de registr, en la que insertaremos nombre de usuario, contrseña y cuenta de correo.
// Configura los datos de tu
cuenta
$dbhost='localhost';
$dbusername='username';
$dbuserpass='password';
$dbname='database';
// Conexión a la base de datos
mysql_connect ($dbhost, $dbusername,
$dbuserpass);
mysql_select_db($dbname) or die("Cannot select database");
// Preguntaremos si se han enviado ya las variables necesarias
if
(isset($_POST["username"])) {
$username =
$_POST["username"];
$password = $_POST["password"];
$cpassword =
$_POST["cpassword"];
$email = $_POST["email"];
// Hay campos en blanco
if($username==NULL|$password==NULL|$cpassword==NULL|$email==NULL)
{
echo "un campo está vacio.";
}else{
// ¿Coinciden las contraseñas?
if($password!=$cpassword) {
echo "Las contraseñas no
coinciden";
}else{
// Comprobamos si el nombre de usuario o la cuenta de correo ya existían
$checkuser = mysql_query("SELECT
username FROM users WHERE username='$username'");
$username_exist =
mysql_num_rows($checkuser);
$checkemail = mysql_query("SELECT email FROM users WHERE
email='$email'");
$email_exist = mysql_num_rows($checkemail);
if ($email_exist>0|$username_exist>0) {
echo "EL nombre de
usuario o la cuenta de correo estan ya en uso";
}else{
//Todo parece correcto procedemos con la inserccion
$query = "INSERT INTO
users (username, password, email)
VALUES('$username','$password','$email')";
mysql_query($query) or
die(mysql_error());
echo "El usuario $username ha sido registrado de
manera satisfactoria.";
}
}
}
}
?>
Nos quedaría escribir el código HTML que debe contener el formulario de registro, prueba con este ejemplo o edítalo a tu gusto.





Nombre de usuario:
Password:
Repite Password:
Email:


Ahora que tenemos nuestra página de registro llego la hora de hacer pruebas, ten en cuenta que si has cambiado algún dato de los formularios o algun campo de la base de datos ten en cuenta que deberas cambiar las consultas.
La correcta ejecución de nuestro código debe devolver lo siguiente.

El usuario "nombre_de_usuario" ha sido registrado de manera satisfactoria.

Cuarto Paso: Autentificación de usuarios


// Configura los datos de tu cuenta
$dbhost='localhost';
$dbusername='username';
$dbuserpass='password';
$dbname='database';
session_start();
// Conectar a la base de datos
mysql_connect ($dbhost, $dbusername, $dbuserpass);
mysql_select_db($dbname) or die('Cannot select database');
if ($_POST['username']) {
//Comprobacion del envio del nombre de usuario y password
$username=$_POST['username'];
$password=$_POST['password'];
if
($password==NULL) {
echo "La password no fue enviada";
}else{
$query = mysql_query("SELECT username,password FROM users WHERE username = '$username'") or die(mysql_error());
$data = mysql_fetch_array($query);
if($data['password'] != $password)
{
echo "Login incorrecto";
}else{
$query = mysql_query("SELECT
username,password FROM users WHERE username = '$username'") or die(mysql_error());
$row = mysql_fetch_array($query);
$_SESSION["s_username"] = $row['username'];
echo "Has sido logueado correctamente
".$_SESSION['s_username']." y puedes acceder al index.php.";
}
}
}
?>


Nos quedaría escribir el código HTML que debe contener el formulario para ingresar en la página, prueba con este ejemplo o edítalo a tu gusto.
Nombre de usuario:
Password:


Quinto Paso: Index.php visible para usuarios registrados

// Configura la información de tu cuenta
$dbhost='localhost';
$dbusername='username';
$dbuserpass='password';
$dbname='database';
session_start();
// Conexión a la base de datos
mysql_connect ($dbhost, $dbusername, $dbuserpass);
mysql_select_db($dbname) or die('Cannot select database');
?>
if (isset($_SESSION['s_username'])) {
echo "Bienvenido a mi sitio has ingresado como ".$_SESSION['s_username'].", gracias por la
visita!";
}else{
echo "Tu no estas autentificado dirígete a login.php o registrate en register.php";
echo
$_SESSION['s_username'];
}
?>

Sexto Paso: Logout

Sólo nos quedaría poder salir de la página una vez nos hayamos autentificado y esto lo haremos con este pequeño script.
session_start();
$_SESSION = array();
header("Location:
index.php");
?>