{"id":10571,"date":"2017-10-25T07:56:12","date_gmt":"2017-10-25T07:56:12","guid":{"rendered":"http:\/\/localhost\/datacraft2023\/internet-cgi\/"},"modified":"2022-08-18T07:37:36","modified_gmt":"2022-08-18T10:37:36","slug":"internet-cgi","status":"publish","type":"page","link":"http:\/\/localhost\/datacraft2023\/internet-cgi\/","title":{"rendered":"Internet: \u00bfqu\u00e9 son los scripts CGI?"},"content":{"rendered":"

\n

\u00a0Volver al Indice –\u00a0Internet y Tutoriales de Dise\u00f1o Web<\/a><\/h2>\n

\"Internet:<\/p>\n

Por Alejandro Franco –\u00a0cont\u00e1ctenos<\/a><\/h2>\n

(C)ommon (G)ateway (I)nterface.<\/h2>\n

CGI no es m\u00e1s que una forma de COMUNICAR informaci\u00f3n entre un servidor de web y un programa EJECUTABLE NATIVO que est\u00e1 en la misma m\u00e1quina que dicho servidor. Comunicar informaci\u00f3n en ambos sentidos (par\u00e1metros y resultados). No es un lenguaje, s\u00f3lo una forma de pasar informaci\u00f3n. Lo mismo que la l\u00ednea de comandos del sistema operativo. De ah\u00ed la “interfaz”. Un programa CGI puede estar hecho en CUALQUIER COSA siempre que:<\/p>\n

    \n
  • 1) Se ejecute en la m\u00e1quina del servidor<\/li>\n
  • 2) Sea capaz de leer variables de entorno y la entrada est\u00e1ndar del sistema operativo (concepto cuasi universal)<\/li>\n
  • 3) Sea capaz de escribir en la salida est\u00e1ndar del sistema operativo<\/li>\n
  • 4) El servidor sea capaz de ejecutarlo (ej: en NT quiz\u00e1s haya problemas para ejecutar un CGI gr\u00e1fico)<\/li>\n<\/ul>\n

    Para crear el CGI se puede usar Visual Basic, Perl, Rexx, Clipper, Visual C, Borland C, Delphi, etc…
    \nUna vez creado el CGI en tu ordenador, lo pasas al servidor y lo compilas all\u00ed.
    \nEl hecho de que CGI est\u00e9 universalmente soportado ayuda a que el fuente de un programa CGI pueda recompilarse y funcionar en cualquier entorno. No obstante, eso depender\u00e1 mucho de qu\u00e9 lenguaje se use para desarrollar el programa. Por ejemplo, ISAPI s\u00f3lo funciona[r\u00e1] en Windows.<\/p>\n

    1.1 Como crear un CGI y ponerlo en tu p\u00e1gina<\/h2>\n

    Voy a describir aqu\u00ed los pasos que uso yo para compilar, copiar y ejecutar un CGI en C y en PERL. Seg\u00fan el proveedor de hosting, puede que los pasos a seguir sean diferentes pero no deber\u00edan variar mucho. Si tienes alg\u00fan problema, consulta con tu proveedor.<\/p>\n

    1.2.1 Si usas C…<\/h2>\n

    1.2.1.1 Compilando tu CGI<\/strong><\/p>\n

    Para compilar el fichero en el servidor, hay que pedir amablemente a los proveedores de hosting que nos den una cuenta personal en users para compilar CGIs. Una vez obtenido el permiso, podemos seguir con el ejemplo. Tenemos el fichero ‘prueba.c’ en el directorio c:pruebas.
    \nContenido del fichero ‘prueba.c’:<\/p>\n

    #include<stdio.h><\/p>\n

    main()
    \n{
    \nprintf(“Content-type: text\/htmlnn”);
    \nprintf(“<html><body>\u00a1Esto funciona!<\/body><\/html>”);
    \n}<\/p>\n

    Este fichero imprime crea una p\u00e1gina web en la que pone:
    \n\u00a1Esto funciona!<\/p>\n

    Fijaros que en un CGI lo primero que hay que poner es la cabecera, en este caso : Content-type: text\/htmlnn
    \nEl ‘n’ es un retorno de linea. Siempre debe de haber 2.<\/p>\n

    Ahora nos conectamos con un programa de FTP (recomiendo el FTP Cute) al directorio que se nos ha asignado en users.
    \nCopiamos el fichero ‘prueba.c’ en formato ASCII al directorio de users que se nos haya asignado.<\/p>\n

    Una vez copiado y sin cerrar el FTP, abrimos el Telnet. El Telnet lo puedes encontrar en tu disco duro en C:WINDOWS si usas Windows 95. Una vez ejecutado, nos conectamos a users.<\/p>\n

    Despu\u00e9s de pasar por la petici\u00f3n de clave, ponemos ‘dir’ y pulsamos return.
    \nSi lo hemos hecho todo bien, deber\u00edamos de ver nuestro fichero ‘prueba.c’ en el directorio.
    \nAhora tecleamos ‘gcc -o prueba.cgi prueba.c -s’ para compilar el fichero.<\/p>\n

    ‘gcc’ invoca al compilador de ficheros C<\/p>\n

    ‘-o prueba.cgi’ le dice el nombre del fichero a crear. Si nos olvidamos de este par\u00e1metro, obtendremos un fichero llamado ‘a.out’. Si este es el caso, podemos teclear ‘mv a.out prueba.cgi’ para cambiarle el nombre.
    \n‘prueba.c’ es el nombre del fichero que vamos a compilar.
    \n‘-s’ indica al compilador que reduzca todo lo posible el fichero de salida.<\/p>\n

    Despu\u00e9s de la compilaci\u00f3n y si tecleamos dir, deber\u00edamos ver 2 ficheros: ‘prueba.c’ y ‘prueba.cgi’. Salimos del Telnet.<\/p>\n

    1.2.1.2 Copiando el CGI a tu p\u00e1gina<\/strong><\/p>\n

    Debemos de copiar el fichero ‘prueba.cgi’ al directorio de nuestra p\u00e1gina web. Si todav\u00eda tenemos abierta la sesi\u00f3n FTP s\u00f3lo hay que pulsar el bot\u00f3n actualizar sesi\u00f3n.
    \nAhora copiamos el fichero ‘prueba.cgi’ a nuestro disco duro. Podemos cerrar despu\u00e9s la sesi\u00f3n FTP.<\/p>\n

    Abrimos otra sesi\u00f3n FTP, esta vez hacia el directorio de nuestra p\u00e1gina web y copiamos el fichero ‘prueba.cgi’ all\u00ed.<\/p>\n

    Ya tenemos el CGI en nuestra p\u00e1gina web. Si ahora vamos a un navegador y tecleamos la direcci\u00f3n donde se encuentra el CGI lo ejecutaremos. Ejemplo:
    \nhttp:\/\/www.jet.es\/gregorio\/prueba.cgi<\/p>\n

    Sin embargo recibiremos un molesto error. Tranquilos, no pasa nada. Ahora lo solucionamos.<\/p>\n

    1.2.1.3 Darle permiso de ejecuci\u00f3n al CGI para ejecutarlo<\/strong><\/p>\n

    Los sistemas UNIX tiene activada una opci\u00f3n por defecto que anula la posibilidad de ejecuci\u00f3n de cualquier cosa a no ser que le dado a nuestro fichero un permiso especial. Por eso antes recib\u00edamos el molesto mensaje de error.<\/p>\n

    Para darle permiso, se puede usar el programa de FTP. En el caso del FTP Cute, una vez vemos el fichero al que queremos darle el permiso de ejecuci\u00f3n, clickeamos en el con el bot\u00f3n derecho del rat\u00f3n y seleccionamos ‘File Attributes’ del men\u00fa emergente.<\/p>\n

    Ahora hay que darle permiso de lectura o lectura\/escritura a nuestro CGI ‘prueba.cgi’
    \nDeber\u00edamos recibir un mensaje advirti\u00e9ndonos que hemos cambiado los atributos de un fichero.<\/p>\n

    Ahora si ejecutamos el CGI desde nuestro navegador, deber\u00edamos ver el esperado mensaje “\u00a1Esto funciona!”.<\/p>\n

    1.2.2 Si usas PERL…<\/h2>\n

    1.2.2.1 Creando tu CGI<\/strong><\/p>\n

    Como el Perl no es un lenguaje compilado como el C, nos saltaremos la ardua tarea de compilar nuestro fuente. Simplemente, crearemos un fichero de texto llamado prueba.txt. DEBERIAMOS usar el procesador de textos m\u00e1s simple que tengamos a fin de que no nos salve car\u00e1cteres extra en el fichero como hacen el Wordperfect o el Works. Se supone que vamos a usar el Notepad de Windows 95 (tambi\u00e9n sirve el EDIT del MS-DOS siempre que no usemos car\u00e1cteres espa\u00f1oles como los acentos o la e\u00f1e).<\/p>\n

    Contenido del fichero prueba.txt:<\/p>\n

    #!\/usr\/bin\/perl<\/p>\n

    print “content-type: text\/htmlnn”;
    \nprint “<HTML>n”;
    \nprint “<HEAD>n”;
    \nprint “<TITLE>Aprendiendo a crear CGIs<\/TITLE>n”;
    \nprint “<\/HEAD>n”;
    \nprint “<BODY>n”;
    \nprint “Enhorabuena. Acabo de crear un CGI \u00a1y funciona!n”;
    \nprint “<\/BODY><\/HTML>n”;<\/p>\n

    Fijaros que en un CGI lo primero que hay que poner es la cabecera, en este caso : Content-type: text\/htmlnn
    \nEl ‘n’ es un retorno de linea. Siempre debe de haber 2.<\/p>\n

    1.2.2.2 Copiando el CGI a tu p\u00e1gina<\/strong><\/p>\n

    Debemos de copiar el fichero ‘prueba.txt’ al directorio de nuestra p\u00e1gina web. Abrimos una sesi\u00f3n FTP hacia el directorio de nuestra p\u00e1gina web y copiamos el fichero ‘prueba.txt’ all\u00ed.<\/p>\n

    Ya tenemos el CGI en nuestra p\u00e1gina web. Si ahora vamos a un navegador y tecleamos la direcci\u00f3n donde se encuentra el CGI lo ejecutaremos. Ejemplo:
    \nhttp:\/\/web.com\/gregorio\/prueba.txt<\/p>\n

    Sin embargo, veremos el fuente del fichero como si fuese un texto normal. Tranquilos, no pasa nada. Ahora lo solucionamos.<\/p>\n

    1.2.2.3 Solucionando los problemas<\/strong><\/p>\n

    La respuesta es sencilla: el navegador no sabe que eso es un CGI. Pues no tenemos m\u00e1s que cambiar la extensi\u00f3n de txt por cgi. La raz\u00f3n de no haberlo hecho antes, es que nuestro programa de FTP DEBE transferir los archivos con formato ASCII, es decir, simples ficheros de texto, si intentamos copiar directamente el fichero con el nombre prueba.cgi, casi seguro que no nos va a funcionar porque lo intenar\u00e1 transferir en formato BINARIO.<\/p>\n

    En los sistemas UNIX, ning\u00fan programa funciona hasta que le demos permiso de ejecuci\u00f3n. Para darle permiso, se puede usar el programa de FTP. En el caso del FTP Cute, una vez vemos el fichero al que queremos darle el permiso de ejecuci\u00f3n, pinchamos en el con el bot\u00f3n derecho del rat\u00f3n y seleccionamos ‘File Attributes’ del men\u00fa emergente.<\/p>\n

    Ahora hay que darle permiso de lectura o lectura\/escritura a nuestro CGI ‘prueba.cgi’
    \nDeber\u00edamos recibir un mensaje advirti\u00e9ndonos que hemos cambiado los atributos del fichero.<\/p>\n

    Si ejecutamos ahora el CGI desde nuestro navegador, deber\u00edamos ver el esperado mensaje de enhorabuena.<\/p>\n","protected":false},"excerpt":{"rendered":"

    que es y como se crean CGI ?<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"http:\/\/localhost\/datacraft2023\/wp-json\/wp\/v2\/pages\/10571"}],"collection":[{"href":"http:\/\/localhost\/datacraft2023\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/localhost\/datacraft2023\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/localhost\/datacraft2023\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/localhost\/datacraft2023\/wp-json\/wp\/v2\/comments?post=10571"}],"version-history":[{"count":0,"href":"http:\/\/localhost\/datacraft2023\/wp-json\/wp\/v2\/pages\/10571\/revisions"}],"wp:attachment":[{"href":"http:\/\/localhost\/datacraft2023\/wp-json\/wp\/v2\/media?parent=10571"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}