php -> cgi ->programma.cmd -> cgi (stampo a video il risultato) -> php

analizziamo questo flusso:

php -> cgi: ovvero
dati inseriti in un form di una pagina html (generata da php, ma è irrilevante come detto da Mich_) da passare ad un cgi... Non ci sono problemi.
se il form è questo:

<form action="/cgi-bin/cmd.cgi" method="GET">

<input type="text" name="numero">

<input type="submit" value="Invia">

</form>

il browser invierà al CGI cmd.cgi i dati che saranno contenuti nella variabile di sistema $QUERY_STRING, quindi nel cgi la raccoglierai così:

#!/bin/sh

dati = $QUERY_STRING

in dati vi sarà "numero=xxxxxx", a te sta a separare il nome del campo dal valore, non conosco abbastanza la bash per dirtelo. Io uso Perl.

Proseguiamo:

cgi ->programma.cmd -> cgi (stampo a video il risultato)

tutto ok. Va bene anche come lo fai, ma qui si chiude, nel senso che la connessione tra server e client viene chiusa e non puoi inviare più nulla al browser, quindi il passaggio dopo:

cgi (stampo a video il risultato) -> php

non è possibile, se intendi passare qualcosa ad una pagina diversa da quella generata dal CGI.