Bagaimana Anda bisa mengatur PATHvariabel lingkungan untuk Apache2? Saya sudah mencoba mengaturnya di /usr/sbin/envvarsdan di httpd.conf dengan SetEnv PATH(dan meneruskannya ke SSI dengan PassEnv), tetapi itu tidak bisa dijalankan.
Bagaimana Anda bisa mengatur PATHvariabel lingkungan untuk Apache2? Saya sudah mencoba mengaturnya di /usr/sbin/envvarsdan di httpd.conf dengan SetEnv PATH(dan meneruskannya ke SSI dengan PassEnv), tetapi itu tidak bisa dijalankan.
Jawaban:
Seperti yang orang lain katakan, Anda melakukan ini melalui penggunaan file variabel lingkungan. Saya akan memberikan rincian lebih lanjut dalam jawaban ini, dan menunjukkan bukti bahwa itu berhasil.
File variabel lingkungan ini harus berasal dari apachectl. Di kotak Ubuntu saya, file ini di /etc/apache2/envvars. Di RedHat, ini di /etc/sysconfig/httpd. Pada FreeBSD, ini diatur dalam /etc/rc.conf(saya pikir). Sebagai alternatif, Anda juga dapat mengatur informasi ini dalam skrip startup ( /etc/init.d/httpdatau apachectl, dll.). Namun, saya pikir sebaiknya tinggalkan skrip startup sendiri jika memungkinkan. Tempat terbaik adalah dalam skrip variabel lingkungan yang ditunjuk.
Verifikasi lokasi file envvars ini. Di Ubuntu, /etc/init.d/apache2ctlmenunjukkan bahwa itu sumber /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
Untuk melihat variabel, saya menggunakan skrip Perl printenv.cgi , dan membuatnya tersedia di http://example.org/cgi-bin/printenv.cgi . Script menunjukkan PATH berikut kepada saya:
PATH = /usr/local/bin:/usr/bin:/bin
Untuk mengubah variabel-variabel ini, saya mengedit file envvars:
$ sudo vim /etc/apache2/envvars
Ubah PATH Anda di file ini. Dalam contoh ini, saya akan menambahkan /opt/local/binPATH saya. Dalam beberapa kasus, Anda mungkin perlu menggunakan export PATHdan tidak hanya PATH:
export PATH=$PATH:/opt/local/bin
Mulai ulang apache
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
Lihat hasilnya di http://example.org/cgi-bin/printenv.cgi , yang sekarang menunjukkan bahwa PATH sekarang berisi elemen baru:
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
Jika hal di atas tidak berhasil, sesuatu yang tidak biasa mungkin terjadi. Mungkin skrip Anda mengabaikan atau menimpa PATH.
graceful, dan itu tidak menyebabkan perubahan berlaku.
Pada 2.2, variabel lingkungan PATH tidak dapat diatur menggunakan Setenv.
Di sistem saya itu /etc/apache2/envvars.
PATH
Pastikan Anda telah memuat mod_env.
Sintaks yang benar adalah (contoh):
SetEnv LD_LIBRARY_PATH /usr/local/lib
Ini berhasil untuk saya.
PATH
Anda dapat mengaturnya dalam start()fungsi skrip init, seperti ini:
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
}
Buat skrip Perl untuk mencantumkan semua variabel lingkungan:
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
Tempatkan ke dalam /var/www/cgi-bin, dan periksa http://domain.com/cgi-bin/env.cgi, Anda akan melihat di bawah ini:
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
Di RedHat dengan Apache 2.4.x dikompilasi dari sumber dengan --prefix=/usr --enable-layout=RedHatfile envvars terletak di /usr/sbin/envvars. Saya dapat mengonfirmasi bahwa pengaturan PATH yang sesuai dalam file itu membuatnya begitu Apache dan PHP menyadarinya.
Saya menggunakan pendekatan yang sama dengan Stefan Lasiewski untuk menentukan itu. Untuk Apache 2.4.12 , /usr/sbin/envvarsfile tersebut bersumber pada baris 49 dari /usr/sbin/apachectl.
/usr/sbin/apachectlsebutkan /etc/sysconfig/httpdsebaliknya, yang berisi: «File ini tidak lagi digunakan untuk mengonfigurasi variabel lingkungan tambahan untuk proses httpd. Itu telah digantikan oleh systemd. » Paste.debian.net/361218
Edit file plist Apache2 dengan editor apa pun yang Anda suka (contoh menggunakan vim):
$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist
Tambahkan berikut ini ke file plist:
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
Jika EnvironmentVariableskunci sudah ada, cukup tambahkan
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
ke <dict>
NB: Untuk Mac OSX 10.11 (EL Capitan) atau lebih tinggi, Anda harus menjalankan perintah csrutil disabledi Terminal setelah mem-boot ulang dan menekan CMD + R dan kemudian Anda akan dapat mengedit file ini.
Mulai ulang Apache2
$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
Pada sistem Apache2 saya, saya menemukan bahwa banyak pengunjung hanya ingin menjarah koleksi Smiley / emotikon yang saya buat dengan hati-hati (serius!), Jadi saya memutuskan untuk menggunakan symlink yang dibuat secara acak ke jalur direktori yang akan diambil sebagai Variabel Apache2, dan praktis tidak mungkin untuk membagikan tautan.
Jadi, setiap 30 menit, cron menjalankan skrip perl yang akan menulis ulang file .htaccess dan memasukkan SetEnv seperti yang Anda lihat di bawah:
....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"
Kemudian, di bagian atas halaman PHP saya, saya akan membaca variabel seperti itu, dan kemudian di halaman akan ada variabel yang digunakan untuk membangun path ke aplikasi yang sesuai smiley:
$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';
Bekerja untuk saya, dan saya harap ini membantu Anda!
PATH