Newsgroup: it.comp.www.server
Titolo: httpd.conf la vendetta ... messaggio ancora più lungo :-)

Ciao,
sappiate che sto quasi per uscire dalla depressione,
grazie al vostro aiuto ;-)
non abbandonatemi proprio ora, uh !
la situazione è la solita ... per chi la ricorda :-)
richiamando il mio portale 
www.portale.it/nickname
 ...
apache deve fare un "reindirizzamento" verso
www.portale.it/users/nickname
 ....
in modo che non ho le 50.000 cartelle degli utenti tutte in ROOT,
bensì dentro la sottocartella users.
allora, come mi ha suggerito Leonardo
( ormai eletto a mio guru personale ),
ho applicato delle regoline nell'httpd.conf ...
la soluziona che mi è stata proposta, era di usare
AliasMatch              ^/[^_].*  /blah blah blah ...
ed infatti funziona alla perfezione ... qualsiasi cosa il visitatore
appenda dopo 
www.portale.it/
 viene dato in pasto a quell'alias match ...
e viene considerato quindi un NICKNAME da visualizzarne la relativa
pagina-sottocartella personale.
per le cartelle invece REALI che non sono cartelle utenti-nickname, per non
farle finire in pasto all'aliasmatch, basta appunto rinominarle con un
underscore _ davanti.
il problema che si è presentato in seguto, è che non tutte le cartelle
che stanno in root, possono essere rinominate con un _ davanti.
( vedi cgi-bin ) ... e pertanto, vengono considerate anche loro
un nickname e date in pasto a quell'alias match ....
pertanto, 
www.portale.it/cgi-bin
 ... diventa 
www.portale.it/users/cgi-bin
...
per evitare questo, ( sempre tu Leonardo :-)  ) mi hai suggerito
di mettere sopra quell'alias match una negazione, un contro-alias match ...
che escludesse le cartelle da non essere considerate appunto nickname.
ed infatti funziona benissimo ! ( beh non mi aspettavo di meno ! )
comunque, alla fine della favola, ho optato piuttosto per le funzioni di
mod_rewrite ...
( più comode di aliasmatch, perché così posso anche passare parametri GET
alle pagine ... )
RewriteEngine on
RewriteCond %{REQUEST_URI} !^/cgi-bin$
RewriteCond %{REQUEST_URI} !^/images$
RewriteCond %{REQUEST_URI} !^/blah blah blah $
..................
..................
..................
RewriteRule ^/([^_][/a-z]*)$   /users/index.php?profilo=$1
____________________
come vi sembra ?
quelle RewriteCond sono troppo onerose per il server, in termini
di performances ?
( ce ne sono in tutto una decina di cartelle da blacklistare in quel modo )
è possibile renderle esclusive ? se un URL ricade in una certa REWRITECOND
che le altre successive non vengano nemmeno processate ?
( tipo con il  flag [L] finale ? )
ci saranno slowdown del server ? esplosioni ? server busy dappertutto ?
_________
insomma, questa è un casino di richiesta come al mio solito, sorry,
eheheheeheh
spero che si capisca almeno la metà di cio' che sto chiedendo :-)
un bacino ino ino ! ;-)

 ( tipo con il  flag [L] finale ? )
hmmm ... spulciando nella documentazione, forse ho capito
che il flag [L] è solo per le rewriterule ... e non le rewritecond ...
ma allora, come le concateno ? con un [OR] finale, o ci lascio
vuoto ... ( quindi usando un AND logico, implicito di default ) ?
in molti sistemi operativi ... se ...
if ( "gatto" == "cane" && "mucca" == "pecora" ) ...
la seconda, cioè "mucca"=="pecora" non viene nemmeno
processata ...perché per essere eseguito, quell ' if
ha bisogno che entrambe ( && ) le condizioni
siano vere ...
quindi, essendo la prima condizione falsa, non ha senso perdere
tempo a processare anche la seconda ...
ma ... come funziona invece in questo caso ?
posso fare in modo che apache processi
le rewritecond, fino a che non è soddisfatta
la condizione o meno ?
mamma che casino :-(

 ( ormai eletto a mio guru personale ),
direi sia riconosciuto come tale da molti e sicuramente 
anche da me :)
-- 
Ciao, Dmitry
FIAG - Free It-Alt Group  ~   
http://www.fiag.it
X-PLANET Community        ~   
http://www.x-planet.org

di performances ?
No, ma forse e' un pelo piu' rapido
	!^/(cgi-bin|images|...|...|...)$
perche' il motore regexp ottimizza la ricerca. Stiamo parlando di
microsecondi, pero'.
(Cosi' sui due piedi non ricordo se le parentesi sono () o \(\) )
Oppure, hai provato a usare -d?
	RewriteEngine on
	RewriteCond %{REQUEST_URI}	!-d
	RewriteRule ^/([a-z]+)$		/users/index.php?profilo=$1
Leonardo
-- 
Nach doiligh domhsa mo chailin a mholadh
'S ni he amhain mar bhi si or
Bhi si mar gath greine a dhul in eadan na gloinne
Is bhi sceimh mhna na finne le mo cailin or

 RewriteRule ^/([a-z]+)$ /users/index.php?profilo=$1
OH YEAHHHHHHHHHHHHHHHHHHHHHHHHH !!!
FINALMENTEEEEEEEEEEEEEEEEEEEE !
è proprio quello che stavo disperatamente cercando di fare
da almeno 10 giorni !!!
tutte le regexp, le writecond, gli aliasmatch ...
underscore vari ..... blah blah blah ....
è tutto racchiuso in quel flag -d ...  !!!
ed in effetti, pensandoci bene, è la cosa assolutamente
più logica ... ho bisogno che venga fatto il rewrite
in tutti i casi che l'url non punti ad una cartella fisica ...
scusatemi la grezzosità, ma ho appena provato
un *** orgasmo digitale *** !
speriamo solamente che, essendo un portale molto
trafficato, il fatto che Apache debba "interrogare"
il filesystem per verificare la presenza della
rispettiva cartella ad ogni richiamo HTTP, non
abbia conseguenze troppo rilevanti sulle prestazioni
del sito .... che ne dici Leonardo ?
in ogni caso, ti ringrazio come nessuno ha mai
ringraziato tanto una persona in questo pianeta.
superbacio !

 Ehi, e' Apache, mica Windows.
?_?

del sito .... che ne dici Leonardo ?
Non e' tanto Apache che ti da' problemi li', quanto il file system.
Cos'e'? ext2, ext3, reiser?
Comunque in Apache succede questo:
	// Verifica se il file e' stat-abile e se e' una directory
	...
        if (stat(input, &sb) == 0) {
            if (S_ISDIR(sb.st_mode)) {
                rc = 1;
            }
        }
	...
Il costo di una stat() e del successivo rewrite e' trascurabile a
paragone del resto (interpretazione PHP, MySQL, generazione HTML,
e tempi morti nei vari wait-for-resource).


?_?
Si', non sarebbe corretto paragonare un OS con un webserver, ma stavo
parlando di configurabilita' a basso livello (che so... cambiare, dal
registro, il testo del pulsante "Avvio"). Suvvia, dammela buona :-)


 Suvvia, dammela buona :-)
Solo se mi aiuti col mio script php-ftp :)
Continua a spostare tutto il file sul server prima di mandarlo al client :(


wrote:


	$FTPUSER   = 'lserni';
	$FTPPASS   = 'harkonnen';
	$FTPSERVER = 'ftp.arrakis.local';
	$FTPPATH   = '/home/lserni';
	$FTPFILE   = 'video2_converted.gif';
	$file = "ftp://$FTPUSER:$FTPPASS@$FTPSERVER$FTPPATH/$FILE";
	if (NULL != ($fp = fopen($file, 'rb')))
	{
		$header = fread($fp, 2048);
		$tmpf	= uniqid('.tmp/zot-');
		$gp	= fopen($tmpf, 'w');
		fwrite($gp, $header, strlen($header));
		fclose($gp);
		$info	= getimagesize($tmpf);
		unlink($tmpf);
		Header("Content-type: {$info['mime']}");
		print	$header;
		fpassthru($fp);
		@fclose($fp);
	}
Ci ho provato con un file da 1.7 Gb, e l'immagine arriva senza essere
salvata: vedo l'animazione GIF immediatamente.
Almeno 50 secondi ci sono stato a scaricarla, quindi fpassthru non ti
dovrebbe dare problemi di timeout. Potrebbe darteli SUBITO DOPO pero'
(controlla)...


 salvata: vedo l'animazione GIF immediatamente.
Usavo anche io passthru nel mio script, e nel mio come in questo il dl non
comincia subito ma il server ftp passa il file "allo script"..
Se mi dici che a te parte subito, non ho parole..
Grazie lo stesso :)


:Provate a guardare gli ingredienti del famoso Labello che si usa per
:le labbra screpolate: Butirrospermum Parkii (sperma di maiale).

 PHP installato come...?
Asapi
Se vuoi ti posto anche il mio script.. prova se a te funziona mandando
subito il file
[lungo]
<?
 $hostname = '';
 $user = '';
 $password = '';
  $filename = '';
//mi connetto al server
$sock = @fsockopen($hostname, 21, $errno, $errstr, 30);
@stream_set_blocking($sock,false);
//faccio il login, grezzo
@fputs($sock,"USER $user\r\n");
@fputs($sock,"PASS $password\r\n");
@fputs($sock, "PASV\r\n");
for($i = 0; $i<4; $i++){
   $buffer = fgets($sock, 4096);
}
$message = $buffer;
if($message){
 $offset = strpos($message,"(");
 $s = substr($message,++$offset,strlen($message)-2);
 $parts = split(",",trim($s));
 $data_host = "$parts[0].$parts[1].$parts[2].$parts[3]";
 $data_port = ((int)$parts[4] << 8) + (int) $parts[5];
 $data_sock = fsockopen($data_host,$data_port,$errno,$errstr,30);
 //Scarico
 @fputs($sock, "RETR $filename\r\n");
 //gestisco l'header
 $mime_type = (strstr($HTTP_USER_AGENT,'IE') ||
strstr($HTTP_USER_AGENT,'OPERA'))
 ? 'application/octetstream'
 : 'application/octet-stream';
 // finally send the headers and the file
 header('Content-Type: ' . $mime_type);
 header('Expires: 0');
 if (strstr($HTTP_USER_AGENT,'IE')) {
  header('Content-Disposition: inline; filename="' . $filename. '"');
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Pragma: public');
 } else {
  header('Content-Disposition: attachment; filename="' . $filename .'"');
  header('Pragma: no-cache');
 }
 //passo il file
 @fpassthru($data_sock);
} else echo 'Error';
?>

Asapi
Controlla quant'e' il buffer assegnato all'output, e se c'e'
l'autobuffering per default.
Casomai metti come prima riga
	ob_end_flush();


 ob_end_flush();
Come ho fatto a non pensarci cavolo!
Grande Leonardo, sei sempre il migliore :)
ORa funziona perfettamente

ORa funziona perfettamente
In cambio avrei bisogno di un test. Mi segnalano, e mi pare strano, che
PHP come ASAPI su IIS 6, proprio riempiendo il buffer a catapčtere, nel
giro di qualche minuto determini un'eccezione e tiri giu' IIS.
Non posso dare dettagli (nonostante io ABBIA una teoria in merito), ne'
fare prove perche' non ho IIS 6 a tiro.
Se ti senti di sagrifiare il tuo IIS... magari a tarda sera quando c'e'
poco tchaffico... ripeto, secondo me non va giu', al massimo rallenta -
e poco anche quello - ma non vorrei averti sulla coscienza nel caso che
IIS si vendicasse e ti formattasse anche la ventola dell'alimentatore.


 dell'alimentatore.
Dimmi cosa vuoi che faccia, lo provo sul mio server privato così non faccio
danni :)
PHP come isapi su iis per andare bene funziona con output buffering = on nel
php.ini (non 4096, proprio on)
Se vuoi provo a fare un dl di un film facendolo passare dal server,
intendevi questo?
(posso controllare solo se cade, non se rallenta perchè + lento di così non
può andare :D)

puň andare :D)
8-D


 // ** DICE ** ... :-|
Potevi scrivere direttamente qualcosa di funzionante :)
cmq sto cosetto non lo butta giů iis...
prima m'č partito senza header lo script ftp, e mi ha buttato fuori un pezzo
di film a caratteri.. mi ha incriccato ie, ma iis manco una piega..

di film a caratteri.. mi ha incriccato ie, ma iis manco una piega..
Infatti, e' quel che sospetto. La rogna e' altrove, e'.
