Apache a CGI skripty - data z textového souboru

Dnes si povíme, jak natáhnout data z obyčejného textového souboru a vytažená data z TXT souboru upravit v HTML souboru.
Dnes si povíme, jak natáhnout data z obyčejného textového souboru a vytažená data z TXT souboru upravit v HTML souboru.

Formát textového souboru
První, co musíme udělat, je naplánovat si tvar textového souboru (v našem případě to bude soubor info.txt, který si uložíme mimo adresář typu DOCUMENT_ROOT), odkud budeme data tahat. Skriptem načteme každý řádek ze souboru zvlášť, ale na jednom řádku budeme mít X údajů jako je titulek, popis, URL odkaz, a jiné věci. Abychom mohli toto rozlišit, potřebujeme si určit nějaký oddělovač(--), kterým řekneme, kde jaká sekce začíní (titulek, popis, URL odkaz, …), a kde končí.

Do proměnné $InfoSoubor načteme řádek po řádku a pomocí oddělovače "--" tak získáme jednotlivé sekce (sloupce), v našem případě to jsou rok, měsíc, den, url odkaz, titulek a popis. Pokud tedy napíšeme @Info, pak z řádku získáme hodnotu roku, atd. (viz tabulka)

@Info = split (/--/, $InfoSoubor);

vzor řádku TXT souboru:

ROK--MESIC--DEN--URL_ODKAZ--TITULEK--POPIS

příklad řádku TXT souboru:

1999--01--20--http://www.urlodkaz1.cz--titulek1--popis k titulku 1

HTML kód
Nyní si musíme říct, jak výstup z CGI skriptu chceme formátovat. Řekněme si, že chceme, aby výstup ze skriptu vypadal například takto:

<FONT FACE=Arial SIZE=+1><B> <A HREF="URL_ODKAZ">TITULEK</A> </B></FONT><BR>
  <FONT FACE=Arial SIZE=-1><I>POPIS</I></FONT><BR>
  <FONT FACE=Arial SIZE=-2> [ Datum zverejneni: DEN.MESIC.ROK ] </FONT><P>
  

  
CGI skript s popisem
CGI skript uložte do C:/Program Files/Apache Group/Apache/cgi-bin/cgi6.cgi ($HOME/apache/share/cgi-bin/cgi6.cgi) , z pohledu serveru je to adresář http://localhost/cgi-bin/cgi6.cgi


  

#!/perl/bin/perl.exe
  # zde vložte část kodu CGI skriptu cgi5.cgi
  # označené jako POPIS1 az POPIS3 z prechazejiciho
  # clanku, Apache a CGI skripty V - metoda GET
  print "Content-type: text/html\n\n";
  print "<HTML><HEAD>";
  print "<TITLE>CGI 6: clanek $promena{'dalsi'} az $promena{'další'} + 10</TITLE>";
  print "</HEAD><BODY BGCOLOR=#FFFFFF>";
  
   # otevreni TXT souboru
   open (INFO_SOUBOR, "../dbase/info.txt");
   # nastavení proměné pro aktualní hodnotu +10
   $dalsich10 = $promena{'dalsi'} +10;
   # od jakého řádku se mají odkazy (clanky) zobrazovat
   $cislo_radek10 = $promena{'dalsi'};
   $cislo_radek = 0;
   # Načtení souboru od začátku do konce po řádcích
   while ($InfoSoubor = <INFO_SOUBOR>) {
   # Zobrazí se pouze ty řádku, které vyhovují podmínce
   if (($cislo_radek < $dalsich10) && ($cislo_radek >= $promena{'dalsi'})) {
   # rozdělení řádku po sloupcích podle oddělovače --
   @Info = split (/--/, $InfoSoubor);
   print "<FONT FACE=Arial SIZE=+1><B> ";
   print " <A HREF=\"$Info[3]\">$Info[4]</A> </B></FONT><BR>";
   print "<FONT FACE=Arial SIZE=-1><I> $Info[5] </I></FONT><BR>";
   print "<FONT FACE=Arial SIZE=-2> [ Datum zverejneni: ";
   print " $Info[2].$Info[1].$Info[0] ";
   print " ] </FONT><P>\n";
   # konec podmínky if
   }
   # připočítání jedničky k proměným, které zajištují
   # zobrazení data do HTML stránky
   ++$cislo_radek;
   ++$cislo_radek10;
   # konec cyklu while
   }
   # uzavření souboru s identifikátorem INFO_SOUBOR
   close (INFO_SOUBOR);
  
  # odkaz pro dalších 10 článků (odkazů)
  print "<A HREF=/cgi-bin/info.cgi?dalsi=$dalsich10>dalsi 10 clanku</A>";
  
  # konec CGI skriptu
  exit;
  

  
  Příště si ukážeme, jak vytvořit jednoduchý reklamní banner a zápis údajů o uživateli, který na reklamní banner kliknul. Pokud máte jakékoliv dotazy či připomínky, zasílejte jej na adresu erik@email.cz
  
Váš názor Další článek: @Home koupí Excite za 6,7 miliardy dolarů

Témata článku: Software, Programování, CGI, Split, Kody, TeX, Print, Skript, Info, Reklamní odkaz


Určitě si přečtěte

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

Sex a rozmnožování při mezihvězdné cestě: Kolik lidí je potřeba pro let k Proximě Centauri?

** Vědci spočítali, jak velká by musela být posádka pro vícegenerační let k nejbližší hvězdné soustavě ** Proxima Centauri se nachází 4,3 světelných let od nás ** Za současných technologií bychom k ní letěli 6300 let

Petr Kubala | 53

Takhle zemřete, když asteroid dopadne na vaše město

Takhle zemřete, když asteroid dopadne na vaše město

** Jak by to dopadlo, kdyby na světovou metropoli či do nedalekého moře dopadl velký asteroid? ** Simulovali to odborníci z University of Southampton ** Výsledky jsou velmi zajímavé

Petr Kubala | 32

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 65

Apple dal do MacBooku procesor Core i9 a 4TB SSD. Ani se neptejte, co za to chce...

Apple dal do MacBooku procesor Core i9 a 4TB SSD. Ani se neptejte, co za to chce...

** Apple aktualizoval notebooky MacBook Pro, dostaly nový hardware ** Těšit se můžete na nové procesory a větší paměť ** Cena nejvybavenějšího modelu překročí 200 tisíc korun

Martin Miksa | 99

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

Nová zbraň Microsoftu proti iPadu: Levný tablet Surface Go bude stát jen deset tisíc

** Microsoft představil nový tablet Surface Go ** Nový model zaujme nízkou cenou, ale schopnostmi zařízení Surface ** Microsoft nepoužil čip ARM, ale klasický procesor od Intelu 

Karel Javůrek | 116


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji