Skip to content

Blog su Lazarus e il Pascal

Scrivi una volta e compila dove vuoi…

Sviluppare CGI su Apache2 con InstantFpc

Posted on 10 Novembre 202313 Novembre 2023 By nomorelogic

InstantFpc

Per chi non lo conoscesse, InstantFpc è uno strumento che permette di “lanciare” dei sorgenti pascal come fossero degli script, solo che – prima del loro lancio – provvede a compilarli in modo trasparente.

Ovviamente è uno strumento che lavora su tutte le piattaforme target di fpc, come Linux, Mac e Windows.

Questa funzionalità nasce nel mondo Unix ed il meccanismo è piuttosto semplice: se un file di testo ha impostato il permesso di esecuzione, allora viene cercata la presenza – nella prima linea – di un commento particolare chiamato shebang che, se esiste, viene inteso come il percorso dell’interprete da utilizzare per eseguire lo script stesso.

Il Free Pascal,lo sappiamo, non è interpretato ma compilato. Tuttavia InstantFpc sfrutta il meccanismo dello shebang che, abbinato ad una cartella cache per la compilazione, permette di eseguire un file .pas come fosse uno script.

Lo shebang deve essere presente, come già detto, nella prima riga dello script e nel nostro caso è il seguente:

#!/usr/bin/instantfpc

Come introduzione penso sia sufficiente, per maggiori informazioni rimando alla documentazione ufficiale che trovate nel link: https://wiki.freepascal.org/InstantFPC.

InstantFpc e Cgi Apache

La tecnologia CGI nell’ambito della programmazione web oramai la conosciamo, è diffusa da veramente molti anni.

Non è sicuramente la tecnica più performante ma certamente ha alcuni vantaggi:

  • è semplice da usare
  • ogni CGI è già isolato in memoria per design

Fare CGI con InstantFpc/fpc ci porta a fare qualche considerazione:

  • possibilità di riutilizzo del codice che si è già sviluppato
  • possibilità di usare tutte le funzionalità di fpc e dei suoi sorgenti
  • generazione di binari eseguibili nativi
  • un CGI FreePascal è sicuramente più lento in partenza di un modulo di Apache (anche perché la prima volta deve essere compilato), tuttavia, una volta in memoria, credo che abbia dalla sua sia la velocità di esecuzione che il basso uso di risorse
  • spesso leggo nei forum che una certa applicazione web (ora mi riferisco a linguaggi tipo PHP, Python e simili) è diventata troppo lenta e si cerca qualcosa per compilarla; in molti casi si cerca un transpiler che traduca il tutto in C/C++ per poi compilarlo… Spesso è un lavoro arduo e non sempre si ha successo. Con InstantFpc abbiamo già la versione compilata: possiamo scegliere se fare il deploy dei sorgenti o dei binari (e non c’è bisogno di transpiler o altri artifici).

Installazione e configurazione di InstantFpc per Apache

Credo che se state leggendo questo articolo, fpc ed InstantFpc siano già installati.
Basta verificare la presenza di IstantFpc con il seguente comando:

$ instantfpc -v
ifpc 1.3

Come root, creiamo ora la cartella di cache per poter far lavorare con Apache:

# mkdir /var/apacheinstantfpc
# chmod 777 /var/apacheinstantfpc
# ls -lh /var
…
drwxrwxrwx 2 root root 4,0K 7 nov 16.21 apacheinstantfpc
…

Nota:
I permessi 777 per la cartella di cache sono solamente per prova, una volta che tutto funziona andrebbero ristretti.

Configurazione di Apache

Prepariamo quindi la configurazione per Apache.

La configurazione descritta sotto è realizzata su Linux Devuan: è sicuramente identica per tutta la famiglia di Debian, Ubuntu e derivate e comunque sia simile per le altre distribuzioni GNU/Linux.

Per chi usa Windows e/o installazioni tipo LAMP/WAMP, bisogna cercare la cartella “/etc/apache2/sites-available”.


Seguendo i consigli che si possono trovare nel link precedente, ho creato un file di configurazione che ho chiamato “001-cgi-instantfpc.conf” nella cartella /etc/apache2/sites-available.

Segue il contenuto:

ScriptAlias /mod4/ /var/www/mod4/ 
 <Directory "/var/www/mod4"> 
   AllowOverride None 
   Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
   Order allow,deny 
   Allow from all 
   SetEnv INSTANTFPCCACHE /var/apacheinstantfpc 
   # You can put fpc options into /etc/fpc.cfg or here: 
   #SetEnv INSTANTFPCOPTIONS -Fu/path/to/somevar/ppufiles 
   # If this is root directory, you might have to set: 
   #Require all granted 
 </Directory> 

Quello che ci interessa sapere è che gli URL che contengono “/mod4/” (che è un prefisso di fantasia e modificabile a piacere) saranno abilitati all’esecuzione di CGI contenuti nella cartella “/var/www/mod4” (anche questa modificabile a piacere).

Notare anche la definizione della cartella di cache per InstantFpc.

Verifichiamo il file:

Verifichiamo il file:
# ls -l /etc/apache2/sites-available/
…
-rw-r--r-- 1 root root  432  6 nov 18.54 001-cgi-instantfpc.conf
…

Ora che tra i siti “disponibili” (sites-available) abbiamo creato la nostra configurazione, non resta che metterla tra gli “abilitati” (sites-enabled).

Per fare questo bisogna eseguire da shell il seguente comando:

# ln -s /etc/apache2/sites-available/001-cgi-instantfpc.conf /etc/apache2/sites-enabled/001-cgi-instantfpc.conf

Verifichiamo che tutto sia impostato correttamente con il comando:

# ls -l /etc/apache2/sites-enabled

che dovrebbe mostrare un output simile al seguente:

…
lrwxrwxrwx 1 root root 52  6 nov 17.01 001-cgi-instantfpc.conf -> /etc/apache2/sites-available/001-cgi-instantfpc.conf
…

Creiamo la sottocartella mod4 in /var/www ed aggiustiamo I permessi

# cd /var/www
# mkdir mod4
# chmod 755 mod4
# ls -lh 
totale 16K 
drwxr-xr-x  2 root root     4,0K  2 nov 18.21 html 
drwxr-xr-x  2 root root     4,0K  7 nov 16.24 mod4 

Non ci resta che abilitare i cgi:

# a2enmod cgi

Riavviate ora Apache e, se non ci sono errori, nel riavvio possiamo andare avanti.

Test CustomCgiApplication

Prepariamo quindi il CGI.

Spostiamoci ora nella cartella mod4:

# cd /var/www/mod4

Creiamo il file showenv.pas e salviamolo con il seguente contenuto (notare che la keyword program è opzionale con InstantFpc):

#!/usr/bin/instantfpc 
{$mode objfpc}{$H+} 
uses  SysUtils; 
var  i: Integer; 
begin 
  writeln('Content-type: text/html'); 
  writeln; 
  writeln('<HTML><BODY>'); 
  for i:=0 to Paramcount do 
    writeln('Param ',i,' ',ParamStr(i),'<br>'); 
  for i:=1 to GetEnvironmentVariableCount do 
    writeln('Env ',GetEnvironmentString(i),'<br>'); 
  writeln('</BODY></HTML>'); 
end.

Impostiamo i permessi e verifichiamo il tutto:

# chmod 755 showenv.pas
# ls -lh
…
-rwxr-xr-x 1 root root  364  6 nov 17.18 showenv.pas
...

A questo punto possiamo testare il nostro CGI aprendo un browser ed inserendo nella barra degli indirizzi:

http://127.0.0.1/mod4/showenv.pas

Dovremmo vedere il risultato dello script.

Buono sviluppo a tutti.

Lazarus ed il Web, Tutorial

Navigazione articoli

Previous Post: Interfacce (Interface) – Parte 4
Next Post: Creare una web application con lazarus

Archivi

  • Maggio 2025
  • Aprile 2025
  • Ottobre 2024
  • Maggio 2024
  • Marzo 2024
  • Dicembre 2023
  • Novembre 2023
  • Settembre 2023
  • Giugno 2023
  • Maggio 2023
  • Marzo 2023
  • Maggio 2022
  • Aprile 2022
  • Febbraio 2022
  • Gennaio 2022
  • Dicembre 2021

Categorie

  • Android
  • Funzioni avanzate
  • Installazione alternativa di Lazarus e Free Pascal Compiler (FPC)
  • Installazioni
  • Lazarus ed il Web
  • Lazarus, l'IDE ed i suoi strumenti
  • Sintassi e concetti base
  • Strutture dati
  • Tutorial
Vai al forum Italiano

Articoli recenti

  • Il framework Brook – tutorial 2 – un server CRUD
  • Il framework Brook – tutorial 1 – primi passi
  • Installazione di Lazarus in Linux – Risoluzione problemi
  • Autenticazione 2FA
  • Installazione di Free Pascal e Lazarus su Manjaro Linux

Commenti recenti

  1. DragoRosso su Installazione di Lazarus e Free Pascal – su Linux – tramite package manager a linea di comando

Copyright © 2025 Blog su Lazarus e il Pascal.

Powered by PressBook WordPress theme

Utilizziamo i cookie per essere sicuri che tu possa avere la migliore esperienza sul nostro sito. Se continui ad utilizzare questo sito noi assumiamo che tu ne sia felice.