|
Capitulo 11 - CGI-BIN,
FormMail, etc.
|
||||||||||||||||||||||||||||
|
Las siglas de CGI son para "Common Gataway Interface", que viene a decir que es un nombre que describe en pocas palabras el hecho de que es un método de ejecutar desde el browser o navegador de Internet los programas que hay en el servidor de la página que visitas. La parte BIN del nombre se refiere a los programas binarios ejecutables que han sido que han sido compilados y programados. Puede ser un poco engañoso, ya que CGI también puede ser scripts de Unix o lenguajes interpretados como el Perl. Los scripts de CGI necesitan ser guardados como ASCII o como texto sin formato. Esto es algo muy importante. Por lo general, no ofrecemos ayuda en CGI, cada uno se consigue o programa su propio programa y se defiende con ello. Hay muchos lugares donde buscar programas de CGI en Internet. El mejor de ellos en mi opinión es http://cgi-resources.com también hay una pagina muy parecida a esta última en español, que cada vez tiene mayor calidad, igual primero quieres pasar por dicha pagina, está en http://www.recursos-cgi.net. Si no eres un experto en CGI y no vas a contratar a alguien que te instale programas CGI intenta buscar programas que tengan buena documentación acerca de cómo instalarlos. Existe la posibilidad de pedir a CruceDeCaminos.com que te instale un programa, pero esto ya por cobro. Pronto buscaremos tambien otras personas que sepan del tema para que tengaís más gente entre la cual elegir para instalar los programas. En CruceDeCaminos.com nos gusta conceder cuanta más información posible, aunque ello signifique ayudar a la competencia.
|
||||||||||||||||||||||||||||
| Dónde poner los programas CGI: | ||||||||||||||||||||||||||||
|
Debes poner los programas o scripts de CGI bajo el subdirectorio de www llamado cgi-bin.
|
||||||||||||||||||||||||||||
| Rutas al correo, perl, etc. | ||||||||||||||||||||||||||||
|
Aquí está las rutas a los recursos CGI que comúnmente se necesitan: Sendmail: /usr/lib/sendmail Perl5: #!/usr/bin/perl Ruta del Servidor: /home/tunombredeusuario/tudominio-www/cgi-bin Ruta de la raíz: /home/tunombredeusuario/ Directorio del dominio: /home/tunombredeusuario/tudominio-www Ruta del Cgi-bin: /home/tunombredeusuario/tudominio-www/cgi-bin/nombredearchivo NOTA: No Se debe poner la extensión de tu pagina donde pone "tudominio".
|
||||||||||||||||||||||||||||
| Permisos de Archivos: | ||||||||||||||||||||||||||||
|
Existen tres formas diferentes de configurar los permisos para los archivos y directorios de tu cuenta. 1) El File Manager. 2) por FTP 3) por Telnet. No recomendamos en absoluto usar Telnet para dar los permisos a los archivos si sólo se va a usar para eso, por lo que aquí nos saltaremos la explicación de cómo hacerlo por medio de Telnet.
|
||||||||||||||||||||||||||||
| Conceder Permisos usando el File Manager: | ||||||||||||||||||||||||||||
|
Este es el método a utilizar por medio de tu browser o navegador
de Internet.
Una vez dentro del directorio o carpeta, verás que lo primero que hay son los permisos (pone Permission). Pulsa sobre los permisos del archivo o carpeta al que deseas cambiar los permisos. Una nueva pantalla te dejara seleccionar los permisos que desees. Más adelante explicaremos que quieren decir todos estos permisos.
|
||||||||||||||||||||||||||||
| Conceder permisos usando Fetch para Mac: | ||||||||||||||||||||||||||||
|
Simplemente dirigete al archivo que deseas cambiar los permisos y seleccionalo. Bajo el menú de "Remote" selecciona "Change Permissions". Una pequeña ventanita aparece que te permite cambiar los permisos del archivo, como en la foto inferior. Pulsa en los diferentes cuadraditos para configurarlo como desees. Para saber el significado de todas ellas lee más abajo.
|
||||||||||||||||||||||||||||
| Conceder permisos usando WS-FTP para Windows: | ||||||||||||||||||||||||||||
|
Practicamente de la misma forma que el anterior. Dirigete al archivo que deseas cambiar, seleccioalo, pulsa el botón derecho y elige CHMOD. La ventana que ves aquí debajo es la que aparecerá. Simplemente selecciona los permisos que desees conceder. Para mayor información lee lo siguiente.
|
||||||||||||||||||||||||||||
| Definición de los Permisos: | ||||||||||||||||||||||||||||
Pronto te darás cuenta de que CHMOD es la palabra que se usa casi siempre para cambiar los permisos de los archivos, ya sea por FTP, o por Telnet. Algunos Scripts te dicen que pongas los permisos de modo que tengan un valor de 775 (por ejemplo). Cuando se usa la definición numérica se hace de la siguiente forma: 4+2+1(rwx)=7 El primer número se refiere al dueño, el segundo al grupo,
y el tercero a los demás (otros). De ahí que si tenemos
que hacer un permiso 775 sabremos que el primer grupo ha de tener un 7.
Para lograr el 7 sumamos 4(r)+2(w)+1(x), lo cual da 7. Esto le da al dueño
permiso de Lectura, Ejecución y Escritura. El resultado final de 755 aparece como rwx rwx -rx. Los permisos siempre aparecen en 3 grupos de letras, si hay un guión (-), ello simplemente quiere decir que no se le ha dado ningún permiso a ese grupo. Recuerda que los primeros 3 números pertenecen al dueño, los siguientes 3 a el grupo, y los últimos 3 a los demás.
|
||||||||||||||||||||||||||||
| Problemas con el CGI-BIN: | ||||||||||||||||||||||||||||
|
Hay diferentes problemas que puedes encontrarte, vamos a intentar solucionar los más comunes:
|
||||||||||||||||||||||||||||
| Cuando activo mi programa me aparece un mensaje de error que dice "Internal Server Error. The server encountered an internal error or mis-configuration and was unable to complete your request." | ||||||||||||||||||||||||||||
|
Esto generalmente se debe a un problema dentro del script. Puedes conectarte por medio de Telnet y probar tu script en modo local para tener mayor idea de lo que está sucediendo. Dirigete al directorio donde está el script y ejecutalo. Para ejecutarlo puedes: 1) Escribir "perl miscript.pl" (Perl siendo el lenguaje del
script en este caso) El primero es bueno para saber si hay un problema en tu script. El segundo es bueno para probar si tu línea de llamada (la primera en tu script) está bien. Por ejemplo, si pusiste bien la dirección de Perl en el script.
|
||||||||||||||||||||||||||||
| Me aparece el mensaje "File Not Found" o "No Such File or Directory". | ||||||||||||||||||||||||||||
|
Esto quiere decir "Archivo No Encontrado", o "No existe
ese Archivo o Carpeta".
|
||||||||||||||||||||||||||||
| Cuando pruebo el script en modo local (por Telnet) me da el siguiente error: "Literal @dominio now requires a back slash at myscript.pl line 3, within string. Execution of myscript.pl aborted due to compilation errors." | ||||||||||||||||||||||||||||
|
Esto es causado por una malinterpretación de Perl. El simbolo @ tiene un significado muy importante en Perl. Define un array, una tabla de elementos. Como no puede encontrar la tabla de elementos de domain genera un error. Debes poner una barra hacia atrás (\)antes del simbolo "@" para decirle al perl que lo interprete como un simbolo normal, como por ejemplo para una dirección de correo. . |
||||||||||||||||||||||||||||
| Me sale un mensaje que dice "POST not implemented". | ||||||||||||||||||||||||||||
|
Probablemente estés usando una referencia errónea a cgiemail.
|
||||||||||||||||||||||||||||
| Me está diciendo "You don't have permission to access /" | ||||||||||||||||||||||||||||
|
Esto puede querer decir que te falta el archivo index.html. |
||||||||||||||||||||||||||||
| Cgiwrap - Secure Server CGI Wrapper | ||||||||||||||||||||||||||||
|
Tenemos configurado el servidor seguro CGI Wrapper de modo que siempre que hagas un llamado a "cgi-dominio" responderá: https://securenombredeservidor/cgi-dominio/script.cgi Esto hace lo mismo que el de arriba: Esto asume que tu script.cgi está en tu cgi-bin.
|
||||||||||||||||||||||||||||
| formmail.pl | ||||||||||||||||||||||||||||
|
Formmail es un programa genérico de formularios para la web. Recogerá
los resultados del formulario y los enviará a la persona especificada.
Este script tiene bastantes opciones de formato y resultado, la mayoría
de las cuales son especificadas desde el formulario mismo, lo cual quiere
decir que no necesitas experiencia en programación o múltiples
programas (scripts) para tus diferentes formularios. En definitiva, podrás
añadir formularios sin tener que editar y programar los scripts. Aquí hay un ejemplo de los campos de formulario a poner en la página web: <FORM METHOD=POST ACTION="http://tudominio.com/cgi-sys/formmail.pl"> Lo siguiente es son descripciones y el método correcto de añadir los campos: |
||||||||||||||||||||||||||||
| Destinatario (recipient): | ||||||||||||||||||||||||||||
|
Descripción: Este campo te permite especificar a quien deseas enviar el resultado del formulario. Generalmente será a ti mismo a quien desees poner como destinatario (tú recibirías los formularios rellenados). El campo a rellenar debe de ser una cuenta de correo existente. Ejemplo: <input type=hidden name="recipient" value="email@tudominio.com">
|
||||||||||||||||||||||||||||
| Asunto (subject): | ||||||||||||||||||||||||||||
|
Descripción: Este campo te permite especificar el asunto (o tema) del mensaje que será enviado. Es el nombre del asunto que aparecerá en la cabecera del mensaje electrónico enviado al destinatario. Ejemplo: Si deseas escoger el asunto del mensaje poner: Para permitir al usuario poner su propio asunto poner:
|
||||||||||||||||||||||||||||
| Correo Electrónico (email): | ||||||||||||||||||||||||||||
|
Descripción: Este campo le permitirá a la persona que rellene
el formulario especificar una dirección de correo electrónico
para que se le pueda contestar. Esto es algo que se recomienda poner.
|
||||||||||||||||||||||||||||
| Nombre real (realname): | ||||||||||||||||||||||||||||
|
Descripción: El campo "realname" permitirá al usuario poner su nombre en el formulario y el mensaje a enviar. Este campo viene bien para poder identificar a la persona que rellena el formulario y saber contestarle por su nombre. Ejemplo: <input type=text name="realname">
|
||||||||||||||||||||||||||||
| Redirección (redirect): | ||||||||||||||||||||||||||||
|
Descripción: Si deseas que una vez el formulario ha sido rellenado
y enviado el usuario tenga una confirmación de ello, en una página
que creas especialmente para ello, puedes indicar aquí cual es
la página a la que debe ir (nota: deberás también
crear dicha página).
|
||||||||||||||||||||||||||||
| Campos obligatorios (required): | ||||||||||||||||||||||||||||
|
Puedes obligar al usuario que desea enviar el formulario a rellenar los
campos que creas oportunos. Simplemente pon el nombre de los campos, separados
por comas, que desees que sean obligatorios. El mensaje no se enviará
a no ser que rellenen esos campos. Si no han rellenado todos los campos
obligatorios serán llevados a una página de error con opción
a volver atrás y rellenar los campos que faltan.
|
||||||||||||||||||||||||||||
| Otros campos: | ||||||||||||||||||||||||||||
|
Puedes poner los tantos campos como desees. Si por ejemplo quieres preguntar la edad puedes poner: <input type=text name="edad">
|
||||||||||||||||||||||||||||
| Opciones Avanzadas: | ||||||||||||||||||||||||||||
|
Campo Env_report, con las siguientes opciones: Orden (sort): Para que te lleguen los campos en orden alfabético
poner:
|
||||||||||||||||||||||||||||
| Server Side Includes (SSI): | ||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||
