Newsgroup: it.comp.www.php
Titolo: 2 Apache, 2 PHP sulla stessa macchina, è possibile?

Fino a qualche giorno fa avevo apache 2.0.55/PHP 5.1.2/MySql 5.0.22 su 
macchina con SO win xp. Tutto aveva funzionato sempre alla perfezione.
Poi mi è venuto in mente di aggiornare la terna alle versioni: apache 
2.2.3/PHP 5.2.0/MySQL 5.0.27.
Di fatto però ho eseguito l'aggiornamento solo di MySql, mentre sia php 
sia apache li ho installati in cartelle differenti rispetto a prima.
Ho avuto anche l'accortezza di mettere in ascolto il "vecchio" server 
sulla porta 8080, mentre il nuovo sulla 80.
Il mio intento era quindi, se possibile, di avere due webserver 
differenti, ciascuno con la sua versione di php (installato come modulo 
di apache).
Ma ho riscontrato:
1) la nuova configurazione funziona correttamente, senza alcun 
problema.
2) la vecchia configurazione non funziona, o meglio: pare che il 
problema sia PHP. Infatti apache parte tranquillamente, nei log non dà 
alcun problema arriva quando carico una pagina .php. Una semplice 
pagina php con dentro scritto "phpinfo()", o addirittua vuota (solo con 
i tag <?php e ?>) lascia il browser in attesa, fa comparire un 
messaggio di errore di win in cui l'errore viene identificato in:
szAppName : Apache.exe
szAppVer : 2.0.55.0
szModName : php5ts.dll
szModVer : 5.2.0.0
/* ma che cavolo...su apache 2.0.55 è caricato php 5.1.2, non 5.2.0 */
offset : 000978e5
Questo problema accade anche se tengo il nuovo server "spento".
Il file error.log del server "vecchio" è "quasi" normale: "quasi" 
perché adesso mi dà dei warning sulle estensioni caricate: UNABLE TO 
INITIALIZE MODULE.
Cosa devo dedurre da tutta questa storia? Che non è possibile far 
convivere sulla stessa macchina due webserver apache differenti (cioè, 
questi convivono senza problemi a quanto pare), ma con due versioni di 
php diverse?
Quale può essere il problema? Path di varibili di sistema? Altre idee?
rob4you
ps:
Ecco di seguito il log del server "vecchio", se può interessare :-):
[Wed Dec 06 18:01:07 2006] [notice] Apache/2.0.55 (Win32) PHP/5.1.2 
configured -- resuming normal operations
[Wed Dec 06 18:01:07 2006] [notice] Server built: Oct  9 2005 19:16:56
[Wed Dec 06 18:01:07 2006] [notice] Parent: Created child process 3168
PHP Warning:  PHP Startup: gd: Unable to initialize module\nModule 
compiled with module API=20050922, debug=0, thread-safety=1\nPHP    
compiled with module API=20060613, debug=0, thread-safety=1\nThese 
options need to match\n in Unknown on line 0
PHP Warning:  PHP Startup: mysql: Unable to initialize module\nModule 
compiled with module API=20050922, debug=0, thread-safety=1\nPHP    
compiled with module API=20060613, debug=0, thread-safety=1\nThese 
options need to match\n in Unknown on line 0
PHP Warning:  PHP Startup: mysqli: Unable to initialize module\nModule 
compiled with module API=20050922, debug=0, thread-safety=1\nPHP    
compiled with module API=20060613, debug=0, thread-safety=1\nThese 
options need to match\n in Unknown on line 0
[Wed Dec 06 18:01:08 2006] [notice] Child 3168: Child process is 
running
[Wed Dec 06 18:01:08 2006] [notice] Child 3168: Acquired the start 
mutex.
[Wed Dec 06 18:01:08 2006] [notice] Child 3168: Starting 250 worker 
threads.

 ciascuno con la sua versione di php (installato come modulo di apache).
Se invece, sul vecchio server, avvio php non come modulo di apache, ma 
come cgi, funziona correttamente.
Quindi...impossibile lavorare (in win) con due webserver con due 
versioni diverse di php montate come "modulo"?
rob4you


Dopo ulteriori indagini, credo di aver capito...il problema è tutto 
legato alle variabili di sistema, con i relativi path:
quando avviene la ricerca di php5ts.dll è seguito il seguente ordine:
- The same directory from where php.exe is called, or in case you use a 
SAPI module, the web server's directory (e.g. C:\Program Files\Apache 
Group\Apache2\bin).
- Any directory in your Windows PATH environment variable.
Dal momento che, nella bin di apache non veniva copiata la dll 
php5ts.dll, la ricerca avveniva in accordo alla variabile d'ambiente 
PATH, che ora includeva, oltre al "vecchio" percorse di php, anche il 
"nuovo". In particolare la dll era trovata subito nel "Nuovo" percorso, 
e quindi succedevano casini. Copiando quindi la corrispondente dll nel 
bin di apache "vecchio" tutto è tornato alla normalità.
Vi chiedo una cosa quindi: ma impostare variabili d'ambiente in windows 
per il funzionamento di php, se php è installato su apache, è INUTILE? 
Voglio dire, posso CANCELLARE nel PATH i percorsi di php?
rob4you

 dire, posso CANCELLARE nel PATH i percorsi di php?
Risposta affermativa....a quanto pare la variabile d'ambiente PATH fa 
più male che bene in situazioni come la mia.
Se si usa come webserver Apache, è sufficiente inserire in httpd.conf 
la direttiva:
PHPIniDir "C:/PHP"
In tal caso, le variabili d'ambiente PATH e PHPRC con impostati i 
percorsi della directory di php sono del tutto inutili.
E adesso, tutto liscio come l'olio (almeno così pare) :-): ho due 
webserver apache (differenti), ciascuno con il suo modulo php (versione 
differente).
rob4you


in che punto di httpd.conf ?


 in che punto di httpd.conf ?
Io parlo di Win come sistema operativo...su altri non so. :-)
Comunque, non credo che il punto sia così fondamentale, io ho inserito 
questa direttiva alla fine, in pratica dove metto anche le altre righe 
per il caricamento di php come modulo di apache.
Occhio che credo sia importante usare gli slash (non i backslash, 
nonstante in win i path siano con i backslash).
rob4you