Come puoi impostare la PATHvariabile d'ambiente per Apache2? Ho provato a impostarlo in /usr/sbin/envvarse in httpd.conf con SetEnv PATH(e passandolo a SSI con PassEnv), ma non viene portato avanti.
Come puoi impostare la PATHvariabile d'ambiente per Apache2? Ho provato a impostarlo in /usr/sbin/envvarse in httpd.conf con SetEnv PATH(e passandolo a SSI con PassEnv), ma non viene portato avanti.
Risposte:
Come altri hanno già detto, lo fai attraverso l'uso di un file di variabili di ambiente. Fornirò maggiori dettagli in questa risposta e mostrerò la prova che funziona.
Questo file di variabili di ambiente deve essere di origine apachectl. Sulla mia casella Ubuntu, questo file è su /etc/apache2/envvars. Su RedHat, questo è a /etc/sysconfig/httpd. Su FreeBSD, questo è impostato in /etc/rc.conf(penso). In alternativa, puoi anche impostare queste informazioni in uno script di avvio ( /etc/init.d/httpdo apachectl, ecc.). Tuttavia, penso che sia meglio lasciare soli gli script di avvio, se possibile. Il posto migliore si trova nello script delle variabili di ambiente designato.
Verifica la posizione di questo file envvars. Su Ubuntu, /etc/init.d/apache2ctlmostra che ha origine /etc/apache2/envvars:
# the path to the environment variable file
test -z "$APACHE_ENVVARS" && APACHE_ENVVARS='/etc/apache2/envvars'
# pick up any necessary environment variables
if test -f $APACHE_ENVVARS; then
. $APACHE_ENVVARS
fi
Per visualizzare le variabili, sto usando uno script Perl printenv.cgi e l'ho reso disponibile su http://example.org/cgi-bin/printenv.cgi . Lo script mi mostra il seguente PERCORSO:
PATH = /usr/local/bin:/usr/bin:/bin
Per modificare queste variabili, modifico il file envvars:
$ sudo vim /etc/apache2/envvars
Modifica il tuo PERCORSO in questo file. In questo esempio, aggiungerò /opt/local/binal mio PERCORSO. In alcuni casi, potrebbe essere necessario utilizzare export PATHe non solo PATH:
export PATH=$PATH:/opt/local/bin
Riavvia apache
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
Visualizza i risultati su http://example.org/cgi-bin/printenv.cgi , che ora mostrano che il PERCORSO ora contiene un nuovo elemento:
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
Se quanto sopra non funziona, potrebbe accadere qualcosa di insolito. Forse la tua sceneggiatura sta ignorando o sovrascrivendo il PERCORSO.
gracefule ciò non ha reso effettive le modifiche.
Su 2.2, la variabile d'ambiente PATH non può essere impostata usando Setenv.
Sul mio sistema lo è /etc/apache2/envvars.
PATH
Puoi impostarlo in start()funzione di init script, qualcosa del genere:
start() {
echo -n $"Starting $prog: "
check13 || exit 1
export PATH=${PATH}:/var/ossec/bin
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
Crea uno script Perl per elencare tutte le variabili di ambiente:
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
Inseriscilo /var/www/cgi-bine controlla http://domain.com/cgi-bin/env.cgi, vedrai i belows:
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
Su RedHat con Apache 2.4.x compilato dal sorgente con --prefix=/usr --enable-layout=RedHatil file envvars si trova in /usr/sbin/envvars. Posso confermare che l'impostazione del PATH appropriato in quel file lo rende Apache e PHP consapevoli di ciò.
Ho usato lo stesso approccio di Stefan Lasiewski per determinarlo. Per Apache 2.4.12 , il /usr/sbin/envvarsfile proviene dalla riga 49 di /usr/sbin/apachectl.
/usr/sbin/apachectlmenziona /etc/sysconfig/httpd, che contiene: «Questo file non viene più utilizzato per configurare variabili di ambiente aggiuntive per il processo httpd. È stato sostituito da systemd. » paste.debian.net/361218
Modifica il file plist di Apache2 con qualunque editor ti piaccia (esempio usando vim):
$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist
Aggiungere quanto segue al file plist:
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
Se la EnvironmentVariableschiave esiste già, basta aggiungere
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
al <dict>
NB: per Mac OSX 10.11 (EL Capitan) o versioni successive, è necessario eseguire il comando csrutil disablein Terminale dopo aver riavviato e colpito CMD + R, quindi sarà possibile modificare questo file.
Riavvia Apache2
$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
Sul mio sistema Apache2 ho scoperto che molti visitatori volevano solo saccheggiare la mia raccolta di emoticon / emoticon accuratamente compilata (sul serio!), Quindi ho deciso di utilizzare un link simbolico generato casualmente al percorso della directory che sarebbe stato raccolto come Apache2 variabile, ed era praticamente impossibile condividere i collegamenti.
Quindi, ogni 30 minuti, cron eseguiva uno script perl che riscriveva il file .htaccess e includeva un SetEnv come puoi vedere di seguito:
....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"
Quindi, nella parte superiore delle mie pagine PHP avrei letto la variabile in questo modo, e più avanti nella pagina ci sarebbe stata quella variabile utilizzata per creare un percorso per l'apprendista smiley:
$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';
Funziona per me e spero che ti aiuti!
PATH