]> granicus.if.org Git - apache/commitdiff
generated the HTML file
authorLuis Gil <lgilbernabe@apache.org>
Wed, 2 Nov 2016 22:37:21 +0000 (22:37 +0000)
committerLuis Gil <lgilbernabe@apache.org>
Wed, 2 Nov 2016 22:37:21 +0000 (22:37 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1767795 13f79535-47bb-0310-9956-ffa450edef68

docs/manual/howto/cgi.html.es [new file with mode: 0644]

diff --git a/docs/manual/howto/cgi.html.es b/docs/manual/howto/cgi.html.es
new file mode 100644 (file)
index 0000000..576e47a
--- /dev/null
@@ -0,0 +1,615 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>\r
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml" lang="es" xml:lang="es"><head>\r
+<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />\r
+<!--
+        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+              This file is generated from xml source: DO NOT EDIT
+        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+      -->\r
+<title>Tutorial de Apache: Contenido Dinámico con CGI - Servidor HTTP Apache Versión 2.5</title>\r
+<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />\r
+<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />\r
+<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />\r
+<script src="../style/scripts/prettify.min.js" type="text/javascript">\r
+</script>\r
+\r
+<link href="../images/favicon.ico" rel="shortcut icon" /></head>\r
+<body id="manual-page"><div id="page-header">\r
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/quickreference.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p>\r
+<p class="apache">Versión 2.5 del Servidor HTTP Apache</p>\r
+<img alt="" src="../images/feather.png" /></div>\r
+<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>\r
+<div id="path">\r
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">Servidor HTTP</a> &gt; <a href="http://httpd.apache.org/docs/">Documentación</a> &gt; <a href="../">Versión 2.5</a> &gt; <a href="./">How-To / Tutoriales</a></div><div id="page-content"><div id="preamble"><h1>Tutorial de Apache: Contenido Dinámico con CGI</h1>\r
+<div class="toplang">\r
+<p><span>Idiomas disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |\r
+<a href="../es/howto/cgi.html" title="Español">&nbsp;es&nbsp;</a> |\r
+<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |\r
+<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |\r
+<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>\r
+</div>\r
+</div>\r
+<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introducción</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#configuring">Configurando Apache para permitir CGI</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#writing">Escribiendo un programa CGI</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">¡Pero todavía no funciona!</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#behindscenes">¿Qué ocurre entre bastidores?</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#libraries">Módulos/librerías CGI</a></li>\r
+<li><img alt="" src="../images/down.gif" /> <a href="#moreinfo">Para más información</a></li>\r
+</ul><h3>Consulte también</h3><ul class="seealso"><li><a href="#comments_section">Comentarios</a></li></ul></div>\r
+<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="intro" id="intro">Introducción</a></h2>\r
+           \r
+               <table class="related"><tr><th>Módulos Relacionados</th><th>Directivas Relacionadas</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_cgid.html">mod_cgid</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li></ul></td></tr></table>\r
+\r
+       <p>CGI (Common Gateway Interface) es un método por el cual\r
+               un servidor web puede interactuar con programas externos de \r
+               generación de contenido, a ellos nos referimos comúnmente como \r
+               programas CGI o scripts CGI. Es el método más común y sencillo de\r
+        mostrar contenido dinámico en su sitio web. Este documento es una \r
+               introducción para configurar CGI en su servidor web Apache, y de\r
+               iniciación para escribir programas CGI.</p>\r
+       </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="configuring" id="configuring">Configurando Apache para permitir CGI</a></h2>\r
+               \r
+\r
+        <p>Para conseguir que sus programas CGI funcionen correctamente,\r
+           deberá configurar Apache para que permita la ejecución de CGI. Hay\r
+           distintas formas de hacerlo.</p>\r
+\r
+        <div class="warning">Nota: Si Apache ha sido compilado con soporte\r
+        de módulos compartidos, necesitará que el módulo de CGI esté cargado;\r
+        en su <code>httpd.conf</code> tiene que asegurarse de que la directiva\r
+        <code class="directive"><a href="../mod/mod_so.html#loadmodule">LoadModule</a></code>\r
+        no ha sido comentada. Una directiva configurada correctamente sería así:\r
+            \r
+            <pre class="prettyprint lang-config">LoadModule cgid_module modules/mod_cgid.so</pre>\r
+\r
+\r
+        En Windows, o si usa un mpm que no es multihilo, como prefork, una \r
+        directiva configurada correctamente podría definirse así: \r
+\r
+        <pre class="prettyprint lang-config">LoadModule cgi_module modules/mod_cgi.so</pre>\r
+</div>\r
+\r
+        <h3><a name="scriptalias" id="scriptalias">ScriptAlias</a></h3>\r
+            \r
+\r
+            <p>La directiva\r
+            <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>\r
+            indica a Apache que un directorio se ha configurado específicamente\r
+            para programas CGI. Apache asumirá que cada fichero en este \r
+            directorio es un programa CGI, e intentará ejecutarlos cuando un\r
+            cliente solicita este recurso.</p>\r
+        \r
+            <p>La directiva \r
+            <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> se puede \r
+            definir así:</p>\r
+\r
+            <pre class="prettyprint lang-config">ScriptAlias "/cgi-bin/" "/usr/local/apache2/cgi-bin/"</pre>\r
+\r
+        \r
+            <p>El ejemplo que se muestra es de un archivo de configuración\r
+            <code>httpd.conf</code> por defecto si usted instaló Apache\r
+            en la ubicación por defecto. La directiva\r
+            <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> es muy \r
+            parecida a la directiva <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code>,\r
+            ésta define un prefijo de URL que se enlaza a un directorio \r
+            en particular. <code class="directive">Alias</code> y\r
+            <code class="directive">ScriptAlias</code> se usan generalmente para \r
+            directorios que se encuentran fuera del directorio \r
+            <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>. La diferencia\r
+            entre <code class="directive">Alias</code> y <code class="directive">ScriptAlias</code>\r
+            es que en <code class="directive">ScriptAlias</code> cualquier elemento\r
+            debajo de ese prefijo de URL será considerado un programa CGI. Así, \r
+            el ejemplo de más arriba le indica a Apache que\r
+            cualquier solicitud para un recurso que comience con \r
+            <code>/cgi-bin/</code> debería servirse desde el directorio\r
+            <code>/usr/local/apache2/cgi-bin/</code>, y debería tratarse como un\r
+            programa CGI.</p>\r
+\r
+            <p>Por ejemplo, si se solicita la URL\r
+            <code>http://www.example.com/cgi-bin/test.pl</code>,\r
+            Apache intentará ejecutar el archivo\r
+            <code>/usr/local/apache2/cgi-bin/test.pl</code> y dar\r
+            el resultado. Por supuesto el archivo debe existir y ser ejecutable, \r
+            y dar el resultado de una manera específica o Apache devolverá\r
+            un mensaje de error.</p>\r
+        \r
+\r
+        <h3><a name="nonscriptalias" id="nonscriptalias">CGI fuera de directorios ScriptAlias</a></h3>\r
+            \r
+\r
+            <p>Los programas CGI habitualmente se restringen a los directorios de\r
+            <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code> por razones de\r
+            seguridad. De esta manera, los administradores pueden controlar de una\r
+            manera más segura quien puede ejecutar programas CGI. Aun así, si no\r
+            se toman suficientes precauciones, no hay ninguna razón por la que\r
+            programas CGI no se puedan ejecutar desde directorios seleccionados de \r
+            manera arbitraria. Por ejemplo, quizás quiera permitir que usuarios del\r
+            sistema tengan contenido web en sus directorios home con la directiva\r
+            <code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code>. Si quieren \r
+            tener sus propios programas CGI, pero no tienen acceso al directorio \r
+            principal <code>cgi-bin</code>, necesitarán ser capaces de \r
+            ejecutar sus scripts CGI en algún otro sitio.</p>\r
+      \r
+            <p>Hay dos pasos a seguir para permitir la ejecución CGI en directorios\r
+            seleccionados de manera arbitraria. Primero, el handler \r
+            <code>cgi-script</code> debe estar activado usando la directiva \r
+            <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> o la directiva \r
+            <code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code>. Segundo, el parámetro\r
+            <code>ExecCGI</code> debe estar definido en la directiva\r
+            <code class="directive"><a href="../mod/core.html#options">Options</a></code>.</p>\r
+        \r
+\r
+        <h3><a name="options" id="options">Usando Options de manera explícita para permitir ejecución de \r
+            CGI</a></h3>\r
+            \r
+\r
+            <p>Puede usar la directiva \r
+            <code class="directive"><a href="../mod/core.html#options">Options</a></code>, en el archivo de \r
+            configuración principal para especificar que se permite la ejecución \r
+            de CGI en un directorio en particular:</p>\r
+\r
+            <pre class="prettyprint lang-config">&lt;Directory "/usr/local/apache2/htdocs/somedir"&gt;\r
+    Options +ExecCGI\r
+&lt;/Directory&gt;</pre>\r
+\r
+            \r
+            <p>Esta directiva de aquí arriba le indica a Apache que debe \r
+            permitir la ejecución de archivos CGI. También necesitará indicarle \r
+            al servidor que los archivos son archivos CGI. La directiva \r
+            <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> le indica al \r
+            servidor que debe tratar a todos los archivos con la extensión \r
+            <code>cgi</code> o <code>pl</code> como programas CGI:</p>\r
+\r
+            <pre class="prettyprint lang-config">AddHandler cgi-script .cgi .pl</pre>\r
+\r
+        \r
+\r
+        <h3><a name="htaccess" id="htaccess">Ficheros .htaccess</a></h3>\r
+            \r
+\r
+            <p>El <a href="htaccess.html">tutorial <code>.htaccess</code></a>\r
+            enseña como activar programas CGI si no tienes acceso a \r
+            <code>httpd.conf</code>.</p>\r
+        \r
+\r
+        <h3><a name="userdir" id="userdir">Directorios de Usuario</a></h3>\r
+            \r
+\r
+            <p>Para permitir la ejecución de programas CGI para cualquier \r
+            archivo que acabe en <code>.cgi</code> en directorios de usuario, \r
+            puedes usar la siguiente configuración:</p>\r
+\r
+            <pre class="prettyprint lang-config">&lt;Directory "/home/*/public_html"&gt;\r
+    Options +ExecCGI\r
+    AddHandler cgi-script .cgi\r
+&lt;/Directory&gt;</pre>\r
+\r
+\r
+            <p>Si quiere designar un subdirectorio <code>cgi-bin</code> dentro \r
+            de un directorio de usuario en el que todos los ficheros serán \r
+            tratados como un programa CGI, puede usar lo siguiente:</p>\r
+\r
+            <pre class="prettyprint lang-config">&lt;Directory "/home/*/public_html/cgi-bin"&gt;\r
+    Options ExecCGI\r
+    SetHandler cgi-script\r
+&lt;/Directory&gt;</pre>\r
+\r
+        \r
+    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="writing" id="writing">Escribiendo un programa CGI</a></h2>\r
+        \r
+\r
+        <p>Hay dos diferencias principales entre programación ``regular'' y \r
+        programación en CGI.</p>\r
+\r
+        <p>Primera, el resultado al completo de tu programa CGI debe estar \r
+        precedido de una cabecera <a class="glossarylink" href="../glossary.html#mime-type" title="ver glosario">MIME-type</a>. Esta\r
+        cabecera HTTP le indica al cliente que tipo de contenido está\r
+        recibiendo. La mayor parte de las veces, ésto será algo como:</p>\r
+\r
+        <div class="example"><p><code>\r
+            Content-type: text/html\r
+        </code></p></div>\r
+\r
+        <p>Segunda, el resultado debe estar en formato HTML, o cualquier \r
+        otro formato que su navegador sea capaz de mostrar. La mayor\r
+        parte de las veces, será HTML, pero otras escribirá un programa\r
+        CGI que devuelve una imagen gif, u otro contenido no-HTML.</p>\r
+\r
+        <p>Aparte de estas dos cosas, escribir un programa en CGI se \r
+        parecerá bastante a cualquier otro programa que vaya a escribir.\r
+        </p>\r
+\r
+\r
+        <h3><a name="firstcgi" id="firstcgi">Su primer programa CGI</a></h3>\r
+            \r
+\r
+            <p>A continuación podrá ver un ejemplo de programa CGI que muestra\r
+            una línea de texto en su navegador. Escriba lo siguiente, \r
+            guárdelo en un archivo con el nombre <code>first.pl</code>, y \r
+            póngalo en su directorio <code>cgi-bin</code>.</p>\r
+\r
+            <pre class="prettyprint lang-perl">#!/usr/bin/perl\r
+print "Content-type: text/html\n\n";\r
+print "Hola, Mundo.";</pre>\r
+\r
+\r
+            <p>Incluso si Perl no le resulta familiar, podrá ver lo que está\r
+            ocurriendo aquí. La primera línea le dice a Apache (o a\r
+            cualquier shell en la que se esté ejecutando) que este programa\r
+            puede ejecutarse con el intérprete en la ubicación\r
+            <code>/usr/bin/perl</code>. La segunda línea imprime la\r
+            declaración de Content-Type que mencionamos antes, seguida de \r
+            dos pares de retornos de carro. Esto pone una línea en blanco \r
+            después de la cabecera para indicar el final de las cabeceras\r
+            HTTP, y el comienzo del cuerpo del contenido. La tercera \r
+            imprime la cadena de caracteres "Hola, Mundo.". Y ese es el \r
+            final del programa.</p>\r
+\r
+            <p>Si lo abre con su navegador favorito y le dice que solicite la \r
+            dirección</p>\r
+\r
+            <div class="example"><p><code>\r
+                http://www.example.com/cgi-bin/first.pl\r
+            </code></p></div>\r
+\r
+            <p>o donde quiera que pusiera el archivo, verá una línea\r
+            <code>Hola, Mundo.</code> aparecerán la ventana del navegador. No es \r
+            muy emocionante, pero una vez que consiga que funcione podrá hacer \r
+            lo mismo con casi cualquier programa.</p>\r
+        \r
+    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="troubleshoot" id="troubleshoot">¡Pero todavía no funciona!</a></h2>\r
+        \r
+\r
+        <p>Hay 4 cosas básicas que puede llegar a ver en su navegador cuando\r
+        intenta acceder a un programa CGI desde la web:</p>\r
+\r
+        <dl>\r
+            <dt>El resultado del programa CGI</dt>\r
+            <dd>¡Genial! Esto indica que todo funcionó correctamente. Si el\r
+            resultado es correcto, pero el navegador no lo procesa\r
+            correctamente, asegúrese de que tiene especificado \r
+            correctamente el <code>Content-Type</code> en su programa \r
+            CGI.</dd>\r
+\r
+            <dt>El código fuente de su programa CGI o un mensaje del tipo \r
+            "POST Method Not Allowed".</dt>\r
+\r
+            <dd>Eso significa que no ha configurado Apache de manera\r
+            apropiada para interpretar su programa CGI. Relea la sección\r
+            de <a href="#configuring">Configurando Apache</a> e intente\r
+            encontrar qué le falta.</dd>\r
+\r
+            <dt>Un mensaje que empieza con "Forbidden"</dt>\r
+            <dd>Eso significa que hay un problema de permisos. Compruebe el\r
+            <a href="#errorlogs">Log de Errores de Apache</a> y la\r
+            sección de más abajo de <a href="#permissions">Permisos de\r
+            Fichero</a>.</dd>\r
+\r
+            <dt>Un mensaje indicando "Internal Server Error"</dt>\r
+            <dd>Si comprueba el <a href="#errorlogs">Log de errores de\r
+            Apache</a>, probablemente encontrará que indica "Premature \r
+            end of script headers", posiblemente acompañado de otro \r
+            mensaje de error generado por su programa CGI. En este caso, \r
+            querrá comprobar cada una de las secciones de más adelante \r
+            para ver qué impide que su programa CGI genere las cabeceras \r
+            HTTP adecuadas.</dd>\r
+            </dl>\r
+\r
+        <h3><a name="permissions" id="permissions">Permisos de Fichero</a></h3>\r
+            \r
+\r
+            <p>Recuerde que el servidor no se ejecuta con su usuario. Es decir,\r
+            cuando el servidor arranca, está funcionando con un usuario sin\r
+            privilegios, generalmente el usuario <code>nobody</code>, o\r
+            <code>www-data</code>, así que necesitará permisos extra para\r
+            ejecutar los archivos de los que usted es dueño. Generalmente, \r
+            el método para dar permisos suficientes para que se pueda \r
+            ejecutar con <code>nobody</code> es dar permisos de ejecución a \r
+            todo el mundo en el fichero:</p>\r
+\r
+            <div class="example"><p><code>\r
+                chmod a+x first.pl\r
+            </code></p></div>\r
+\r
+            <p>Además, si su programa lee desde o escribe a cualquier otro/s\r
+            archivo/s, esos archivos necesitarán tener los permisos correctos\r
+            para permitir esas acciones.</p>\r
+\r
+        \r
+\r
+        <h3><a name="pathinformation" id="pathinformation">Información de Ruta y Entorno</a></h3>\r
+            \r
+\r
+            <p>Cuando ejecuta un programa desde la línea de comandos, usted tiene\r
+            cierta información que se le pasa a la shell sin que usted se\r
+            percate de ello. Por ejemplo, usted tiene un <code>PATH</code>,\r
+            que le indica a la shell dónde debe buscar archivos a los que usted\r
+            hace referencia.</p>\r
+\r
+            <p>Cuando un programa se ejecuta a través del servidor web como un\r
+            programa CGI, puede que no tenga el mismo <code>PATH</code>. \r
+            Cualquier programa que invoque desde su programa CGI (como por\r
+            ejemplo <code>sendmail</code>) necesitará que se le indique la\r
+            ruta absoluta, así la shell puede encontrarlos cuando intenta \r
+            ejecutar su programa CGI.</p>\r
+\r
+            <p>Una manifestación común de esto es la ruta del intérprete del \r
+            script (a menudo <code>perl</code>) indicado en la primera línea\r
+            de su programa CGI, que parecerá algo como:</p>\r
+\r
+            <pre class="prettyprint lang-perl">#!/usr/bin/perl</pre>\r
+\r
+\r
+            <p>Asegúrese de que éste es de hecho el path de su intérprete.</p>\r
+            <div class="warning">\r
+            Cuando edita scripts CGI en Windows, los caracteres de retorno de\r
+            carro podrían añadirse a la línea donde se especifica el intérprete. \r
+            Asegúrese de que los archivos se transfieren al servidor en modo \r
+            ASCII. Fallar en esto puede acabar con avisos del tipo "Command not \r
+            found" del Sistema Operativo, debido a que éste no reconoce los \r
+            caracteres de final de línea interpretados como parte del nombre\r
+            de fichero del intérprete.\r
+            </div>\r
+        \r
+\r
+        <h3><a name="missingenv" id="missingenv">Faltan Variables de Entorno</a></h3>\r
+            \r
+\r
+            <p>Si su programa CGI depende de <a href="#env">variables de entorno</a> no estándar, necesitará\r
+            asegurarse de que Apache pasa esas variables.</p>\r
+\r
+            <p>Cuando no encuentra ciertas cabeceras HTTP del entorno, asegúrese \r
+            de que están formateadas según el \r
+            <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, \r
+            sección 4.2: Nombres de Cabeceras deben empezar con una letra, \r
+            seguida solo de letras, números o guión. Cualquier cabecera \r
+            que no cumpla esta regla será ignorada de manera silenciosa.</p>\r
+\r
+        \r
+\r
+        <h3><a name="syntaxerrors" id="syntaxerrors">Errores de Programa</a></h3>\r
+            \r
+\r
+            <p>La mayor parte de las veces cuando un programa CGI falla, es por un \r
+            problema en el programa mismo. Esto ocurre generalmente cuando se \r
+            maneja bien con "esto del CGI", y ya no comete los dos errores\r
+            mencionados más arriba. Lo primero que hay que hacer es asegurarse\r
+            de que su programa se ejecuta correctamente en línea de comandos \r
+            antes de probarlo a través del servidor web.  Por ejemplo, \r
+            intente:</p>\r
+\r
+            <div class="example"><p><code>\r
+                cd /usr/local/apache2/cgi-bin<br />\r
+                ./first.pl\r
+            </code></p></div>\r
+\r
+            <p>(No llame al intérprete de <code>perl</code>. La consola y Apache \r
+            tienen que poder encontrar el intérprete usando línea \r
+            <a href="#pathinformation">línea de información</a> en la primera \r
+            línea del script.)</p>\r
+\r
+            <p>Lo primero que debe ver escrito por su programa es un conjunto de \r
+            cabeceras HTTP, incluyendo el <code>Content-Type</code>,\r
+            seguido de una línea en blanco.  Si ve alguna otra cosa, Apache\r
+            devolverá el error <code>Premature end of script headers</code> si\r
+            intenta lanzar el script en el servidor web. Vea \r
+            <a href="#writing">Escribiendo un programa CGI</a> más arriba para\r
+            más detalle.</p>\r
+        \r
+\r
+        <h3><a name="errorlogs" id="errorlogs">Log de Errores</a></h3>\r
+            \r
+\r
+            <p>El log de errores es su amigo. Cualquier cosa que vaya mal generará \r
+            un mensaje en el log de errores. Debería mirar siempre ahí primero. \r
+            Si el lugar donde está alojando su sitio web no permite que acceda\r
+            al log de errores, probablemente debería alojarlo en otro sitio.\r
+            Aprenda a leer el log de errores y se dará cuenta de que enseguida\r
+            averiguará el motivo del error y lo solucionará rápidamente.</p>\r
+        \r
+\r
+        <h3><a name="suexec" id="suexec">Suexec</a></h3>\r
+            \r
+\r
+            <p>El programa de soporte <a href="../suexec.html">suexec</a> permite\r
+            que programas CGI se ejecuten con permisos de usuario distintos,\r
+            dependiendo del virtualhost o el directorio home donde se \r
+            encuentren. Suexec tiene una comprobación de permisos muy estricta, \r
+            y cualquier fallo en esa comprobación dará como resultado un error\r
+            con el mensaje <code>Premature end of script headers</code>.</p>\r
+\r
+            <p>Para comprobar si está usando Suexec, ejecute \r
+            <code>apachectl -V</code> y compruebe la ubicación de \r
+            <code>SUEXEC_BIN</code>. Si Apache encuentra un binario \r
+            <code class="program"><a href="../programs/suexec.html">suexec</a></code> al arrancar, suexec se activará.</p>\r
+\r
+            <p>A menos que comprenda suxec perfectamente, no debería usarlo.\r
+            Para desactivar suexec, basta con eliminar el binario \r
+            <code class="program"><a href="../programs/suexec.html">suexec</a></code> al que apunta <code>SUEXEC_BIN</code> y \r
+            reiniciar el servidor. Si después de leer sobre \r
+            <a href="../suexec.html">suexec</a> todavía quiere usarlo, entonces\r
+            ejecute <code>suexec -V</code> para encontrar la ubicación del \r
+            fichero log de suexec, y use ese log para encontrar que política no\r
+            está cumpliendo.</p>\r
+        \r
+    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="behindscenes" id="behindscenes">¿Qué ocurre entre bastidores?</a></h2>\r
+        \r
+\r
+        <p>En cuanto tenga conocimiento avanzado de programación CGI, le será \r
+        útil comprender más de lo que ocurre entre bastidores. \r
+        Específicamente, cómo el navegador y el servidor se comunican el uno\r
+        con el otro. Porque aunque esté muy bien escribir un programa que \r
+        diga "Hola, Mundo.", no tiene una gran utilidad.</p>\r
+\r
+        <h3><a name="env" id="env">Variables de Entorno</a></h3>\r
+            \r
+\r
+            <p>Las variables de entorno son valores que están ahí cuando \r
+            usa el ordenador. Son cosas útiles como el path (donde su ordenador\r
+            busca el archivo específico que se lanza cuando usted escribe un \r
+            comando), su nombre de usuario, el tipo de terminal que usa, etc. \r
+            Para una lista completa de la variables de entorno normales que se \r
+            se usan en su día a día escriba <code>env</code> en la línea de \r
+            comandos.</p>\r
+\r
+            <p>Durante la transacción CGI, el servidor y el navegador también \r
+            configuran variables de entorno, y así pueden comunicarse entre \r
+            ellos. Cosas como el tipo de navegador (Netscape, IE, Lynx), el tipo\r
+            de servidor (Apache, IIS, WebSite), el nombre del programa CGI que\r
+            se está ejecutando, etc.</p>\r
+\r
+            <p>Estas variables están disponibles para el programador de CGI, y son \r
+            la mitad de la historia de la comunicación cliente-servidor. La \r
+            lista completa de las variables necesarias se encuentra en \r
+            <a href="http://www.ietf.org/rfc/rfc3875">el RFC de Common Gateway\r
+            Interface</a>.</p>\r
+\r
+            <p>Este sencillo programa CGI en Perl mostrará todas las variables \r
+            de entorno que se están pasando entre el cliente y el navegador. Dos\r
+            programas similares están incluidos en el directorio \r
+            <code>cgi-bin</code> de la distribución de Apache. Tenga en cuenta\r
+            que algunas variables son necesarias mientras que otras son \r
+            opcionales, así que es posible que vea algunas variables que no \r
+            están en la lista oficial. Adicionalmente, Apache aporta distintas\r
+            maneras diferentes para que pueda\r
+            <a href="../env.html">añadir sus variables de entorno</a> a las \r
+            básicas que se proveen por defecto.</p>\r
+\r
+            <pre class="prettyprint lang-perl">#!/usr/bin/perl\r
+use strict;\r
+use warnings;\r
+\r
+print "Content-type: text/html\n\n";\r
+          \r
+foreach my $key (keys %ENV) {\r
+    print "$key --&gt; $ENV{$key}&lt;br&gt;";\r
+}</pre>\r
+\r
+        \r
+\r
+        <h3><a name="stdin" id="stdin">STDIN y STDOUT</a></h3>\r
+            \r
+\r
+            <p>Otra comunicación entre el servidor y el cliente ocurre en la \r
+            entrada estándar (<code>STDIN</code>) y la salida estándar \r
+            (<code>STDOUT</code>). En el contexto normal de cada día, \r
+            <code>STDIN</code> es la entrada con el teclado, o un fichero que se \r
+            le da a un programa para que actúe sobre él, y <code>STDOUT</code>\r
+            generalmente es la consola o la pantalla.</p>\r
+\r
+            <p>Cuando hace <code>POST</code> con un formulario de web a un programa \r
+            CGI, los datos en ese formulario se empaquetan en un formato especial\r
+            que se entrega a su programa CGI en el <code>STDIN</code>.\r
+            Entonces el programa puede procesar la información como si le llegara\r
+            desde el teclado, o desde un fichero.</p>\r
+\r
+            <p>El "formato especial" es muy sencillo. Un nombre de campo y su \r
+            valor se asocian juntos con el signo igual (=), y pares de valores \r
+            se asocian juntos con el ampersand ó et en español (&amp;). \r
+            Caracteres inconvenientes como los espacios, ampersands y signos de \r
+            igual, se convierten en su equivalente hexadecimal para no impidan \r
+            el funcionamiento correcto del programa. La cadena de datos al \r
+            completo será algo como:</p>\r
+\r
+  <div class="example"><p><code>\r
+        name=Rich%20Bowen&amp;city=Lexington&amp;state=KY&amp;sidekick=Squirrel%20Monkey\r
+  </code></p></div>\r
+\r
+            <p>A veces tendrá este tipo de cadena de caracteres al final de una \r
+            URL. Cuando esto ocurre, el servidor pone esa cadena en una variable \r
+            de entorno que se llama <code>QUERY_STRING</code>. Esto se llama \r
+            solicitud <code>GET</code>. Su formulario HTML especifica si se usa \r
+            un <code>GET</code> o un <code>POST</code> para entregar la \r
+            información, configurando el atributo <code>METHOD</code> en la \r
+            etiqueta <code>FORM</code>.</p>\r
+\r
+            <p>Su programa es el responsable de convertir esa cadena de \r
+            caracteres en información útil. Afortunadamente, hay librerías y \r
+            módulos disponibles que ayudan a procesar la información, así como a \r
+            gestionar los distintos aspectos de su programa CGI.</p>\r
+        \r
+    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="libraries" id="libraries">Módulos/librerías CGI</a></h2>\r
+        \r
+\r
+        <p>Cuando escribe programas CGI, debería considerar usar una librería de\r
+        código, o módulo, para hacer todo el trabajo más arduo por usted.\r
+        Esto lleva a tener menos errores y un desarrollo de código más \r
+        rápido.</p>\r
+\r
+        <p>Si está escribiendo un programa CGI en Perl, existen módulos \r
+        disponibles en <a href="http://www.cpan.org/">CPAN</a>. El módulo más\r
+        conocido para este propósito es <code>CGI.pm</code>. Quizás quiera\r
+        considerar <code>CGI::Lite</code>, que implementa una funcionalidad \r
+        mínima, que es todo lo que se necesita en la mayoría de los programas.</p>\r
+\r
+        <p>Si está escribiendo programas CGI en C, hay varidad de opciones. Una\r
+        de estas es la librería <code>CGIC</code>, de\r
+        <a href="http://www.boutell.com/cgic/">http://www.boutell.com/cgic/</a>.\r
+        </p>\r
+    </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>\r
+<div class="section">\r
+<h2><a name="moreinfo" id="moreinfo">Para más información</a></h2>\r
+        \r
+\r
+        <p>La especificación actual de CGI está disponible en el\r
+        <a href="http://www.ietf.org/rfc/rfc3875">RFC de Common Gateway\r
+        Interface</a>.</p>\r
+\r
+        <p>Cuando envíe una pregunta sobre un problema de CGI, o bien a una \r
+        lista de correo, o a un grupo de noticias, asegúrese de que facilita suficiente\r
+        información de lo que ha ocurrido, de lo que espera que ocurra, y de \r
+        lo que está ocurriendo en su lugar que es diferente, el servidor que \r
+        está ejecutando, en qué lenguaje CGI está hecho su programa, y si es\r
+        posible, el código que falla. Esto hará encontrar el problema mucho más \r
+        fácil.</p>\r
+\r
+        <p>Tenga en cuenta que las preguntas sobre problemas CGI \r
+        <strong>nunca</strong> deberían enviarse a la base de datos de bugs de\r
+        bugs de Apache a menos que esté seguro de haber encontrado un \r
+        problema en el código fuente de Apache.</p>\r
+    </div></div>\r
+<div class="bottomlang">\r
+<p><span>Idiomas disponibles: </span><a href="../en/howto/cgi.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |\r
+<a href="../es/howto/cgi.html" title="Español">&nbsp;es&nbsp;</a> |\r
+<a href="../fr/howto/cgi.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |\r
+<a href="../ja/howto/cgi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |\r
+<a href="../ko/howto/cgi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>\r
+</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comentarios</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>\r
+<script type="text/javascript"><!--//--><![CDATA[//><!--
+var comments_shortname = 'httpd';
+var comments_identifier = 'http://httpd.apache.org/docs/trunk/howto/cgi.html';
+(function(w, d) {
+    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
+        d.write('<div id="comments_thread"><\/div>');
+        var s = d.createElement('script');
+        s.type = 'text/javascript';
+        s.async = true;
+        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
+        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
+    }
+    else {
+        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
+    }
+})(window, document);
+//--><!]]></script></div><div id="footer">\r
+<p class="apache">Copyright 2016 The Apache Software Foundation.<br />Licencia bajo los términos de la <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>\r
+<p class="menu"><a href="../mod/">Módulos</a> | <a href="../mod/quickreference.html">Directivas</a> | <a href="http://wiki.apache.org/httpd/FAQ">Preguntas Frecuentes</a> | <a href="../glossary.html">Glosario</a> | <a href="../sitemap.html">Mapa del sitio web</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
+if (typeof(prettyPrint) !== 'undefined') {
+    prettyPrint();
+}
+//--><!]]></script>\r
+</body></html>
\ No newline at end of file