Non ha senso quanto scrivi, alla luce di quanto ti ho appena scritto.
Un CGI non e` un programma. Il programma lo scrivi in un linguaggio a tua scelta (ad esempio in Perl).
Trasformi il programma in un CGI quando linki le librerie apposite e quando ti interfacci direttamente con il client.
Se l'interfaccia la fai in PHP, puoi richiamare da PHP un programma esterno che gira sul server, nel linguaggio che preferisci.
Ad esempio se hai gia` delle routine in Perl, puoi richiamarle da PHP: in PHP gestisci l'interfaccia, con le routine Perl fai la parte che tu definisci piu` complessa.
In tal caso il Perl non e` piu` un CGI (non serve piu` richiamare "use CGI" o simile), ma un programma richiamato dal PHP. A tale programma puoi passare dei parametri, e/o in nome (o l'indirizzo) di un file sul filesystem.
Naturalmente per stampare un file sul server, lo devi avere sul server. Non puoi stamparlo se non ce l'hai.
E per i controlli su nome del file e tipo, in questa situazione sono da realizzare in PHP.