Newsgroup: it.comp.www.php
Titolo: Comportamento strano delle estensioni caricate

Windows XP
Apache 2.2.3
PHP 5.2.0
(ho comunque visto che ci sono problemi simili a quelli che sto per 
dire anche con una versione di Apache e PHP diversa)
Dalle variabili d'ambiente di windows ho eliminato:
- PHPRC C:\Programmi\PHP
- Path C:\Programmi\PHP
Questo perché, caricando PHP come modulo di Apache, ho usato 
direttamente in httpd.conf le direttive:
- PHPIniDir "C:/Programmi/PHP"
- LoadModule php5_module "C:/Programmi/PHP/php5apache2_2.dll"
che indicano direttamente al webserver sostanzialmente la stessa cosa.
Ho riscontrato però, dopo aver fatto ciò, un comportamento alquanto 
"bizzarro":
all'avvio del webserver alcune estensioni (e sottolineo, soltanto 
_ALCUNE_, sempre le stesse) non vengono caricate e nel log degli errori 
mi appaiono dei PHP warning come il seguente:
PHP Warning:  PHP Startup: Unable to load dynamic library 
'C:\\Programmi\\PHP\\ext\\php_curl.dll' - Impossibile trovare il modulo 
specificato.\r\n in Unknown on line 0
La cosa inspiegabile è che, ad esempio, tanto per fare un nome, la 
libreria "php_xsl.dll" compare nella directory "ext" e risulta 
correttamente caricata.
Invece ad esempio, la libreria "php_curl.dll", pur comparendo nella 
stessa directory "ext" mi causa il warning suddetto.
Avete qualche idea in mente a riguardo? MAH...magia...
--
rob4you

Forse il problema non sta nella dll in quanto tale ma magari nelle
eventuali altre dipendenze che richiama...se bastasse la DLL a far
funzionare il "modulo" non sarebbe necessario portarsi dietro mega di
file...probabilmente trova la dll e quando cerca di caricarla deve
caricarsi altra roba che, siccome hai levato i path dal PATH, windows
non riesce a trovare :)
rob4you , in data 18/12/2006 22:02 :


 non riesce a trovare :)
Purtroppo non penso che sia questo in quanto anche io stavo provando una 
installazione di prova di PHP 5.2.0 ma mi dava lo stesso errore e visto 
che la mia installazione era semplicemente di prova e che sono 
incasinatissimo ho rimandato tutto all'anno prox .. ma mi fa piacere che 
non sono il solito ad avere questi problemucci ;)
-- 
SEZIONE PICCOLI ACCORGIMENTI: "Chiamami un tassì", mi disse prima di 
morire e sulla sua lapide ho scritto: "Qui riposa in pace Untassì".
[CapoBecchino] - hotmail/msn: capobecchino [@] hotmail [.] com

 non riesce a trovare :)
Infatti ieri continuando a provare sono giunto esattamente a questa 
conclusione.
Però è un peccato questo fatto, magari in un'ipotesi come questa:
- ho due versioni di apache
- ho due versioni di php
- voglio usare una versione di php (es. 5.1.x) con un server apache 
(es. 2.0.x), e l'altro php (es. 5.2.x) con l'altro server apache (es. 
2.2.x).
Bene, se io lascio il PATH nella variabile d'ambiente di windows, una 
delle due versioni si "imputtanerà" :-). Infatti mi compare in un caso 
l'errore grave di windows (brrr...).
Se invece elimino il percorso delle installazioni di php dalla 
variabile d'ambiente path, allora va tutto bene. Tutto bene eccetto il 
fatto che mi segnala quei warning, derivanti proprio dal fatto che non 
riesce a trovare le .dll complementari necessarie per il funzionamento 
di alcune estensioni.
Ma per ora....ahimé....io non ho trovato alternative......e voi?
--
rob4you
www.outofmind.eu

Non ricordo dove ma avevo letto che era fattibile.
Se ritrovo il topic ti faccio sapere :D
rob4you , in data 19/12/2006 10:59 :


 Se ritrovo il topic ti faccio sapere :D
Ottimo...attendo con ansia! :-)
--
rob4you

rob4you , in data 19/12/2006 18:44 :

Il topic non l'ho trovato ma mi viene in mente...e se le direttive dei
moduli apache per il php li specifici all'interno delle direttive DIR?
Cioè...credo che tu abbia necessità di avere uno (o più) "cose" che
girano con php4 e altre ben distinte che girano in php5....allora prova
a caricare le lib giuste nelle (dentro le) direttive che riguardano quei
virtual o la directory..
Intanto continuo a cercare

 Intanto continuo a cercare
E io continuo a restare in ascolto!!! :-)
--
rob4you
www.outofmind.eu

 
Allora.
La soluzione adotatta da molti è caricare una versione come modulo e
l'altra come CGI...
Altro non ho trovato ma credo possa andare bene :)

 l'altra come CGI...
E infatti è ciò che avevo fatto per aggirare il problema. :-)
....se solo inventassero un qualche cosa per poter aver entrambe le 
versioni montate come moduli..... LOL
--
rob4you
www.outofmind.eu

rob4you ha scritto:

io faccio partire due apache su porte diverse?
cioè su 
http://server/
 ho una versione (il 4)
e su 
http://server:8000/
 ho l'altra (il 5)
ma qui andiamo OT

 io faccio partire due apache su porte diverse?
si.
(me lo chiedo giusto per essere sicuro)

 (me lo chiedo giusto per essere sicuro)
LOL LOL LOL
anche io faccio partire due apache su due porte diverse (80 e 8080), ma 
come imposti i rispettivi httpd.conf nei due casi? Perché come ho detto 
in precedenza, se non setto le variabili d'ambiente PATH, funziona 
tranne che per quei warning dove mi dice in pratica che non riesce a 
trovare delle estensioni richieste.
Vabbé che non usi windows :-), ma come imposti i path dei due php nelle 
variabili d'ambiente?
--
rob4you

 variabili d'ambiente?
(vado a memoria)
per le variabili di ambiente tasto destro su
  Risorse del computer -> Proprietà -> giretto tra i vari tab alla ricerca di qualcosa
che abbia a che fare con le var di ambiente -> modifica la var path -> apri un prompt
di ms-dos ... ooops volevo dire dei comandi  -> scrivi set <invio> oppure echo %PATH%

 echo %PATH%
Si certo, :-), non ti chiedevo come impostare in windows una variabile 
d'ambiente, :-), ma come gestire questa situazione, dal momento che nel 
mio caso il problema è PROPRIO l'impostazione di una variabile 
d'ambiente!! :-)
--
rob4you

 E' infatti NON è un problema di Apache, ma di path! :-)
che si può risolvere tramite apache (se uno si legge la documentazione :p)
impostando una variabile di ambiente con SetEnv

 impostando una variabile di ambiente con SetEnv
Leggerò la documentazione......e se riesco a far convivere le due 
versioni di php......sappi che........TI AMO! LOL LOL LOL 
(ehm...vabbe....lo ho scritto di impeto!) :-)
--
rob4you

rob4you ha scritto:

mi dispiace sono già impegnato :)
cmq con SetEnv dovresti risolvere

 cmq con SetEnv dovresti risolvere
ahimé...mi sa che per questa volta è ancora presto prima che sbocci il 
mio amore per te (a questo punto..meglio non giungere mai alla 
soluzione del problema)! :-)
comunque ho fatto addirittura una prova semplicissima, che ovviamente 
:-) non ha funzionato:
- ho acceso solo un server, apache 2.2.3, in ascolto sulla classica 
porta 80, sul quale ho montato php 5.2.0 come modulo con le istruzioni:
SetEnv Path "C:/Programmi/PHP"
SetEnv PHPRC "C:/Programmi/PHP" ;questa magari non serve, però tanto 
per aggiungere.
PHPIniDir "C:/Programmi/PHP"
LoadModule php5_module "C:/Programmi/PHP/php5apache2_2.dll"
AddType application/x-httpd-php .php
Ho eliminato le variabili d'ambiente di windows contenenti il PATH 
dell'installazione di PHP (in quanto ho usato appunto la SetEnv).
Riavviato il computer e il webserver.
Però, quando parte il server, mi dà il solito warning che non trova 
alcuni moduli. Come ho detto in precedenza, i warning non me li dà se 
invece metto il PATH nelle variabili d'ambiente di windows. Ma come ho 
anche detto, sorgono da lì i vari problemi.
Che fare a questo punto...per far andare su entrambi i server, php come 
modulo?
--
rob4you

 
e chiaramente hai testato uno script con print_r($_ENV) vero?
vuoi vedere che trovi sia 'Path' che 'PATH' ?
andiamo per gradi, prossimo obiettivo:
- far sì che un qualunque script php stampando $_ENV['PATH'] richiami il valore
impostato con SetEnv

 impostato con SetEnv
Eh già...ma con $_ENV non si accede alle variabili d'ambiente di 
Apache, ma solo a quelle di windows.
Per prendere le variabili d'ambiente di Apache devo usare la funzione 
di php: apache_getenv("PATH"), ma come ti ho detto prima, compaiono 
tutti i percorsi delle variabili d'ambiente impostati in windows, 
eccetto quello impostato con SetEnv PATH. :-(
Altre idee?
--
rob4you

 Altre idee?
cosa hai alla voce extension_dir del phpinfo()?
sia del 5 che del 4

 sia del 5 che del 4
Il percorso giusto della cartella delle estensioni:
comunque ho php 5.1.2 e php 5.2.0:
- extension_dir = "C:\Programmi\PHP\ext"
- extension_dir = "C:\php-5.1.2-Win32\ext"
Ma infatti non sono le estensioni che stanno in questa cartella quelle 
che non funzionano, ma ad esempio la libmysql.dll che si trova sia 
nella cartella:
- C:\Programmi\PHP
sia in:
- C:\php-5.1.2-Win32
è per questo che è necessario impostare il PATH come variabile 
d'ambiente di windows, oppure spostare questi file di libreria 
specifici in C:\Windows o C:\Windows\System32.
Ma poiché nel caso in esame il file libmysql.dll è diverso per le due 
distribuzioni di php, questo giochetto non si può fare.
E siamo al punto di partenza.
Su internet ho trovato parecchi articoli per far partire anche sullo 
stesso server due versioni di php, ma fanno in modo che una versione 
sia avviata come modulo, e l'altra come cgi. Invece io vorrei farli 
partire entrambi come moduli.
--
rob4you
www.outofmind.eu

 distribuzioni di php, questo giochetto non si può fare.
   cosa ti impedisce di cancellare libmysql.dll da c:\programmi\php e mettere le versioni
corrette in C:\Programmi\PHP\ext e C:\php-5.1.2-Win32\ext ?

 corrette in C:\Programmi\PHP\ext e C:\php-5.1.2-Win32\ext ?
esempio: le librerie php_mysql.dll e php_mysqli.dll (che si trovano, 
ognuna con la sua versione adatta, nella cartella 
"C:\Programmi\PHP\ext" e nella cartella "C:\php-5.1.2-Win32\ext") per 
funzionare hanno bisogno di un'altra libreria "libmysql.dll", che si 
trova, per la versione adatta di php, in "C:\Programmi\PHP" e in 
"C:\php-5.1.2-Win32".
Se io provo a spostare questa libreria "libmysql.dll" nelle cartella 
"ext", non sortisco l'effetto voluto.
Il motivo è che UNA COSA sono le estensioni che risiedono in 
"extension_dir" (e cioè in questo esempio "php_mysql.dll" e 
"php_mysqli.dll") e UN'ALTRA COSA sono le librerie richieste da php per 
far funzionare talune di queste estensioni (in questo caso la libreria 
richiesta è "libmysql.dll").
Caricando php come modulo di apache, le estensioni "php_mysql.dll" e 
"php_mysqli.dll" sono correttamente caricate (grazie alla specifica nel 
php.ini dell'"extension_dir"), ma invece la ricerca del necessario 
"libmysql.dll" avviene (non ricordo bene in che ordine) più o meno 
così:
- tra le variabili d'ambiente PATH
- nella directory principale di windows (tipo c:\WIndows)
- nella cartella bin di apache
Ciò detto, la prima possibilità, seppure è la migliore in caso di 
installazione singola, non lo è in caso di più versioni di php (come 
moduli).
La seconda possibilità è peggio ancora per vari ovvi motivi.
La terza possibilità è quella che alla fine ho accettato.
Ho in particolare usato una soluzione "ibrida" tra la prima e la terza:
- ho impostato nella variabile d'ambiente PATH di windows, il percorso 
dell'ultima versione di php 5.2.0 (quella che uso di più): 
"C:\Programmi\PHP". Così facendo, se devo attivare librerie 
particolari, posso seguire le normalissime procedure. Di conseguenza 
quando avvio apache (2.2.3) mi viene caricato bene il mio php.
- per quanto riguarda invece l'altra versione di php che ho (5.1.2), ho 
copiato, nella cartella "bin" dell'altro server apache (2.0.55),  
innanzitutto la libreria fondamentale "php5ts.dll", e poi tutte le 
librerie appropriate che sono richieste per il corretto caricamento 
delle estensioni (come ad esempio "libmysql.dll").
Così facendo, con i due server distinti (apache 2.0.55 e apache 2.2.3), 
sono riuscito a lavorare "contemporaneamente" due versioni di php 
(5.1.2 e 5.2.0) installate come moduli, con tutte le estensioni 
corrette di una versione di php e dell'altra.
E così...vissero tutti felici e contenti.
ps: certo che se avesse funzionato su apache la direttiva "SetEnv PATH 
percorso" sarebbe stato più carino e immediato, ma chi s'accontenta 
gode (così e così). :-)
--
rob4you
www.outofmind.eu