PATHApache2 için ortam değişkenini nasıl ayarlayabilirsiniz ? Ben /usr/sbin/envvarshttpd.conf ile SetEnv PATH(ve PassEnv ile SSI boyunca geçerek ) ve içinde ayar denedim , ama sadece devam etmez.
PATHApache2 için ortam değişkenini nasıl ayarlayabilirsiniz ? Ben /usr/sbin/envvarshttpd.conf ile SetEnv PATH(ve PassEnv ile SSI boyunca geçerek ) ve içinde ayar denedim , ama sadece devam etmez.
Yanıtlar:
Diğerlerinin söylediği gibi, bunu bir ortam değişkeni dosyasını kullanarak yaparsınız. Bu cevapta daha fazla ayrıntı vereceğim ve işe yaradığına dair kanıt göstereceğim.
Bu ortam değişkeni dosyasının kaynağı olmalıdır apachectl. Ubuntu kutumda, bu dosya adresinde /etc/apache2/envvars. RedHat'ta bu işte /etc/sysconfig/httpd. FreeBSD'de, bu /etc/rc.conf(sanırım) ayarlanır . Alternatif olarak, bu bilgileri bir başlangıç komut dosyasında ( /etc/init.d/httpdveya apachectlvb.) De ayarlayabilirsiniz . Ancak, mümkünse başlangıç komut dosyalarını yalnız bırakmak en iyisidir. En iyi yer belirlenmiş ortam değişkenleri betiğidir.
Bu envvars dosyasının konumunu doğrulayın. Ubuntu'da şunu /etc/init.d/apache2ctlgösterdiğini gösteriyor /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
Değişkenleri görüntülemek için, bir Perl printenv.cgi betiği kullanıyorum ve http://example.org/cgi-bin/printenv.cgi adresinden erişebiliyorum . Senaryo bana şu PATH'ı gösteriyor:
PATH = /usr/local/bin:/usr/bin:/bin
Bu değişkenleri değiştirmek için envvars dosyasını düzenliyorum:
$ sudo vim /etc/apache2/envvars
Bu dosyada PATH'inizi değiştirin. Bu örnekte, PATH'ime ekleyeceğim /opt/local/bin. Bazı durumlarda, export PATHyalnızca aşağıdakileri kullanmanız gerekebilir PATH:
export PATH=$PATH:/opt/local/bin
Apache'yi yeniden başlat
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
Sonuçları artık PATH'ın yeni bir öğe içerdiğini gösteren http://example.org/cgi-bin/printenv.cgi adresinde görüntüleyin :
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
Yukarıdakiler işe yaramazsa, olağandışı bir şey olabilir. Belki senaryonuz PATH'ı görmezden geliyor ya da üzerine yazıyor.
gracefulve bu değişikliklerin etkili olmasına neden olmadı.
2.2'de PATH ortam değişkeni Setenv kullanılarak ayarlanamaz.
Benim sistemimde /etc/apache2/envvars.
PATH
Bunu start()init betiğinin işlevinde ayarlayabilirsiniz , şöyle bir şey:
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
}
Tüm ortam değişkenlerini listelemek için bir Perl betiği oluşturun:
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
Yerleştirin /var/www/cgi-binve kontrol edin http://domain.com/cgi-bin/env.cgi, aşağıdakileri göreceksiniz:
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
RedHat üzerinde Apache 2.4.x ile kaynaktan --prefix=/usr --enable-layout=RedHatenvvars dosyası ile derlenir /usr/sbin/envvars. Bu dosyada uygun PATH ayarının Apache ve PHP'nin farkında olmasını sağladığını onaylayabilirim.
Bunu belirlemek için Stefan Lasiewski ile aynı yaklaşımı kullandım. İçin Apache 2.4.12 , /usr/sbin/envvarsdosya hattı 49 üzerinde kaynaklı /usr/sbin/apachectl.
/usr/sbin/apachectlbahsedilmektedir /etc/sysconfig/httpd: «Bu dosya artık httpd işlemi için ek ortam değişkenleri yapılandırmak için kullanılmamaktadır. Yerine systemd girdi. » paste.debian.net/361218
Apache2 plist dosyasını istediğiniz düzenleyiciyle düzenleyin (örnek vim kullanarak):
$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist
Plist dosyasına aşağıdakini ekleyin:
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
Eğer EnvironmentVariablesanahtar zaten var, sadece eklemek
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
-e <dict>
Not: Mac OSX 10.11 (EL Capitan) veya üstü için, csrutil disableCMD + R'yi yeniden başlattıktan ve vurduktan sonra Terminal'de komutu çalıştırmanız gerekir ve ardından bu dosyayı düzenleyebilirsiniz.
Apache2'yi yeniden başlat
$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
Apache2 sistemimde çok sayıda ziyaretçinin dikkatlice derlediğim Smileys / emoticons koleksiyonumu yağmalamak istediğini gördüm (ciddi olarak!), Bu yüzden dizin yolunda rastgele oluşturulmuş bir sembolik kullanmaya karar verdim. Apache2 değişkeni ve bağlantıları paylaşmak neredeyse imkansızdı.
Yani, her 30 dakikada bir, cron .htaccess dosyasını yeniden yazacak ve aşağıda görebileceğiniz gibi bir SetEnv içerecek bir perl betiği çalıştırdı:
....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"
Sonra, PHP sayfalarımın üstündeki değişkeni bu şekilde okurdum ve sayfada daha sonra uygun gülen yüz için bir yol oluşturmak için kullanılan bu değişken olurdu:
$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';
Benim için çalışıyor ve umarım sana yardımcı olur!
PATH