Newsgroup: it.comp.www.php
Titolo: Apache module -> cgi

Fino adesso non avevo capito cosa significava l'alternativa modulo
apache/cgi.
Ora pero' mi piacerebbe avere un eseguibile php.
Obiettivo: avere un server per lo sviluppo, che mostri in fondo alle pagine
generate con php l'output di weblint (un programma in Perl che controlla
varie cose sull'html, tra cui il corretto accoppiamento dei tags).
Pensavo di fare qualcosa del genere:
a)    # mv php php_original
b) Creare un file di testo chiamato php e renderlo eseguibile, fatto piu' o
meno cosi':
# /bin/bash
php_original <args> | tee temp.out
weblint temp.out
(ok, non correggetemi la sintassi, sono un po' arrugginito con Unix/Linux).
Ora, avrei 2 domande per gli esperti (e in questo ng ne girano di
grandiosi):
1) Come faccio a fare una cosa simile, visto che php e' compilato come
modulo Apache?
   OPPURE
2) Come faccio a ricompilare php e/o apache in modo che si usino in modo
cgi?
Grazie
AS


wrote:
Potresti anche fare cosi':
<?
	// Header (forzato da Apache?)
	if (isset($_REQUEST['LINT_ME'])
		ob_start();
?>
<?
	// Footer (forzato da Apache?)
	if (isset($_REQUEST['LINT_ME']))
	{
		$fp = fopen($tmpfile);
		fwrite($fp, ob_get_contents());
		fclose($fp);
		ob_end_flush();
		// Questo lo potremmo sparare dentro "$PHP_SELF.html" ;-)
		print "<!-- LINT LINT LINT \n";
		// Alternativa: PHP crea un file sulla directory visibile
		// all'esterno, ci aizza contro il validator del W3C, poi
		// recupera i risultati magari con file().
		system("weblint $tmpfile");
		// Poi si pulisce e si ringrazia come gentiluomini.
		unlink ($tmpfile);
		print "\nLINT LINT LINT -->";
	}
?>
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

 Potresti anche fare cosi':
Sei un grande, ci ho messo mezz'ora a capire come funzionava :-)
Ti ringrazio, perche' mi hai insegnato una cosa che sicuramente mi verra'
utile in futuro.
Pero', essendo incontentabile :-), vorrei qualcosa che funzionasse senza
modificare il codice, perche' vorrei consigliare ai miei colleghi di usare
questo server di test prima di rilasciare la applicazioni, e non sarebbe
accettabile che gli chiedessi modifiche pur minime.
AS

accettabile che gli chiedessi modifiche pur minime.
Ordini ad Apache di considerare tutti i files .php di quel server di
test (e non degli altri) come aventi un preambolo e un postambolo in
.php, casualmente uguali a quei due che dicevo.
Si puo' avere anche una STESSA directory, che se vista come
 
www.server.com
funziona in un modo, e come
 
debug.server.com
 
profile.server.com
 
validate.server.com
funziona in altri modi 8-D
(Piu' VirtualHosts con una medesima DocumentRoot)
(Occhio agli accessi!)
Leonardo

 .php, casualmente uguali a quei due che dicevo.
Ok, l'ho fatto, e posto la soluzione per chi fosse interessato.
Il tutto funziona per il classico server di test (massimo 2-3 utenti,
altrimenti i nomi dei files tmpfile1/2 dovrebbero essere dinamici.
Le direttive di php.ini si chiamano auto_prepend_file ed auto_append_file.
Gli script sono in coda.
Grazie ancora
Amedeo
*** begin.inc.php ***
<?PHP
ob_start() ;
?>
*** end.inc.php ***
$tmpfile1 = "/tmp/temp_weblint.html" ;
$tmpfile2 = "/tmp/temp_weblint.txt" ;
$fp = fopen( $tmpfile1, "w" ) ;
fwrite( $fp, ob_get_contents() ) ;
fclose( $fp ) ;
ob_end_flush() ;
system( "weblint $tmpfile1 >$tmpfile2" ) ;
unlink( $tmpfile1 ) ;
$out = implode( "", file( $tmpfile2 ) ) ;
$out = str_replace( "<", "&lt;", $out ) ;
$out = str_replace( ">", "&gt;", $out ) ;
$out = nl2br( $out ) ;
print "*** WEBLINT BEGIN ***<BR>\n" ;
print $out ;
print "*** WEBLINT END ***<BR>\n" ;
unlink( $tmpfile2 ) ;