2012-05-26 9 views
5

Ci sono alcuni script che necessitano di determinati percorsi da impostare in ambiente per l'esecuzione. Voglio modificare il mio percorso per includere queste posizioni. Queste sono le posizioni che voglio aggiungere al mio percorso exec.Come modificare il percorso utilizzato da exec in php

$JAVA_HOME = "/usr/java/jdk1.6.0_31"; 
$ANT_HOME = "/usr/apache-ant-1.8.3"; 
$ANT_BIN = "$ANT_HOME/bin"; 
$JAVA_BIN = "$JAVA_HOME/bin"; 
$ADDPATH=$JAVA_HOME . ":" . $ANT_HOME . ":" . $ANT_BIN .":" . $JAVA_BIN . ":" . $PATH; 

e ho usato putenv

putenv("JAVA_HOME=" . $JAVA_HOME); 
putenv("ANT_HOME=" . $ANT_HOME); 
putenv("ANT_BIN=" . $ANT_BIN); 
putenv("JAVA_BIN=" . $JAVA_BIN); 
putenv("PATH=".$_ENV["PATH"].":".$ADDPATH); 

Tuttavia quando faccio un

echo getenv("PATH"); 

ottengo

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

Ho due domande: (a) Come fare Ho impostato la variabile del percorso su t I valori I want (b) Esiste un modo (o una posizione) per aggiungere queste posizioni per far parte dell'ambiente server (all'interno delle configurazioni php.ini o apache) piuttosto che usare lo script per apportare queste modifiche.

risposta

1

Prova a utilizzare apache_setenv() e apache_getenv().

+0

Grazie, risponde alla mia prima query. Tuttavia, mi piacerebbe utilizzare una soluzione più elegante per modificare le configurazioni del server dai file delle impostazioni, piuttosto che modificarlo in ogni script –

1

Per impostare le variabili d'ambiente in php, mi permetta di fare riferimento alla documentazione ufficiale di putenv:

Aggiunge l'impostazione per l'ambiente server. La variabile di ambiente sarà esiste solo per la durata della richiesta corrente. Alla fine della richiesta l'ambiente viene ripristinato allo stato originale.

L'impostazione di determinate variabili di ambiente può costituire una potenziale violazione della protezione . La direttiva safe_mode_allowed_env_vars contiene un elenco di prefissi delimitati da virgola . In modalità provvisoria, l'utente può solo modificare le variabili d'ambiente i cui nomi iniziano con i prefissi forniti da questa direttiva. Per impostazione predefinita, gli utenti saranno in grado di impostare le variabili di ambiente che iniziano con PHP_ (ad esempio PHP_FOO = BAR). Nota: se questa direttiva è vuota, PHP permetterà all'utente di modificare QUALSIASI variabile d'ambiente !

La direttiva safe_mode_protected_env_vars contiene una virgola delimitato elenco delle variabili di ambiente, che l'utente finale non sarà in grado di cambiamento utilizzando putenv(). Queste variabili saranno protette anche se safe_mode_allowed_env_vars è impostato per consentire di modificarle.

Penso che non sia assolutamente la strada da percorrere, se non casi molto particolari; sulle altre variabili d'ambiente impostazione delle lancette in configurazione httpd è molto facile, utilizzando il modulo mod_env s' SetEnv direttiva:

direttiva SetEnv

Description: Sets environment variables 
Syntax:  SetEnv env-variable value 
Context:  server config, virtual host, directory, .htaccess 
Override:  FileInfo 
Status:  Base 
Module:  mod_env 

Imposta una variabile d'ambiente interno, che è quindi disponibile per Apache HTTP Server moduli e passati a script CGI e pagine SSI.

Esempio

SetEnv SPECIAL_PATH /foo/bin 

Le variabili d'ambiente interne stabilite dalla presente direttiva sono impostati dopo la maggior parte delle direttive di elaborazione richiesta Early è gestita, come il controllo degli accessi e la mappatura URI-to-file. Se la variabile di ambiente che si sta impostando è intesa come input in questa fase iniziale di elaborazione di come la direttiva RewriteRule, è necessario impostare invece con SetEnvIf.

Ah possono andare quasi ovunque, da httpd.conf principale, a configurazioni di accoglienza virutal, o anche in .htaccess al momento della concessione FileInfo override, che risultano essere molto versatile.

Refs:

+0

Sono riuscito a cambiare il percorso dello script utilizzando la risposta @bsdnoobz. Quindi il percorso deve essere cambiato da Apache2 perché non sto funzionando in modalità sicura. Sono andato alla directory apache2 ma non riesco a trovare il file mod_env. La documentazione mostra cosa voglio fare. Ma puoi dirmi come si fa? cioè aggiungi la voce al file delle impostazioni di apache. Sono relativamente nuovo alle impostazioni di apache2. –

+0

Dipende dalla tua distribuzione os/httpd. In generale, la prima cosa da fare è controllare se _LoadModule module_env_ si ​​trova nel file di configurazione principale _httpd.conf_ apache. Se lo è, il modulo è caricato e attivo. Quindi, se vuoi che la variabile env sia disponibile in tutta l'installazione di apache, metti la direttiva in _httpd.conf_; se lo vuoi disponibile solo per un sito, mettilo all'interno di _VirtualHost_; oppure, puoi metterlo in un file .htaccess, dopo aver concesso _AllowOverride FileInfo_ al VirtualHost pertinente. Leggi di htaccess qui: http://httpd.apache.org/docs/2.2/howto/htaccess.html –

+0

Ho attivato phpinfo e mi ha mostrato che mod_env è caricato sul mio server. Dopo sono andato in per Apache httpd.conf e modificate ' Opzioni Nessuna AllowOverride None Ordine negare, permettono Deny da tutto ' a ' Opzioni Nessuna SetEnv PATH /usr/java/jdk1.6.0_31 : /usr/apache-ant-1.8.3: /usr/apache-ant-1.8.3/bin: /usr/java/jdk1.6.0_31/bin AllowOverride None ordine negare, permettono Nega da tutto 'e riavviato apache ma non ho potuto ottenere il percorso per riflettere il cambiamento. Mi manca qualcosa –

Problemi correlati